Excel 枢轴 Table 中的平均值之和
Sum of Averages in Excel Pivot Table
我正在从数据转储中测量房间利用率(可用时间 used/time)。每行包含当天的可用时间和用于特定案例的时间。
图片是数据的简化版。
如果你阅读了黄色和绿色的亮点(房间 1):
- 2016 年 1 月 1 日,房间 1 有 200 分钟可用。
- 案例 1 耗时 60 分钟,案例 2 耗时 50 分钟。
- 2016年1月2日有500分钟可用,当天只发生一个案例,用了350分钟。
Room 1 utilization = (60 + 50 + 350)/(200 + 500)
对可用时间求和的问题是它重复计算了 2016 年 1 月 1 日的 200 分钟,给出:Utilization = (60+50+350)/(200+200+500)
此数据中有数百行(并且会有多个不同行数的数据转储)每天都会发生多个案例。
我正在尝试使用枢轴 table,但我无法获得特定房间的 'sum of averages'(见图)。我正在使用宏从总计列中提取数字。
这可能吗?您是否看到另一种获得利用率的方法?
(注意:数据中还有许多其他列,如案例开始、案例结束、星期几等,这些列未用于此计算但可用)
两个平均可用时间列都为 300 的原因是总计是基于总体平均值而不是平均值总和的总计。
- 房间1:200 + 200 + 500 / 3 = 300
- 房间2:300 + 300 + 300 / 3 = 300
我无法对原始问题发表评论,因此我的解决方案基于一些假设。
假设 #1:数据将始终分组。例如。给定日期 1 号房间中的所有案例将按顺序分组。
假设 #2:可用时间列是一整天的单个值,同一天永远不会有不同的可用时间。
解决方案:使用E列作为实际可用时间。此列将使用公式来确定当前行是否与前一行具有唯一组合(日期 + 房间 + 可用时间),如果是,单元格将包含该行的可用时间。
E2 中使用的公式:
=IF(AND($A1 = $A2, $B1 = $B2, $C1 = $C2), 0, $C2)
尽可能向下扩展公式,然后将新列包含在您的数据透视表数据范围内。
我通过组合列创建了一个唯一引用,然后使用 sumif/countif/countif。
因此 E 列中的公式为:
=sumif(colB,cellB,ColC)/Countif(colB,cellE)/Countif(colB,cellE)
数据是否有序并不重要
尽可能向下扩展公式,然后将新列包含在您的数据透视表数据范围内。
我推荐的最简单的方法是这个。
=SUM(H:H)-GETPIVOTDATA("Average of Available Time",$G)
第一项对 H 列求和,第二项减去总计值。它是一个动态解决方案,并且会更改以适应枢轴的大小 table。
我的假设是 Pivot Table 最初放在单元格 G3 中。
我正在从数据转储中测量房间利用率(可用时间 used/time)。每行包含当天的可用时间和用于特定案例的时间。 图片是数据的简化版。
如果你阅读了黄色和绿色的亮点(房间 1):
- 2016 年 1 月 1 日,房间 1 有 200 分钟可用。
- 案例 1 耗时 60 分钟,案例 2 耗时 50 分钟。
- 2016年1月2日有500分钟可用,当天只发生一个案例,用了350分钟。
Room 1 utilization = (60 + 50 + 350)/(200 + 500)
对可用时间求和的问题是它重复计算了 2016 年 1 月 1 日的 200 分钟,给出:Utilization = (60+50+350)/(200+200+500)
此数据中有数百行(并且会有多个不同行数的数据转储)每天都会发生多个案例。 我正在尝试使用枢轴 table,但我无法获得特定房间的 'sum of averages'(见图)。我正在使用宏从总计列中提取数字。
这可能吗?您是否看到另一种获得利用率的方法? (注意:数据中还有许多其他列,如案例开始、案例结束、星期几等,这些列未用于此计算但可用)
两个平均可用时间列都为 300 的原因是总计是基于总体平均值而不是平均值总和的总计。
- 房间1:200 + 200 + 500 / 3 = 300
- 房间2:300 + 300 + 300 / 3 = 300
我无法对原始问题发表评论,因此我的解决方案基于一些假设。
假设 #1:数据将始终分组。例如。给定日期 1 号房间中的所有案例将按顺序分组。
假设 #2:可用时间列是一整天的单个值,同一天永远不会有不同的可用时间。
解决方案:使用E列作为实际可用时间。此列将使用公式来确定当前行是否与前一行具有唯一组合(日期 + 房间 + 可用时间),如果是,单元格将包含该行的可用时间。
E2 中使用的公式:
=IF(AND($A1 = $A2, $B1 = $B2, $C1 = $C2), 0, $C2)
尽可能向下扩展公式,然后将新列包含在您的数据透视表数据范围内。
我通过组合列创建了一个唯一引用,然后使用 sumif/countif/countif。
因此 E 列中的公式为: =sumif(colB,cellB,ColC)/Countif(colB,cellE)/Countif(colB,cellE)
数据是否有序并不重要
尽可能向下扩展公式,然后将新列包含在您的数据透视表数据范围内。
我推荐的最简单的方法是这个。
=SUM(H:H)-GETPIVOTDATA("Average of Available Time",$G)
第一项对 H 列求和,第二项减去总计值。它是一个动态解决方案,并且会更改以适应枢轴的大小 table。
我的假设是 Pivot Table 最初放在单元格 G3 中。