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])
我需要一个 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])