Power BI可视化:先按SESSIONID求和再计算ZVTCODE维度平均值
解决Power BI中分组条形图的“按SESSIONID求和后取平均值”需求
问题原因
你之前的方法错误在于:直接对HOURS求和后计算平均值,本质是所有HOURS行值的平均,而非先按SESSIONID汇总HOURS,再对这些汇总值取平均。要实现需求,需要先按SESSIONID聚合,再计算聚合结果的平均值。
方法一:使用DAX度量值(推荐,保留源数据灵活性)
步骤1:创建SESSION级别的求和度量值
在「数据」面板中,右键点击你的数据表 → 新建度量值,输入以下DAX代码(替换你的表名为实际表名):
SESSION_HOURS_TOTAL = SUM('你的表名'[HOURS])
这个度量值会在当前SESSIONID的上下文下,自动计算该会话的HOURS总和。
步骤2:创建ZVTCODE级别的平均度量值
再新建一个度量值,计算每个ZVTCODE下所有SESSION_HOURS_TOTAL的平均值:
HOURS_AVG = AVERAGEX( VALUES('你的表名'[SESSIONID]), // 获取当前ZVTCODE下的所有唯一SESSIONID [SESSION_HOURS_TOTAL] // 对每个SESSIONID计算HOURS总和 )
也可以合并为一个度量值:
HOURS_AVG = AVERAGEX( GROUPBY('你的表名', '你的表名'[ZVTCODE], '你的表名'[SESSIONID]), SUMX(CURRENTGROUP(), '你的表名'[HOURS]) )
步骤3:创建分组条形图
- 将
ZVTCODE拖到视觉对象的X轴 - 将
HOURS_AVG拖到Y轴 - 选择「分组条形图」类型,即可得到目标结果。
方法二:用Power Query预处理数据(适合固定分析场景)
如果不需要保留源数据的明细,可以先在Power Query中完成两次分组计算:
- 打开Power Query编辑器,加载你的源数据
- 选中
ZVTCODE和SESSIONID列,点击「转换」→「分组依据」:- 分组依据:选择
ZVTCODE和SESSIONID - 新列名:
HOURS_TOTAL - 操作:求和
- 列:
HOURS
- 分组依据:选择
- 得到SESSION级汇总表后,选中
ZVTCODE列,再次点击「分组依据」:- 分组依据:
ZVTCODE - 新列名:
HOURS_AVG - 操作:平均值
- 列:
HOURS_TOTAL
- 分组依据:
- 点击「关闭并应用」,用新生成的表创建分组条形图即可。
结果验证
两种方法都会得到你需要的结果:
| ZVTCODE | HOURS_AVG |
|---|---|
| ZT_01 | 9.67 |
| ZT_02 | 6.25 |
内容的提问来源于stack exchange,提问作者RonaldR
相关产品推荐
相关产品推荐

