Power BI:按ID_OBJECT计算任务平均时长问题求助
Power BI:计算每个ID_OBJECT对应的平均Duration
正确实现方法
1. 计算列(每行显示对应ID_OBJECT的平均时长)
如果需要在表的每行直接显示当前ID_OBJECT对应的平均Duration,可以用以下两种写法:
写法一(推荐,更高效简洁)
AverageDuration_Column = VAR CurrentIDObj = 'EXECUTIONS'[ID_OBJECT] RETURN CALCULATE( AVERAGE('EXECUTIONS'[Duration]), ALLEXCEPT('EXECUTIONS', 'EXECUTIONS'[ID_OBJECT]) )
ALLEXCEPT会保留当前行ID_OBJECT的筛选上下文,移除其他所有筛选,从而计算该ID_OBJECT下所有记录的平均时长。
写法二(修正你原公式的拼写错误)
你的公式2仅存在函数名拼写错误(AVERGEX→AVERAGEX),修正后即可正常使用:
AverageDuration_Column = VAR id_obj = 'EXECUTIONS'[ID_OBJECT] RETURN AVERAGEX( FILTER(ALL('EXECUTIONS'), 'EXECUTIONS'[ID_OBJECT] = id_obj), 'EXECUTIONS'[Duration] )
2. 度量值(用于可视化展示,更灵活)
如果是在报表可视化(如卡片图、表格)中展示每个ID_OBJECT的平均时长,推荐使用度量值,它会根据当前筛选上下文自动计算:
AverageDuration_Measure = CALCULATE( AVERAGE('EXECUTIONS'[Duration]), ALLEXCEPT('EXECUTIONS', 'EXECUTIONS'[ID_OBJECT]) )
将该度量值拖入表格,搭配ID_OBJECT字段,即可得到每个任务/计划对应的平均执行时长。
原公式错误原因分析
- 公式1:
AVERAGEX的第一个参数是提取所有唯一的ID_OBJECT,但第二个参数[Duration]引用的是当前行的时长值,相当于把每个ID_OBJECT的某一行时长取平均,而非该ID_OBJECT下所有记录的时长平均,逻辑完全错误。 - 公式2:仅存在函数名拼写错误(
AVERGEX应为AVERAGEX),修正拼写后即可得到正确结果,但ALLEXCEPT写法比FILTER(ALL(...))性能更优。
内容的提问来源于stack exchange,提问作者Emile Dadou
相关产品推荐
相关产品推荐

