Microsoft Excel Power Query:选择包含字符串列表中字符串的列

时间:2018-02-06 05:52:04

标签: excel powerquery excel-2016 m

背景

我有一个包含10,000多个变量的数据集作为列标题,我希望将其减少到所需的数量。我知道如何通过列出包含手动指定字符串的列来选择列的样本,例如" 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生成一个表格,我称之为"数据"。由于我想根据它们必须包含的多个字符串选择列,因此我创建了一个名为"Outcomes"的字符串的动态列表。我希望我的Power Query在选择要选择的列时使用此字符串列表。

问题

是否可以让我的Power Query在List.Select()或Table.SelectColumns()函数或任何其他函数中使用此动态列表,这将使我的Power Query仅选择包含字符串的列清单?

1 个答案:

答案 0 :(得分:0)

使用这一行:

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)))),