首页 > 解决方案 > 在 Power Query 中组合匹配名称模式的表

问题描述

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

我无法做的是循环这个列表并转换成一个可以组合的表格列表。

例如 Name 是带有表名的列表:

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]

我尝试了很多方法,但我错过了某种类型的转换。

我能够将此表名称列表转换为具有以下内容的表列表:

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

然而,Expression.Evaluate 感觉就像一个丑陋的黑客。这种转变有更好的方法吗?

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

Source = Table.Combine(T1)

但我得到了错误:

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

如果我从带有索引的列表中提取表(例如 T1{2}),它就可以工作。所以在这个思路中,我需要某种 o 循环来追加。

说明问题的步骤。

  1. 目标是附加 (Tables.Combine) 每个名为 T_\d+_Mov 的表: 现有表

  2. 过滤表中匹配的表名后: 表名 表

  3. 转换为列表: 表名称列表

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

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

重要的是我不想为此使用 VBA。从 VBA 扫描 ThisWorkbook.Queries() 重新创建查询更容易,但在添加删除表时它不会是一个干净的重新加载。

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

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

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

标签: powerquerym

解决方案


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

在此处输入图像描述

或者使用Table.Combine(YourList)


推荐阅读