Запрос мощности — группа таблиц с переменным количеством столбцов

#group-by #powerbi #parameter-passing #powerquery #m

#группировка по #powerbi #передача параметров #powerquery #m

Вопрос:

Мне нужно использовать параметризованный ключ в таблице. Группируйте функцию в power query по мере того, как количество столбцов, по которым мне нужно сгруппировать, варьируется в каждом конкретном случае. Пример: у меня есть 5 столбцов, которые можно использовать для группировки по в таблице. Для одного случая мне может понадобиться 1 столбец для группировки, для другого 3. В Excel я настроил для этого таблицу с 5 строками, в которых будут обязательные заголовки столбцов (1 или 2 или 3 или 4 или 5) Мне нужно для рассматриваемого случая. Как я могу параметризовать ссылку на ключ в таблице Excel (с требуемым количеством заголовков столбцов), чтобы ее обновление успешно обновило предложение group by.

Ответ №1:

Эта функция группирует указанную таблицу по указанному количеству столбцов:

 (MyTable as table, MyColumns as number) =>
let
    #"Grouped Rows" = Table.Group(MyTable, List.FirstN(Table.ColumnNames(MyTable),MyColumns), {})
in
    #"Grouped Rows"
 

Ответ №2:

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

 let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    ChType = Table.TransformColumnTypes(Source,{{"GrpBy", type text}}),
    CreateGroupBy = Table.AddColumn(ChType, "RecordCol", (row) => Record.SelectFields(row, Text.Split(row[GrpBy], ",")) ),
    Grouped = Table.Group(CreateGroupBy, {"RecordCol"}, {{"Summed", each List.Sum([Value]), type number}, {"Data", each _, type table}}),
    Expand = Table.ExpandRecordColumn(Grouped, "RecordCol", {"Col2", "Col3", "Col4"}, {"Col2", "Col3", "Col4"})
in
    Expand
 

Вам нужно будет заменить часть построения записей вашими условными обозначениями и, возможно, явным построением записи, например if [Col1] = "1" then [f1 = [Col1], f2 = ""] else [f1 = "", f2 = [Col1]amp;[Col2]]

Имея этот источник

 GrpBy          | Col2 | Col3 | Col4 | Value
--------------- ------ ------ ------ ------
Col2           | A    | Q    | 1    | 10
Col2,Col3      | A    | W    | 2    | 20
Col2,Col4      | B    | W    | 4    | 30
Col2,Col3,Col4 | C    | E    | 4    | 40
Col3,Col4      | D    | E    | 4    | 50
Col2,Col3      | E    | R    | 4    | 60
Col2,Col3      | A    | W    | 2    | 70
Col2,Col4      | B    | X    | 4    | 80
 

вы получите этот результат

 Col2 | Col3 | Col4 | Summed
----- ------ ------ --------
A    |      |      | 10
A    | W    |      | 90
B    |      | 4    | 110
C    | E    | 4    | 40
     | E    | 4    | 50
E    | R    |      | 60

 

Вот так