Как добавить итоговую строку в силовой запрос Excel? - PullRequest
0 голосов
/ 26 апреля 2019

Я создал таблицу, подобную приведенной ниже, используя функцию 'group' в запросе Excel Power

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

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Другой способ:

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
0 голосов
/ 26 апреля 2019

Я не знаю, почему вы бы делали это в PowerQuery, а не в сводной таблице, но единственный способ, о котором я могу подумать, - это дублировать таблицу, отключить столбцы и затем снова включить ее, используя сумму в качестве агрегации. Затем вы можете добавить таблицу к вашему первоначальному запросу.

Ваш код будет выглядеть примерно как для таблицы, в которой вы хотите создать итоги.

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 - вы можете заменить ее на Total, если хотите, используя функцию Replace Errors.

...