Power BI中计算ETL流程StartTime与EndTime的运行时长
问题原因
你之前的写法不生效的核心原因有两点:
- 你定义的是度量值,DAX的度量值默认只有筛选上下文,直接引用列名不会自动生成逐行计算的行上下文,无法逐行匹配
StartTime和EndTime做运算 - 没有处理
EndTime为空的边界场景,空值参与日期运算会返回错误结果
正确DAX度量值实现
ETL运行时长(秒) = SUMX ( 'Logging view', VAR 结束时间 = IF( ISBLANK('Logging view'[EndTime]), UTCNOW(), 'Logging view'[EndTime] ) RETURN DATEDIFF( 'Logging view'[StartTime], 结束时间, SECOND ) )
逻辑说明:
- 用
SUMX迭代当前筛选上下文下的所有行,逐行生成行上下文完成单条日志的时长计算,最后汇总所有结果 - 内置空值处理:如果
EndTime为空(代表ETL运行失败/仍在执行),默认用当前UTC时间计算时长,你也可以根据业务需要调整:如果不需要统计失败/运行中的任务时长,直接把UTCNOW()替换为BLANK()即可,对应行的时长会返回空不参与汇总 - 如果你要查看单条ETL运行记录的时长,只需要把日志ID、流程名称、运行时间等维度字段放到可视化组件的行维度,筛选上下文会自动限定
SUMX的迭代范围,返回对应单条记录的时长
可选方案:计算列实现
如果你不需要动态聚合,只需要逐行固定展示每条日志的运行时长,也可以直接在表中新建计算列,写法更简单:
运行时长(秒) = IF( ISBLANK('Logging view'[EndTime]), BLANK(), DATEDIFF('Logging view'[StartTime], 'Logging view'[EndTime], SECOND) )
内容的提问来源于stack exchange,提问作者B.T.
相关产品推荐
相关产品推荐

