【问题标题】:Find earliest and latest timestamp per day, created calculated column with time in between每天查找最早和最晚的时间戳,创建计算列,中间有时间
【发布时间】:2020-07-13 01:47:51
【问题描述】:

我对 DAX 和 PowerBI 还很陌生,我正在努力思考如何确定和计算每天的时间范围。

目标:

  • 获取数据集中每一天的最小和最大时间戳
  • 以 HH:MM 计算两者之间的时间差
  • 创建了一个计算列来存储 HH:MM 结果

到目前为止,在创建最小和最大时间戳的计算列时,我发现以下两个 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 年的每一行。任何建议或指示都会很棒!

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    我已经设法通过以下方法找到了解决此问题的方法;

    创建了一个计算表,该表在指定的时间范围内为每个不同的用户创建了一个日期和电子邮件。

    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 字段之间创建了一个关系。

    希望这对可能遇到相同问题的其他人有所帮助!

    【讨论】:

      最近更新 更多