代码之家  ›  专栏  ›  技术社区  ›  PacketLoss

查找每天最早和最新的时间戳,创建计算列,时间介于两者之间

  •  0
  • PacketLoss  · 技术社区  · 5 年前

    • 获取数据集中每天的最小和最大时间戳
    • 计算两者之间的时间差,单位为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年的每一行。任何建议或指点都将是惊人的!

    0 回复  |  直到 5 年前
        1
  •  0
  •   PacketLoss    5 年前

    我通过以下途径设法找到了解决这个问题的办法:;

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

    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

    希望这能帮助其他可能遇到同样问题的人!