我正在尝试在这里找出一些数据透视表魔法,我可以让顶级行字段成为每个类别的自定义公式。例如,对于这样的数据:
编辑:以 CSV 格式提供:
Period,Geo,Data Item,Value
Jan-21,Total,Cat 1,1.12
Jan-21,Total,Cat 2,1.62
Jan-21,DE,Cat 1,1.26
Jan-21,FR,Cat 1,1.45
Jan-21,CZ,Cat 1,1.4
Feb-21,Total,Cat 1,1.14
Feb-21,Total,Cat 2,1.7
Feb-21,DE,Cat 1,1.43
Feb-21,FR,Cat 1,1.47
Feb-21,CZ,Cat 1,1.5
Feb-21,CZ,Cat 3,1.2
~
我设置了一个像这样的数据透视表:
我实际上并不关心每个地理点是否包含一行,我想要的是对于每个月的每个类别,计算该月/类别的地理值的平均值,然后在该值第一次出现时根据 100 的指数对它们进行标准化。
因此,准确地说,当数据透视表当前显示 Cat1/Jan-21 为 5.23 时,我希望它从 AVERAGE(1.4, 1.26, 1.45, 1.12) = 1.3075 的起点开始计算,然后将其变为 100 (1.3075/1.3075*100),这样 Cat1/Feb-21 就是 AVERAGE(1.5, 1.43, 1.47, 1.14)/1.3075*100 = 105.92。
然后,类似地,对于 Cat 2,它应该基于 1.7 而不是 1.3075 的值;而对于 Cat 3,它应该从 2 月 21 日的 100 开始(因为这是数据出现的第一个时期)。
我可以通过转到“数据透视表分析”->“字段设置”,并将其更改为“平均值”来获得基线数字。但是,然后我需要对数据进行规范化。我尝试添加一个计算字段,方法是转到“数据透视表分析”->“字段、项目和集”,然后创建一个名为“Cat1Norm”的新字段,并为其指定公式“=Value/1.3075*100”。
我遇到了两个问题:
首先,虽然计算对每个地理行都正确,但它不再在月份摘要行中将它们报告为平均值,我不知道如何将其从“总和”更改为“平均值”。其次,它为每列添加了一个新的“Cat1Norm”子列 — 但实际上我需要它对每列都不同(事实上,我实际上不需要它是一个子列,因为我根本不需要显示原始的平均数据)。
有什么合理的方法可以做到这一点吗?除非这里有答案,否则我的下一步可能是手动创建另一个汇总数据透视表数据的表,但是...感觉应该有办法做到这一点。
最后要说的是,如果上面的文字描述不太清楚,我希望的最终输出是这样的
答案1
按平均值汇总值:
将值显示为“1 月 21 日”期间的百分比:
我想这会让你接近,但如果类别的第一个时期不是今年 1 月,那么可能就行不通了。另一个选项是使用期间百分比(上一个),但这不会在起点处保留索引。
另一个选择是使用 PowerPivot 并使用 DAX 创建度量。
最简单的方法可能是按如下方式更改数据。向表中添加三列:
=AVERAGEIFS([Value],[Period],[@Period],[Data Item],[@[Data Item]])
=XLOOKUP(MINIFS([Period],[Data Item],[@[Data Item]])&[@[Data Item]],[Period]&[Data Item],[PeriodAvg])
=[@PeriodAvg]*100/[@Baseline]
然后创建数据透视表: