Power Query:合并现有表列表的子集

Power Query:合并现有表列表的子集

我正在 Microsoft 365 的 Excel 中使用 Power Query。

我有一个 Power Query,其第一步是合并一组表:

let
    Source = Table.Combine({One_foo_bar, Two_foo_bar, Three_foo_bar, Four_foo_bar, Five_foo_bar, Six_foo_bar, Seven_foo_bar, Eight_foo_bar}),
    // ...
    #"Result" = ...
in
    #"Result"

问题是并非所有命名的表都存在。任何表的子集都可能存在。那些确实存在的表位于 中ThisWorkbook。如果缺少任何表,则上面显示的 M 代码将引发错误。

如果模式匹配可以帮助解决这个问题,那么表名都遵循模式*_foo_bar。M 似乎不支持这种类型的模式匹配,但我还是附上了这条声明,以防有人知道一些我不知道的事情,并可以利用这个事实来制定解决方案。

我该如何修改此代码来合并现有的表?

答案1

用作Excel.CurrentWorkbook()源,然后过滤名称列以仅返回以“_foo_bar”结尾的项目。例如,

let
    Source = Excel.CurrentWorkbook(),
    #"Filtered Rows" = Table.SelectRows(Source, each Text.EndsWith([Name], "_foo_bar")),
    #"Combine Tables" = Table.Combine(#"Filtered Rows"[Content])
in
    #"Combine Tables"

答案2

好问题,这不是一个完整的答案,但我将从这个想法开始。首先,在 Excel 中构建现有表的数组,如下所示:

在此处输入图片描述

然后使用 power query 从该表中获取现有表。

另一种方法是使用 PowerQuery 更直接地构建该数组TRY

答案3

虽然我已经接受了@DjC 给出的答案,但我会发布一个根据@gns100 给出的建议得出的答案以供将来参考。

let
    remove_errors_f = (input_list as list) as list =>
                          List.RemoveNulls(
                                              List.Transform(
                                                                List.Positions(input_list),
                                                                each try input_list{_} otherwise null
                                                            )
                                          ),

    #"MyTables" = remove_errors_f({One_foo_bar, Two_foo_bar, Three_foo_bar, Four_foo_bar, Five_foo_bar, Six_foo_bar, Seven_foo_bar, Eight_foo_bar}),
    #"Column Names" = {"Column1", "Column2", "Column3", "Column4"},

    combiner_f = (AccumulatedTable as table, TablesToCombine as list) as table =>
                 if List.Count(TablesToCombine) = 0 then
                     AccumulatedTable
                 else
                     @combiner_f(Table.Combine({AccumulatedTable, TablesToCombine{0}}), List.RemoveFirstN(TablesToCombine, 1)),

    Source = combiner_f(#table(#"Column Names", {}), #"MyTables"),
    // ...
    #"Result" = ...
in
    #"Result"

相关内容