【问题标题】:PowerBi DAX measure to sum duration of timespans filtered by current slicerPowerBi DAX 测量对当前切片器过滤的时间跨度的持续时间进行求和
【发布时间】:2022-01-13 12:16:25
【问题描述】:

我需要一个 DAX 度量,它可以为我提供受日期切片器限制的多个类别的持续时间总和。

在这个简化的示例中,有 2 个类别,每个类别有 3 个子类别。仪表板上的日期时间切片器设置为 2021 年 1 月 2 日中午到 1 月 6 日午夜的时间跨度。我需要这个时间跨度内所有类别的总时长。

输入数据: 包含每个类别的多行的表,其中包含开始日期和结束日期。

复杂的部分是时间戳之间有停顿。

期望的输出: 仪表板上的表格,其中包含分类时间跨度期间总和持续时间的计算度量。

更换切片器时,测量值也会随之改变。

我目前对这个问题的解决方案是一个 M 公式,用于创建每个时间跨度中所有日期的列表并取消透视所有列表。在仪表板中,行数为您提供所选时间跨度内的天数。这个解决方案虽然需要一个更大的输入表,但如果你想精确到第二个,那么只有几天才能工作。

我尝试通过一种措施解决这个问题,但没有取得任何值得在这里展示的进展。

所有日期时间值的格式为 dd.mm.yyyy hh:mm:ss(24 小时制)

【问题讨论】:

    标签: powerbi dax powerbi-desktop timespan


    【解决方案1】:

    我找到了一种使用 2 项措施的方法。 第一个度量计算每个元素在时间跨度内的时间: 我使用一个仅包含所有可用日期的日期表,它是切片器的输入和称为“数据”的数据表。

    duration_in_timespan_single = 
    VAR MinTs = MIN ('Date'[Date])
    VAR MaxTs = MAX ('Date'[Date])
    VAR MinUtcMin = MIN ('Data'[Date_Start])
    VAR MaxUtcMax = MAX ('Data'[Date_End])
    
    RETURN 
    IF(
        AND(MinUtcMin >= MinTs, MinUtcMin <= MaxTs),
        IF(
            MaxUtcMax <= MaxTs,
            CONVERT((MaxUtcMax-MinUtcMin),DOUBLE),
            CONVERT((MaxTs-MinUtcMin),DOUBLE)),
        IF(
            MinUtcMin < MinTs,
            IF(
                MaxUtcMax > MinTs,
                IF(
                    MaxUtcMax <= MaxTs,
                    CONVERT((MaxUtcMax-MinTs),DOUBLE),
                    CONVERT((MaxTs-MinTs),DOUBLE)
                ),
               0
            ),
            0
        )
    )
    

    第二个衡量标准只是总结了每个类别的第一个衡量标准:

    duration_in_timespan = SUMX('Data',[duration_in_timespan_single])
    

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多