假设我要在以下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可能相当“苛刻” :)

希望这可以帮助!

09-25 15:14