Excel将每个组的总和计算为平均值

时间:2014-02-17 03:20:30

标签: excel pivot-table powerpivot

在Excel中,我有一个Web请求日志,我需要分析其带宽使用情况。我已经将日志解析为许多字段,我将以不同的方式将其分组以用于不同的报告。每个网站页面加载都有多个资源 - 每个资源都是一个单独的行。数据结构:

 RequestID | SIZE | IsImage | IsStatic | Language
 A         | 100  | TRUE    | TRUE     | EN
 A         | 110  | TRUE    | FALSE    | EN
 A         | 90   | FALSE   | FALSE    | EN
 ...

报告1:我需要AVERAGE请求大小:AVERAGE(SELECT SUM(SIZE)GROUPBY RequestID)。我不需要查看每个请求的大小。

报告2:更详细的数据透视表报告显示了由isStatic / isImage / language /等打破的平均请求请求大小。这样我可以检查“每种语言的每个请求的平均总图像数”

有没有办法定义字段/项目“SUM(SIZE)GROUPBY RequestID”?

2 个答案:

答案 0 :(得分:2)

据我所知,这不可能在单个数据透视表中实现。这是因为您需要根据条件(RequestId)将两个单独的聚合应用于同一组数字 使用两个数据透视表可以获得您正在寻找的内容,但是我不建议这样做,但这就是您要做的。

在基表上创建第一个数据透视表,将requestId添加到行并将值添加到value,这将为您提供一个中间表,其中包含每个requestId的大小总和,然后构建第二个数据透视表,这次使用first作为源数据透视表作为源,在这种情况下,您只需添加'size of size'值并取平均值。见下面的例子

enter image description here

除了最简单的分析之外,我不会再推荐这种方法

更好的方法是使用powerpivot,这是一种与您使用的数据透视表相关的独立技术。您需要导入表格,我假设名称为[Logs],列为[RequestId]和[Size],然后您需要添加计算

<强> AvarageSizeOfRequests:= AVERAGEX(SUMMARIZE(日志;日志[的requestId]; “sumOfSize”; CALCULATE(总和(日志[大小]))); [SumOfSize])

这将为您提供以下结果

enter image description here

第一个是你已经拥有的海峡总和,第二个是平均值,它对于每个requestID都是相同的,但会以不同的方式聚合。

答案 1 :(得分:0)

我想我不理解您的Q因为我希望请求ID的组是自动的(在PT中不可避免地将其作为Row标签)。也许在下面选择漏洞,我可能会理解我误解的内容:

SO21820137 example

我已将is添加到您的数据中,以便更明确哪个列。最好将TRUEFALSE转换为10,以便PT可以对这些进行计数或平均。

这似乎含糊不清,所以让我们尝试不同的PT布局。 RequestID对于所需的分析很少或没有相关性,不在PT中包含它,或者在此处将其作为报告过滤器:

SO21820137 example

在这种情况下,OP中存在数百万行这类数据,PT实际上总是最多为2x2矩阵(假设语言也适用于报告过滤器)。每条记录只有一个值(SIZE),只有两个布尔变量。 Language可以有所作为,但最差案例是每Language一个这样的PT(并且考虑到示例中只显示了一个这样的人!...)