如何在 Excel 数据透视表中计算未加权平均值?

如何在 Excel 数据透视表中计算未加权平均值?

我经常制作数据透视表,其中每行包含若干个人平均指标。然后我想查看每个指标的未加权列平均值,并通常根据这些数据制作某种图表。

因为我的各个单元格通常是从不同数量的数据点中取平均值的,所以总计行最终会成为加权平均值,而我对此并不感兴趣。因此,我通常会在表格上方几行制作自己的平均行,以用于我的图表。

这不是太多的工作,但还有另一个问题。我经常将更多人的资料添加到数据透视表的源中,然后刷新表格。这意味着我的平均行需要更新以包含来自数据透视表的更多行。对于一张表来说这不是什么大问题,但是当我在很多工作表中有很多行时,我必须对一大堆公式进行查找/替换。

那么:有没有办法自动获取数据透视表中未加权的列平均值,这样当刷新表时,平均值

  1. 不要改变位置,
  2. 包含新添加(或删除)的数据

谢谢

答案1

这有点笨拙,但确实有效。如果您只有一个“类别”(例如人),您可以在以下示例中使用 AverageIf。如果您有多个条件(例如人、产品或性别或家乡),则需要 AverageifS(复数 - 仅适用于 Excel 2007)。

您需要在数据旁边添加一个辅助列。在这里我们将找到:

  • 这是这个人的第一次出现吗(加上第二、第三个标准)?
  • 如果是,那么该人的平均水平是多少?
  • 如果不是,则为空白(非零)。

因此,如果您的姓名在 A 列,要衡量的值在 B 列,第 1 行是标题,第 2 行到第 1000 行是数据,则在单元格 C2 中您需要如下公式:

=IF(COUNTIF($A$2:A2,A2)=1,AVERAGEIF($A$2:$A$1000,A2,$B$2:$B$1000),"")

如果您有两个标准(例如人和产品、地区或其他),请使用 COUNTIFS 和 AVERAGEIFS 来扩展它(您的测量值现在在 C 列,请注意,这成为 averageifS 的第一个参数,而不是最后一个):

=IF(COUNTIFS($A$2:A2,A2,$B$2:B2,B2)=1,AVERAGEIF($C$1:$C$1000,$A$2:$A$1000,A2,$B$2:$B$1000,B2),"")

现在您有一列,其中每个人的平均值只显示一次。

为这个额外的辅助列添加一个标题(“个人平均值”)。更改数据透视表的来源以包含这些额外的数据并刷新。添加额外的列并确保按平均值而不是总和进行汇总。现在,每个类别的小计或总计(如果您没有更高级别的类别)将是准确的,因为在每种情况下,每个人的平均值都只是已经计算出的单个数字的平均值,因此权重已被抑制。

我知道这有点笨拙,但完成后,完成的公式总是可以在您添加数据时复制下来(或使用表格,以便 Excel 为您完成此操作),并且结果是数据透视表的一部分,因此您可以轻松生成单个报告。

相关内容