Найдите самую раннюю и самую последнюю метку времени за день, созданный вычисляемый столбец со временем между - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в DAX и PowerBI, и я пытаюсь понять, как я могу определять и рассчитывать временные рамки в день.

Цель:

  • Получите минимальную и максимальную временные метки для каждого дня в наборе данных
  • Вычислите разницу во времени между ними в формате ЧЧ: ММ
  • Создан вычисляемый столбец для хранения результата ЧЧ: ММ

На данный момент я обнаружил, что следующие два запроса DAX работают при создании вычисляемого столбца с минимальными и максимальными временными метками:

CALCULATE(MIN('Packing Jobs - Pick Lines'[Timestamp]),FILTER('Packing Jobs - Pick Lines',FORMAT([Timestamp],"DD-MM-YYYY")=FORMAT(EARLIER([Timestamp]),"DD-MM-YYYY")))

CALCULATE(MAX('Packing Jobs - Pick Lines'[Timestamp]),FILTER('Packing Jobs - Pick Lines',FORMAT([Timestamp],"DD-MM-YYYY")=FORMAT(EARLIER([Timestamp]),"DD-MM-YYYY")))

Однако мне трудно вычислить и сохранить разницу между двумя результатами. Кажется, я не могу вызывать вычисляемые столбцы при создании нового столбца для вычисления, и когда я попытался объединить их в одно создание столбца, результаты далеки от точности.

Column = 
VAR firstscan =
    CALCULATE(MIN('Packing Jobs - Pick Lines'[Timestamp]),FILTER('Packing Jobs - Pick Lines',FORMAT([Timestamp],"DD-MM-YYYY HH:MM")=FORMAT(EARLIER([Timestamp]),"DD-MM-YYYY HH:MM")))
VAR lastscan =
    CALCULATE(MAX('Packing Jobs - Pick Lines'[Timestamp]),FILTER('Packing Jobs - Pick Lines',FORMAT([Timestamp],"DD-MM-YYYY HH:MM")=FORMAT(EARLIER([Timestamp]),"DD-MM-YYYY HH:MM")))

RETURN
    CALCULATE(lastscan - firstscan)

Я пробовал с и без и HH:MM, и результат все еще показывает мне 1899 для каждой строки. Любые советы или указатели были бы потрясающими!

1 Ответ

0 голосов
/ 15 июля 2020

Мне удалось найти решение этой проблемы с помощью следующего:

Создал вычисляемую таблицу, в которой были созданы дата и адрес электронной почты для каждого отдельного пользователя в указанном диапазоне времени.

hoursWorked = 
GENERATE(CALENDAR(DATE(2020, 1, 1), DATE(2030, 12, 31)),  SUMMARIZE('Packing Jobs - Pick Lines', 'Packing Jobs - Pick Lines'[Email]))

Созданы два вычисляемых столбца, один для получения первой отметки времени дня для каждого пользователя, а другой для последней отметки времени каждый день.

startTime = 
CALCULATE (
    MIN('Packing Jobs - Pick Lines'[Timestamp]),
    FILTER(
            'Packing Jobs - Pick Lines',
            'Packing Jobs - Pick Lines'[Email] = hoursWorked[Email] && FORMAT(hoursWorked[Date], "DD-MM-YYYY") = FORMAT('Packing Jobs - Pick Lines'[Timestamp], "DD-MM-YYYY")
        )
)

endTime = 
CALCULATE (
    MAX('Packing Jobs - Pick Lines'[Timestamp]),
    FILTER(
            'Packing Jobs - Pick Lines',
            'Packing Jobs - Pick Lines'[Email] = hoursWorked[Email] && FORMAT(hoursWorked[Date], "DD-MM-YYYY") = FORMAT('Packing Jobs - Pick Lines'[Timestamp], "DD-MM-YYYY")
        )
)

Наконец, я вычислил значение минут для каждого дня у пользователя есть временные метки, которые хранятся в последнем вычисляемом столбце, называемом минутами.

minutes = 
DATEDIFF(hoursWorked[startTime], hoursWorked[endTime], MINUTE)

Чтобы сопоставить это с данными в 'Packing Jobs - Pick Lines', я создал связь между полем email в обеих таблицах.

Надеюсь, это поможет любому, кто может столкнуться с такой же проблемой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...