Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

v-rzhou-msft

如何在 Power Query 中计算行总计和列总计

背景介绍:  

在 Power BI 中,我们可以简单地将每一列相加得到列总计,但通常无法直接将行总计添加到表中。本博客将介绍如何在 Power Query 中为表格添加列总计和行总计。 

 

示例数据:  

让我们以下面的简单表格为例: 

列 1 

列 2 

列 3 

 

期望结果:  

列 1 

列 2 

列 3 

总计 

12 

15 

18 

15 

24 

45 

 

解决方案: 

方法一:使用List.Zip()函数 

  1. 使用 Table.ToRows() 函数将表中每行记录放入列表中 
    vrzhoumsft_0-1730167634162.png
  2. 使用 List.Transform() 和 List.Sum() 进行行汇总。这些新列表将通过 List.Zip() 进行转换,然后再次使用 List.Transform() 和 List.Sum() 进行列汇总。 
    行汇总:
    vrzhoumsft_1-1730167634166.png
    压缩:
    vrzhoumsft_0-1730168219428.png

    列汇总:

    vrzhoumsft_1-1730168228826.png
  3. 使用 Table.FromColumns() 将列列表转换为表。 
    应用的代码如下: 

    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 

        新表 

最终得到的结果截图如下: 

vrzhoumsft_2-1730168389527.png

 

方法二:使用Table.Transpose()函数 

首先创建如下自定义列,通过使用 List.Sum() 函数获取列总计: 

vrzhoumsft_1-1730167750956.png

 

但对于行总计,我们无法直接获取。我们需要做的先是使用 Table.Transpose() 将上表转置为下表: 

vrzhoumsft_2-1730167750963.png

 

然后,我们再计算行总数。 

vrzhoumsft_0-1730168480295.png

 

最后,使用 Table.Transpose() 函数将表格转换回来 

vrzhoumsft_1-1730168487879.png

 

应用的代码如下: 

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

翻译:阮盈盈