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

使用DAX计算工单各状态耗时并生成100%堆叠条形图

工单状态耗时计算与可视化实现方案(DAX+Power BI)

一、数据预处理:去重连续重复状态

原始工单数据存在同一工单连续相同状态的重复记录,需先清理以确保耗时计算准确:

1. 添加计算列标记有效记录

在原始工单表中创建计算列是否保留记录:

是否保留记录 = 
VAR 当前状态 = '工单表'[状态]
VAR 上一条状态 = 
  CALCULATE(
    MAX('工单表'[状态]),
    FILTER(
      '工单表',
      '工单表'[工单编号] = EARLIER('工单表'[工单编号]) &&
      '工单表'[创建时间] < EARLIER('工单表'[创建时间])
    )
  )
RETURN IF(当前状态 <> 上一条状态 || ISBLANK(上一条状态), 1, 0)

2. 创建清理后的状态流转表

新建计算表工单状态流转表,仅保留有效记录:

工单状态流转表 = FILTER('工单表', '工单表'[是否保留记录] = 1)

二、DAX计算各状态耗时

1. 标记状态结束时间

在工单状态流转表中添加计算列状态结束时间,获取当前状态的下一个状态开始时间:

状态结束时间 = 
CALCULATE(
  MIN('工单状态流转表'[创建时间]),
  FILTER(
    '工单状态流转表',
    '工单状态流转表'[工单编号] = EARLIER('工单状态流转表'[工单编号]) &&
    '工单状态流转表'[创建时间] > EARLIER('工单状态流转表'[创建时间])
  )
)

2. 计算耗时(小时/秒)

耗时(小时,含小数)

状态耗时(小时) = 
VAR 结束时间 = '工单状态流转表'[状态结束时间]
VAR 开始时间 = '工单状态流转表'[创建时间]
RETURN IF(NOT ISBLANK(结束时间), DATEDIFF(开始时间, 结束时间, HOUR) + DATEDIFF(开始时间, 结束时间, MINUTE)/60 + DATEDIFF(开始时间, 结束时间, SECOND)/3600, BLANK())

耗时(秒)

状态耗时(秒) = 
VAR 结束时间 = '工单状态流转表'[状态结束时间]
VAR 开始时间 = '工单状态流转表'[创建时间]
RETURN IF(NOT ISBLANK(结束时间), DATEDIFF(开始时间, 结束时间, SECOND), BLANK())

三、100%堆叠条形图配置

1. 图表字段设置

  • 轴:选择工单编号
  • 图例:选择状态
  • 值:选择状态耗时(小时)或状态耗时(秒),将值的聚合方式设置为求和

2. 图表类型切换

将图表类型改为100%堆叠条形图,即可查看每个工单各状态耗时的占比分布。

3. 查看Ticket_1的状态流转

通过以下方式筛选查看:

  • 添加工单编号切片器,选择Ticket_1
  • 直接在图表上右键筛选Ticket_1
    此时图表将展示Ticket_1的完整状态流转路径(P4→P3→P2→P1)及各阶段耗时占比。

四、注意事项

  • 确保创建时间字段已设置为日期/时间数据类型,否则DATEDIFF函数无法正常计算
  • 工单的最后一条状态记录因无后续状态,耗时会显示为空,可根据业务需求决定是否排除或补充处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:49:53