Power Pivot中3大汇总函数对比解释及使用介绍

2020-03-20 17:15:55 浏览数 (1)

1. Summarize

A. 语法
代码语言:javascript复制
SUMMARIZE ( <Table>, <GroupBy_ColumnName> [, [<Name>] [, [<Expression>] [, <GroupBy_ColumnName> [, [<Name>] [, [<Expression>] [, … ] ] ] ] ] ]  )

位置

参数

描述

第1参数

Table

需要操作的表

第2参数

GroupBy_ColumnName

分组的依据(可以有多个)

可选第3参数

Name

分组后的新列名,可以有多个汇总(文本格式)

可选第4参数

Expression

新增列的表达式,可以有多个

B. 返回

表——包含汇总依据及新列名的表

C. 注意事项
  • 汇总的依据必须是表或者相关表的列。
  • 不能用于虚拟添加列这种。
  • 尽量用其他方式来替换第3和第4参数。(可以用SummarizeColumns或者AddColumns方式来得到同样结果)
D. 作用

创建按指定列分组后的计算表达式汇总

E. 案例

表3

  • 要求按学科算平均成绩。
  • 要求按不同学校的学科平均成绩。 按学科算平均成绩,我们需要汇总学科,并计算平均成绩即可。
代码语言:javascript复制
Summarize('表3',
        '表3'[学科],
        "平均成绩",Average('表3'[成绩])
          )

返回结果:

按不同学校学科的学科平均成绩,则需要添加2个汇总依据,一个是学校,一个是学科。

代码语言:javascript复制
Summarize('表3',
               '表3'[学校],'表3'[学科],
               "平均成绩",Average('表3'[成绩])
          )

返回结果:

如果是使用AddColumns方式来进行的话

代码语言:javascript复制
var 
a=Summarize('表3','表3'[学科])
return
AddColumns(a ,
           "平均成绩",
           Calculate(Average('表3'[成绩]))
           )

解释:因为涉及到上下文的原因,所以在Average求平均的时候嵌套了Calculate进行上下文转换。

2. SummarizeColumns

A. 语法
代码语言:javascript复制
SUMMARIZECOLUMNS ( <GroupBy_ColumnName>, [<FilterTable>] , [<Name>] [, [<Expression>] [, <GroupBy_ColumnName> [, [<FilterTable>] [, [<Name>] [, [<Expression>] [, … ] ] ] ] ] ] ] ] ] )

位置

参数

描述

可重复第1参数

GroupBy_ColumnName

分组依据,可重复。可用于小计和总计函数

可选重复第2参数

FilterTable

可对原表进行筛选

可选第重复3参数

Name

新增加的列名

可选重复第4参数

Expression

新增加的列的内容表达式

B. 返回

表——基于指定分组列计算值的表。

C. 注意事项
  • 不支持上下文
  • 不返回无值的汇总
D. 作用

返回的计算值为非空值的分组。

E. 案例

表3

代码语言:javascript复制
SummarizeColumns('表3'[姓名])

解释: 相当于分类汇总标题,也就是姓名去重。

代码语言:javascript复制
SummarizeColumns('表3'[姓名],
                 Filter('表3','表3'[学校]="1中")
                )

解释: 先筛选出学校为1中的数据,然后再同归汇总来得到不重复的姓名。

代码语言:javascript复制
SummarizeColumns('表3'[姓名],
                 Filter('表3','表3'[学校]="1中"),
                 "成绩",Sum('表3'[成绩])
                )

解释: 在得到汇总姓名后再去求成绩。但是因为无值这个成绩为空,所以在汇总的时候就不显示,直接去除。

代码语言:javascript复制
SummarizeColumns('表3'[姓名], '表3'[学校], 
                 Filter('表3','表3'[学校]="1中"),
                 "成绩",Sum('表3'[成绩])
                 )

解释:增加学校作为筛选汇总的依据。

代码语言:javascript复制
SummarizeColumns('表3'[姓名], '表3'[学校], 
                   Filter('表3','表3'[学校]="2中"),
                      "总成绩",Sum('表3'[成绩]),
                      "平均成绩", Average('表3'[成绩])
                 )

解释: 先根据筛选学校是2中的,然后根据姓名和学校来进行分组,最后增加2个字段,一个是总成绩,一个是平均成绩。

3. GroupBy

A. 语法
代码语言:javascript复制
GROUPBY ( <Table> , <GroupBy_ColumnName> [, [<Name>] [, [<Expression>] [, <GroupBy_ColumnName> [, [<Name>] [, [<Expression>] [, … ] ] ] ] ] ] ] )

位置

参数

描述

第1参数

Table

分组的表

第2可选重复参数

GroupBy_ColumnName

分组依据的列

第3可选重复参数

Name

增加列的名称,文本格式

第4可选重复参数

Expression

增加列的计算表达式

B. 返回

表——由分组列及添加表达式的列组成。

C. 注意事项
  • 参数2不能为表达式,只能是现有的列名。
  • 参数4的表达式必须返回标量值。
  • 表达式中不能使用Calculate涉及上下文计算。
  • 通常表达式中用CurrentGroup函数作为表参数,但不能用于多层嵌套。
  • CurrentGroup函数不带参数,通常和带X结尾的聚合函数一起使用。
D. 作用

返回按指定列分组后计算的表达式结果

E. 案例
代码语言:javascript复制
GroupBy ( '表3', 
          '表3'[姓名], 
          "总成绩", SumX ( CurrentGroup(), '表3'[成绩] )
         )

解释:通过姓名进行分组汇总,并计算当前汇总数据表的成绩合计。功能在某些地方和SummarizeColumns以及Summarize类似,在汇总时如果值为空的话,也会忽略汇总,所以姓名为无值的这里也依旧不显示。

0 人点赞