DAX按订单累计工时问题:计算失败至成功执行的耗时
修正后的DAX度量方案
要实现从最后一次失败到对应成功执行的累计耗时总和,原代码未处理失败/成功的状态逻辑,也未计算时间差,以下是修正后的度量:
累计失败到成功耗时 = VAR 所有成功记录 = FILTER('Historico Jobs', 'Historico Jobs'[run_status] = 1) RETURN SUMX( 所有成功记录, VAR 当前成功时间 = 'Historico Jobs'[time] VAR 当前成功ID = 'Historico Jobs'[instance_id] -- 找到当前成功记录之前,最后一次失败的执行时间 VAR 最近失败时间 = MAXX( FILTER( ALL('Historico Jobs'), 'Historico Jobs'[instance_id] < 当前成功ID && 'Historico Jobs'[run_status] = 0 ), 'Historico Jobs'[time] ) -- 计算单次耗时(仅当存在对应失败记录时才计算) VAR 单次耗时 = IF(NOT(ISBLANK(最近失败时间)), 当前成功时间 - 最近失败时间, 0) RETURN 单次耗时 )
关键逻辑说明
- 筛选成功记录:只针对成功执行的记录计算,因为每次成功才对应一段从失败到成功的耗时
- 匹配最近失败记录:通过
MAXX和FILTER找到当前成功记录之前(instance_id更小)的最后一次失败的时间 - 计算并累加耗时:对每个成功记录,计算与对应失败记录的时间差,最后汇总所有有效耗时
补充说明
- 如果需要按日汇总,可配合日期维度表使用,或在度量中加入日期筛选逻辑
- 若存在连续多次失败后才成功的场景,该度量会自动取最后一次失败到成功的时长,符合需求
内容的提问来源于stack exchange,提问作者Luis Orozco
相关产品推荐
相关产品推荐

