Автоматически расширять все столбцы таблицы с определенным именем

Я новичок в программировании и не знаком с языком моделирования "M". У меня есть XML-файл, который я хочу использовать для загрузки данных в редактор запросов. В запросе мне нужно развернуть только столбцы таблицы с указанным ниже именем:

  1. Посмотреть
  2. папка просмотра
  3. Имя атрибута

Я нашел следующее сообщение, где они дают функция Криса Webb за расширение всех списков (код ниже).

= (TableToExpand as table, optional ColumnNumber as number) =>
    let
     ActualColumnNumber = if (ColumnNumber=null) then 0 else ColumnNumber,
     ColumnName = Table.ColumnNames(TableToExpand){ActualColumnNumber},
     ColumnContents = Table.Column(TableToExpand, ColumnName),
     ColumnsToExpand = List.Distinct(List.Combine(List.Transform(ColumnContents, each if _ is table then Table.ColumnNames(_) else {}))),
     NewColumnNames = List.Transform(ColumnsToExpand, each ColumnName & "." & _),
     CanExpandCurrentColumn = List.Count(ColumnsToExpand)>0,
     ExpandedTable = if CanExpandCurrentColumn then Table.ExpandTableColumn(TableToExpand, ColumnName, ColumnsToExpand, NewColumnNames) else TableToExpand,
     NextColumnNumber = if CanExpandCurrentColumn then ActualColumnNumber else ActualColumnNumber+1,
     OutputTable = if NextColumnNumber>(Table.ColumnCount(ExpandedTable)-1) then ExpandedTable else ExpandAll(ExpandedTable, NextColumnNumber)
    in
     OutputTable

Но как развернуть только нужные списки / таблицы?

Обновление снимка экрана редактора запросов


person Gangula    schedule 22.06.2018    source источник


Ответы (1)


Вы должны иметь возможность просто установить фильтр на старую строку ColumnsToExpand.

То есть,

 TableColumns = //This is the old ColumnsToExpand definition renamed.
     List.Distinct(List.Combine(List.Transform(ColumnContents, each if _ is table then Table.ColumnNames(_) else {}))),
 ColumnsToExpand =
     List.Select(TableColumns, each (_ = "view" or _ = "viewfolder" or _ = "Attribute:name")),

Или в одной строке вот так,

 ColumsToExpand = List.Select(List.Distinct(List.Combine(List.Transform(ColumnContents, each if _ is table then Table.ColumnNames(_) else {}))), each (_ = "view" or _ = "viewfolder" or _ = "Attribute:name")),
person Alexis Olson    schedule 22.06.2018
comment
Это сработало как шарм, спасибо. Я также хотел бы соответственно переименовать заголовки столбцов. Для первой найденной папки просмотра имя должно быть viewfolder1, для второй - viewfolder 2, а для атрибута: name, найденного после viewfolder 2, имя столбца должно быть view 2. Возможно ли это? Я обновил снимок экрана и файлы выше соответственно. - person Gangula; 24.06.2018
comment
Это звучит как отдельный вопрос, поэтому я предлагаю опубликовать его отдельно. - person Alexis Olson; 24.06.2018
comment
Конечно спасибо еще раз - person Gangula; 25.06.2018
comment
Я создал еще один вопрос, связанный с этим кодом. Не могли бы вы проверить это, stackoverflow.com/questions/57222986/ - person Gangula; 26.07.2019