代码之家  ›  专栏  ›  技术社区  ›  Nowak

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

  •  1
  • Nowak  · 技术社区  · 7 年前

    出身背景

    我有一个数据集,其中有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查询生成一个我称之为“Data”的表。因为我想根据列必须包含的多个字符串来选择列,所以我创建了一个动态字符串列表,我调用了这些字符串 "Outcomes" . 我希望我的Power Query在选择要选择的列时使用此字符串列表。

    问题

    是否可以让我的Power Query使用列表中的此动态列表。选择()或表格。SelectColumns()函数或任何其他函数,使我的Power Query仅选择包含列表中字符串的列?

    1 回复  |  直到 7 年前
        1
  •  1
  •   virtualdvid    7 年前

    与此行一起使用:

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