如何在数据透视表(Pivot Table)/Power Pivot中仅对唯一行的值计算平均值
如何在数据透视表(Pivot Table)/Power Pivot中仅对唯一行的值计算平均值
我来帮你搞定这个需求!你的核心诉求是:同一个序列号不管对应多少个类别,计算平均价格时只算一次;而且筛选特定类别时,只要该序列号在这个类别里出现过,就把它的价格纳入计算对吧?下面给你两种实用的解法:
方法一:普通透视表+辅助列(不用Power Pivot)
这个方法适合不想用Power Pivot的场景,只需要给原始数据加个辅助列就行:
- 在原始数据右侧新增一列,比如命名为
唯一价格计入,输入公式:=IF(COUNTIF($A$2:A2,A2)=1,C2,0)
(这里假设Serial Num在A列,Price在C列,公式下拉填充后,每个序列号的第一行会显示它的价格,后续重复行显示0) - 插入透视表:
- 把
Category拖到「筛选器」区域 - 把
Serial Num拖到「值」区域,然后右键设置值字段为「非重复计数」(用来统计当前筛选下的唯一序列号数量) - 把刚才的
唯一价格计入列拖到「值」区域,设置为「求和」(用来统计当前筛选下所有唯一序列号的价格总和)
- 把
- 添加计算字段:
在透视表的「分析」选项卡(Excel 2016及以后)里点击「字段、项目和集」→「计算字段」,命名为唯一平均价格,输入公式:=唯一价格计入求和 / Serial Num非重复计数
确定后,透视表里就会显示符合要求的平均价格了。
方法二:Power Pivot+DAX度量值(更简洁)
如果你的Excel支持Power Pivot(大部分现代版本都支持),这个方法更高效,不用修改原始数据:
- 加载数据到Power Pivot:选中原始数据区域,点击「数据」选项卡→「添加到数据模型」
- 创建DAX度量值:
在Power Pivot窗口里,点击「主页」选项卡→「新建度量值」,输入:
(记得把唯一平均价格 = AVERAGEX( VALUES('你的表名'[Serial Num]), CALCULATE( MAX('你的表名'[Price]) ) )你的表名换成你实际的表名称) - 插入Power Pivot透视表:
回到Excel,点击「插入」选项卡→「透视表」,选择「使用此工作簿的数据模型」,然后把Category拖到「筛选器」,把刚创建的唯一平均价格拖到「值」区域就可以了。
效果验证(用你的示例数据)
- 不筛选任何类别时:唯一序列号是12345、45678、23456、98765,平均价格为
(100+50+75+80)/4=76.25,正确 - 筛选Category1时:唯一序列号是12345、45678、98765,平均价格为
(100+50+80)/3≈76.67,正确 - 筛选Category2时:唯一序列号是12345、23456、98765,平均价格为
(100+75+80)/3=85,完全符合你的要求!
备注:内容来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

