Развернуть записи динамически

Я хочу динамически расширять записи, потому что записи, которые я получаю, не являются фиксированными.

Это работает, но это исправлено, и я должен сказать, какие элементы должны быть расширены.

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"
Другие вопросы по тегам