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
- 要求按学科算平均成绩。
- 要求按不同学校的学科平均成绩。 按学科算平均成绩,我们需要汇总学科,并计算平均成绩即可。
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中")
)
代码语言:javascript复制解释: 先筛选出学校为1中的数据,然后再同归汇总来得到不重复的姓名。
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类似,在汇总时如果值为空的话,也会忽略汇总,所以姓名为无值的这里也依旧不显示。