【问题标题】:How to add totals row to excel power query?如何将总计行添加到 Excel 电源查询?
【发布时间】:2019-04-26 13:22:11
【问题描述】:

我通过在 excel 电源查询中使用“组”功能生成了如下表

score 1 score 2 score 3
A   6   25  50
B   8   30  20
C   15  15  30
D   20  0   10

我想添加一个总计行(相当于在普通数据透视表中“显示列的总计”),所以结果会是这样的

score 1 score 2 score 3
A   6   25  50
B   8   30  20
C   15  15  30
D   20  0   10
Total 49    70      110

任何人都知道是否有一种简单的方法可以做到这一点?谢谢你,RY

【问题讨论】:

  • 为什么要添加到PQ中?
  • 我正在使用查询输出表作为 MI 幻灯片,并希望显示总计而无需添加另一个步骤/单独的查询
  • 为什么不能在表格中添加总计行?
  • @Rory - 你的意思是在查询的输出中添加总计行,即在查询编辑器之外?每当行数发生变化时,该行不会被查询输出覆盖吗?除非,我在查询输出上方执行此操作 - 嗯.. 这可以工作
  • 如果你输出为表格,它有一个内置的选项来有一个总计行,它会随着表格调整。

标签: excel grouping powerquery subtotal


【解决方案1】:

另一种方式:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    group = Table.Group(Source, {}, {{"letter", each "Total"},
                                     {"score 1", each List.Sum([score 1])},
                                     {"score 2", each List.Sum([score 2])}, 
                                     {"score 3", each List.Sum([score 3])}}),
    append = Table.Combine({Source, group})
in
    append

或者:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    cols = Table.ColumnNames(Source),
    group = Table.Group(Source, {}, List.Zip({cols, {each "Total"}&
                                    List.Transform(List.Skip(cols), 
                                    (x)=>each List.Sum(Table.Column(_,x)))})),
    append = Table.Combine({Source, group})
in
    append

或者:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    group = Table.Group(Source, {}, List.TransformMany(Table.ColumnNames(Source),
                                    (x)=>{each if x = "letter" then "Total" 
                                    else List.Sum(Table.Column(_,x))}, (x,y)=>{x,y})),
    append = Table.Combine({Source, group})
in
    append

【讨论】:

  • 很好 - 我总是忘记您可以进行中间步骤,然后再参考它们。在选择使用哪个方法方面,OP 可以选择是否更重要的是它能够接受添加的新列/更改的名称(在这种情况下,我认为我的灵魂更好)或最小化查询的数量和为您的解决方案提供更优雅的方法(并且可能会获得更好的性能)。
  • 好吧,添加了几个选项。不幸的是,您的代码在我的机器上不起作用。
【解决方案2】:

我不知道您为什么要在 PowerQuery 而不是数据透视表中执行此操作,但我能想到的唯一方法是复制表,取消透视列,然后使用 sum 作为聚合重新透视它。然后您可以将该表附加到您的原始查询中。

您的代码看起来类似于您要在其中创建总计的表格。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(Source, {}, "Attribute", "Value"),
    #"Pivoted Column" = Table.Pivot(#"Unpivoted Columns", List.Distinct(#"Unpivoted Columns"[Attribute]), "Attribute", "Value", List.Sum)
in
    #"Pivoted Column"

请注意,您可能必须选择按计数聚合,但您可以将代码更改为求和(在 #"Pivot Column" 行将 List.Count 更改为 List.Sum

您将收到 A、B、C、D 列的错误 - 如果您愿意,可以使用 Replace Errors 功能将其替换为 Total。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2014-07-13
    • 2022-10-13
    • 2015-03-05
    相关资源
    最近更新 更多