Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more
背景介绍:
在 Power BI 中,我们可以简单地将每一列相加得到列总计,但通常无法直接将行总计添加到表中。本博客将介绍如何在 Power Query 中为表格添加列总计和行总计。
示例数据:
让我们以下面的简单表格为例:
列 1 |
列 2 |
列 3 |
1 |
4 |
7 |
2 |
5 |
8 |
3 |
6 |
9 |
期望结果:
列 1 |
列 2 |
列 3 |
总计 |
1 |
4 |
7 |
12 |
2 |
5 |
8 |
15 |
3 |
6 |
9 |
18 |
6 |
15 |
24 |
45 |
解决方案:
方法一:使用List.Zip()函数
列汇总:
let
源 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTIBYnOlWJ1oJSMgyxSILcA8YyDLDIgtlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"列 1" = _t, #"列 2" = _t, #"列 3" = _t]),
更改的类型 = Table.TransformColumnTypes(源,{{"列 1", Int64.Type}, {"列 2", Int64.Type}, {"列 3", Int64.Type}}),
转换行 = Table.ToRows(更改的类型),
行汇总 = List.Transform( 转换行, each _ & { List.Sum(_) } ),
压缩 = List.Zip(行汇总),
列汇总 = List.Transform( 压缩, each _ & { List.Sum(_) } ),
新表 = Table.FromColumns(列汇总 , {"列 1", "列 2", "列 3", "总计"})
in
新表最终得到的结果截图如下:
方法二:使用Table.Transpose()函数
首先创建如下自定义列,通过使用 List.Sum() 函数获取列总计:
但对于行总计,我们无法直接获取。我们需要做的先是使用 Table.Transpose() 将上表转置为下表:
然后,我们再计算行总数。
最后,使用 Table.Transpose() 函数将表格转换回来
应用的代码如下:
let
源 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTIBYnOlWJ1oJSMgyxSILcA8YyDLDIgtlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"列 1" = _t, #"列 2" = _t, #"列 3" = _t]),
更改的类型 = Table.TransformColumnTypes(源,{{"列 1", Int64.Type}, {"列 2", Int64.Type}, {"列 3", Int64.Type}}),
列总计 = Table.AddColumn(更改的类型, "列总计", each List.Sum(Record.FieldValues(_))),
转置表 = Table.Transpose(列总计,{"列 1","列 2","列 3"}),
行总计 = Table.AddColumn(转置表, "行总计", each List.Sum( Record.FieldValues(_) )),
转置表1 = Table.Transpose(行总计, {"列 1", "列 2", "列 3", "总计"})
in
转置表1
总结
这是两种在 Power Query 中获取列合计和行合计的方法。其原理是对表格的行和列进行转置,然后计算总和。除了这两种方法外,还有其他函数可以得到相同的结果(如 List.TransformMany() 函数),这就是 Power Query 的魅力所在。感谢您的阅读。
原作者:王杰
审核:Kerry Wang & Ula Huang
翻译:阮盈盈
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.