使用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..
相关产品推荐
相关产品推荐

