Развернуть записи динамически
Я хочу динамически расширять записи, потому что записи, которые я получаю, не являются фиксированными.
Это работает, но это исправлено, и я должен сказать, какие элементы должны быть расширены.
let
Quelle = Sage.Contents(),
records = Quelle{[Name="Kontakte"]}[Data],
#"SelectItems" = Table.SelectColumns(records,{"$items"}),
#"$items1" = #"SelectItems"{0}[#"$items"],
#"ToTable" = Table.FromList(#"$items1", Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"ExpandedColumn" = Table.ExpandRecordColumn(#"ToTable", "Column1", {"id", "displayed_as", "$path"}, {"Column1.id", "Column1.displayed_as", "Column1.$path"})
in
#"ExpandedColumn"
Ответ веб-сервиса:
{
"$total":3,"$page":1,"$next":null,"$back":null,"$itemsPerPage":20,
"$items":[
{"id":"1","displayed_as":"Test","$path":"/contacts/Test"},
{"id":"2","displayed_as":"Test2","$path":"/contacts/Test2"},
{"id":"3","displayed_as":"Test3","$path":"/contacts/Test3"}
]}
"$ items" динамически. Это зависит от того, сколько информации находится за контактами.
"id", "displayed_as", "$path"
также может быть
"id", "displayed_as", "$path", "city", "zip", "street", "number"
или же
"id", "displayed_as", "$path", "city", "zip", "street", "number", "phone", "mobile"
2 ответа
Предполагая, что предыдущий шаг в M был назван Removed Other Columns
и что столбец для расширения называется Data
затем я заменяю статическую линию #"Expanded Data"
со следующим кодом:
#"Expanded Data" =Table.ExpandTableColumn(#"Removed Other Columns", "Data", List.Union(List.Transform(#"Removed Other Columns"[Data], each Table.ColumnNames(_))))
Он динамически адаптируется к любым именам столбцов.
Вам просто нужно добавить две переменные и отредактировать строку расширения:
SelectAllColumns = Table.ColumnNames(#"$items1"), //Create a list with the columns names
SelectAllColumns2 = List.Transform(SelectAllColumns, each "a."&_), //Create a second list with columns names changed like a.columnname
#"ExpandedColumn" = Table.ExpandRecordColumn(#"ToTable", "Column1", SelectAllColumns, SelectAllColumns2) //Replace these lists inside your last line
Я думаю, что конечный результат будет примерно таким:
let
Quelle = Sage.Contents(),
records = Quelle{[Name="Kontakte"]}[Data],
#"SelectItems" = Table.SelectColumns(records,{"$items"}),
#"$items1" = #"SelectItems"{0}[#"$items"],
SelectAllColumns = Table.ColumnNames(#"$items1"),
SelectAllColumns2 = List.Transform(SelectAllColumns, each "a."&_),
#"ToTable" = Table.FromList(#"$items1", Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"ExpandedColumn" = Table.ExpandRecordColumn(#"ToTable", "Column1", SelectAllColumns, SelectAllColumns2)
in
#"ExpandedColumn"