#PQ, #pbi
Всем добра! Сегодня покажу как синхронно разворачивать списки из соседних ячеек.
Дано. Получили из API некий JSON который на выходе выдал структуру со вложенными списками как в таблице tbl (см. в коде ниже). Надо развернуть содержимое списков в новые строки, но если мы это сделаем стандартным мышиным способом с разворачиванием списков в строки по очереди то получится декартово произведение, не такое красивое как это но тоже ничего. Что же делать? А на самом деле все довольно просто: надо не разворачивать столбцы, а при помощи функции
Но может еще случиться, что столбцов с простым содержимым (не списки) будет много, и тогда использование
Всем добра! Сегодня покажу как синхронно разворачивать списки из соседних ячеек.
Дано. Получили из API некий JSON который на выходе выдал структуру со вложенными списками как в таблице tbl (см. в коде ниже). Надо развернуть содержимое списков в новые строки, но если мы это сделаем стандартным мышиным способом с разворачиванием списков в строки по очереди то получится декартово произведение, не такое красивое как это но тоже ничего. Что же делать? А на самом деле все довольно просто: надо не разворачивать столбцы, а при помощи функции
Table.FromColumns
собрать из них готовую таблицу в новом столбце:let
tbl = Table.FromRecords (
{
[ Company = 1, Phone = { "1".."9" }, Mail = { "1".."6", "", "8".."9" } ],
[ Company = 2, Phone = { "1".."5" }, Mail = { "2".."6" } ]
}
),
gentabs = Table.AddColumn(
tbl,
"tabs",
each Table.FromColumns(
{List.Repeat({[Company]}, List.Count([Phone])),[Phone],[Mail]},
Table.ColumnNames(tbl)
)
),
tabs = Table.Combine(gentabs[tabs])
in
tabs
Но может еще случиться, что столбцов с простым содержимым (не списки) будет много, и тогда использование
List.Repeat
станет узким местом с точки зрения производительности, да и код сильно потеряет свою наглядность. Но для этого случая можно применить мою любимую функцию Table.FillDown
до объединения таблиц и получим точно такой же результат.let
tbl = Table.FromRecords (
{
[ Company = 1, Phone = { "1".."9" }, Mail = { "1".."6", "", "8".."9" } ],
[ Company = 2, Phone = { "1".."5" }, Mail = { "2".."6" } ]
}
),
gentabs = Table.AddColumn(
tbl,
"tabs",
each Table.FromColumns(
{{[Company]},[Phone],[Mail]},
Table.ColumnNames(tbl)
)
),
filled = Table.AddColumn(gentabs, "tabs_", each Table.FillDown([tabs],{"Company"})),
tabs = Table.Combine(filled[tabs_])
in
tabs
Telegram
Для тех, кто в танке
Decart. Beautiful join.
#ВсякоРазно
Как получить все сочетания элементов из двух столбцов, оно же декартово произведение в pq?
Есть несколько вариантов, но самый красивый на мой взгляд этот:
Table.Join( tab1,{},tab2,{})
Где tab1 и tab2 таблицы, состоящие…
#ВсякоРазно
Как получить все сочетания элементов из двух столбцов, оно же декартово произведение в pq?
Есть несколько вариантов, но самый красивый на мой взгляд этот:
Table.Join( tab1,{},tab2,{})
Где tab1 и tab2 таблицы, состоящие…