You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI 计算特定时间段内排除重叠部分的设备总停机时长

Power BI 去重叠设备停机时长度量值解决方案

以下是可直接使用的DAX度量值代码,默认适配你提供的表结构,表名假设为故障记录表,如果实际表名/字段名不同可自行替换:

去重叠总停机时长 = 
VAR 统计开始时间 = MIN('日期表'[日期时间]) // 切片器绑定的时间字段下限,固定时间可直接赋值
VAR 统计结束时间 = MAX('日期表'[日期时间]) // 切片器绑定的时间字段上限,固定时间可直接赋值
// 第一步:过滤出和统计区间有交集的故障记录
VAR 过滤后故障 = 
    FILTER(
        ALLSELECTED('故障记录表'),
        '故障记录表'[machine_id] IN VALUES('故障记录表'[machine_id])
        && '故障记录表'[start_timestamp] < 统计结束时间
        && ('故障记录表'[start_timestamp] + '故障记录表'[downtime (sec.)]/86400) > 统计开始时间
    )
// 第二步:计算每个故障的结束时间,并裁剪到统计区间范围内
VAR 带结束时间的故障 = 
    ADDCOLUMNS(
        过滤后故障,
        "end_time", [start_timestamp] + [downtime (sec.)]/86400,
        "adj_start", MAX([start_timestamp], 统计开始时间),
        "adj_end", MIN([start_timestamp] + [downtime (sec.)]/86400, 统计结束时间)
    )
// 第三步:按故障开始时间排序
VAR 排序故障 = 
    ADDCOLUMNS(
        带结束时间的故障,
        "rank", RANKX(带结束时间的故障, [adj_start],, ASC, Dense)
    )
// 第四步:合并重叠的时间区间
VAR 合并区间 = 
    GENERATE(
        VALUES('故障记录表'[machine_id]),
        VAR 设备故障 = FILTER(排序故障, [machine_id] = EARLIER('故障记录表'[machine_id]))
        VAR 最大排名 = MAXX(设备故障, [rank])
        RETURN
        ADDCOLUMNS(
            GENERATESERIES(1, 最大排名),
            "合并后开始", 
            VAR 当前排名 = [Value]
            VAR 前面的最大结束 = MAXX(FILTER(设备故障, [rank] < 当前排名), [adj_end])
            RETURN MAXX(FILTER(设备故障, [rank] = 当前排名), MAX([adj_start], 前面的最大结束)),
            "合并后结束",
            VAR 当前排名 = [Value]
            RETURN MAXX(FILTER(设备故障, [rank] = 当前排名), [adj_end])
        )
    )
// 第五步:计算所有有效区间的总秒数
VAR 有效区间 = FILTER(合并区间, [合并后开始] < [合并后结束])
RETURN
SUMX(有效区间, DATEDIFF([合并后开始], [合并后结束], SECOND))

使用说明

  • 如你通过切片器选择统计时间段,只需将你的时间维度表的日期时间字段绑定到切片器即可,度量值会自动读取选中的时间范围
  • 如你需要固定统计时间段,直接替换统计开始时间和统计结束时间变量的取值即可,比如你给出的示例场景可直接修改为:
    VAR 统计开始时间 = DATETIME(2021,10,10,7,0,0)
    VAR 统计结束时间 = DATETIME(2021,10,10,7,10,0)
    

结果验证

你给出的machine_id=1的测试场景,度量值计算逻辑如下:

  1. 三条故障裁剪到统计区间后得到的区间分别为:7:037:04:40、7:047:04:30、7:06~7:10
  2. 合并重叠区间后得到两个有效区间:7:037:04:40、7:067:10
  3. 总时长为100秒+240秒=340秒,和预期结果一致

注意事项

  • 度量值支持按设备维度拆分统计,也可直接统计全部设备的总去重叠停机时长
  • 如数据量较大,可提前在Power Query中预计算每个故障的结束时间,进一步提升度量值计算效率

内容的提问来源于stack exchange,提问作者Kunis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:36:04