PowerBi DAX 度量以总结当前切片器过滤的时间跨度的持续时间

PowerBi DAX measure to sum duration of timespans filtered by current slicer

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

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

输入数据: table 包含每个类别的多行以及开始日期和结束日期。

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

期望的输出: 仪表板上的 table 包含类别和在切片时间跨度内汇总持续时间的计算度量。

当改变切片器时,测量值也会改变。

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

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

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

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

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])