Microsoft Excel Power Query: выберите столбцы, содержащие строки, из списка строк.

Фон

У меня есть набор данных с более чем 10000 переменных в качестве заголовков столбцов, которые я хочу уменьшить до необходимого количества. Я знаю, как выбрать образец столбцов, перечислив столбцы, содержащие указанные вручную строки, например, glu и pep, которые столбцы должны содержать, чтобы их можно было выбрать. Это M-код, используемый для выбора столбцов выборки:

let
    Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
    ColumnsToSelect = List.Select(Table.ColumnNames(Source), each Text.Contains(_, "glu") or Text.Contains(_, "pep")),
    SelectColumns = Table.SelectColumns(Source, ColumnsToSelect)    
in
    SelectColumns

Этот Power Query создает таблицу, которую я называю «Данные». Поскольку я хочу выбирать столбцы на основе нескольких строк, которые они должны содержать, я составил динамический список строк, который назвал " Результаты ". Я хочу, чтобы мой Power Query использовал этот список строк при выборе столбцов.

Вопрос

Можно ли заставить мой Power Query использовать этот динамический список в функции List.Select () или Table.SelectColumns () или любой другой функции, которая заставит мой Power Query выбирать только столбцы, содержащие строки в списке?


person Nowak    schedule 06.02.2018    source источник


Ответы (1)


Используйте с этими строками:

let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],

    Source2 = Excel.CurrentWorkbook(){[Name="Outcomes"]}[Content],
    Outcomes = Source2[Outcomes],

    UnpivotedColumns = Table.UnpivotOtherColumns(Source, {}, "ColumnNames", "Filters"),

    FilteredRows = Table.SelectRows(UnpivotedColumns, each List.AnyTrue(List.Transform(Outcomes, (substring) => Text.Contains([Filters], substring)))),

    ColumnNames = List.Sort(List.Distinct(FilteredRows[ColumnNames]),Order.Ascending),
    SelectColumns = Table.SelectColumns(Source,ColumnNames)
in
    SelectColumns

магия в этой строке:

FilteredRows = Table.SelectRows(UnpivotedColumns, each List.AnyTrue(List.Transform(Outcomes, (substring) => Text.Contains([Filters], substring)))),
person virtualdvid    schedule 06.02.2018
comment
Я не могу представить себе, как используются значения моего динамического списка с помощью этих строк. У меня есть Power Query, который создает таблицу с именем Data. Этот Power Query должен выбрать столбцы, содержащие строки, перечисленные в стороннем списке под названием Outcomes. Строки glu и pep - это лишь некоторые из множества строк, представленных в списке Outcomes. - person Nowak; 07.02.2018
comment
Понятно, я обновил свой ответ, теперь он работает для Outcomes. - person virtualdvid; 07.02.2018
comment
Единственное изменение, которое мне нужно было сделать, чтобы оно соответствовало моим потребностям, - это изменить [Filters] на [ColumnNames], теперь это работает отлично! Однако наличие информации о том, что столбец, который должен содержать строки списка, может быть столбцом фильтров, очень полезно в будущем. - person Nowak; 08.02.2018