假设我要在以下SQL Server DB中使用下表:Excel PowerPivot(Excel 2010版本):
Date: Grp: Value:
1-Jan a 1
1-Jan a 2
1-Jan b 3
1-Jan c 4
2-Jan a 5
2-Jan b 6
2-Jan a 7
2-Jan b 8
2-Jan c 9
而且它的工作方式是,由于缺乏更好的措词,我需要对其进行两次透视。
我需要做的是:
通过
Sum(Value)
和Date
返回Grp
输出:
Date: Grp: Value:
1-Jan a 3
1-Jan b 3
1-Jan c 4
2-Jan a 12
2-Jan b 14
2-Jan c 9
然后,我需要对数据进行另一次计算(
sum()
除外)-要获得每天的值乘积:输出2:
Grp: Value:
a 36
b 42
c 36
因此,我知道如何使用PowerPivot来获取第一组结果,并且我想我可以为每个组值创建一个包含许多重复值的计算字段,以立即计算
Output2
,但是我想知道是否存在一种方法,可能输出第一个输出,然后将所得的数据透视表用作PowerPivot的输入。总的来说,我是PowerPivot的新手,因此,有关如何执行此操作的任何建议将不胜感激!
谢谢!!
最佳答案
约翰,
有一个名为Summarize的简洁函数,它允许您“动态”创建表,该表可以传入FILTER或需要TABLE的任何其他DAX函数的参数中。
我已经复制了示例数据(表名是基本表),并且如果运行下面的代码,则应获得与Output1相同的结果(建议您使用Dax Studio for this)。
SUMMARIZE (
basetable,
'basetable'[Date],
'basetable'[Grp],
"Value", SUM('basetable'[Value])
)
现在,对于Output2-由于没有PRODUCTX函数,因此计算Grp值的乘积非常棘手。但是要获得每日平均值,您可以使用以下方法:
AVERAGEX
(
SUMMARIZE (
basetable,
'basetable'[Date],
basetable[Grp]
)
, CALCULATE(AVERAGE(basetable[Value]))
)
然后,结果可能看起来像这样(与Output1保持相同的结构,但是使用Output1进行平均计算)。
不确定我是否完全回答了您的问题,但是当您谈到“一种输出第一个输出,然后将所得的数据透视表用作PowerPivot的输入的方法时,我确信要考虑SUMMARIZE。 ”
但是,请注意performace-related issues。 SUMMARIZE可能相当“苛刻” :)
希望这可以帮助!