在 Power Query 中合并与名称模式匹配的表

Combine Tables matching a name pattern in Power Query

我正在尝试组合许多名称与模式匹配的 table。 到目前为止,我已经从#shared 中提取了 table 个名称,并将 table 个名称放在列表中。

我无法做的是循环此列表并转换为可以组合的 table 列表。

例如名称是具有 table 个名称的列表:

Source = Table.Combine( { List.Transform(Name, each #shared[_] )} )

错误是:

Expression.Error: We cannot convert a value of type List to type Text.
Details:
    Value=[List]
    Type=[Type]

我尝试了很多方法,但我缺少某种类型转换。

我能够将 table 的名字列表转换为 table 的列表:

T1 = List.Transform(Name, each Expression.Evaluate(_, #shared))

但是,Expression.Evaluate 感觉像是一个丑陋的 hack。这种转变有没有更好的方法?

有了这个 table 的列表,我尝试将它们与:

Source = Table.Combine(T1)

但是我得到了错误:

Expression.Error: A cyclic reference was encountered during evaluation.

如果我使用索引(例如 T1{2})从列表中提取 table,它就可以工作。所以按照这种思路,我需要某种 o 循环来附加。

说明问题的步骤。

  1. objective是追加(Tables.Combine)每个table命名为T_\d+_Mov:

  2. 过滤 table 中匹配的 table 名称后:

  3. 转换为列表:

  4. 将列表中的名称转换为真实的 table:

  5. 现在我只需要将它们组合起来,这就是我卡住的地方。

重要的是我不想为此使用 VBA。 从 VBA 扫描 ThisWorkbook.Queries() 重新创建查询更容易,但在添加删除 tables.

时它不会是干净的重新加载

@Michal Palko 建议的最终解决方案是:

CT1 = Table.FromList(T1, Splitter.SplitByNothing(), {"Name"}, null, ExtraValues.Ignore),
EC1  = Table.ExpandTableColumn(CT1, "Name", Table.ColumnNames(CT1{0}[Name]) )

其中 T1 是上一步。 唯一需要注意的是第一个 table 必须包含所有列,否则它们将被跳过。

我认为可能有更简单的方法,但考虑到您的方法,请尝试将您的列表转换为 table(列),然后展开该列:

或者使用Table.Combine(YourList)