在 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 循环来附加。
说明问题的步骤。
objective是追加(Tables.Combine)每个table命名为T_\d+_Mov:
过滤 table 中匹配的 table 名称后:
转换为列表:
将列表中的名称转换为真实的 table:
现在我只需要将它们组合起来,这就是我卡住的地方。
重要的是我不想为此使用 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)
我正在尝试组合许多名称与模式匹配的 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 循环来附加。
说明问题的步骤。
objective是追加(Tables.Combine)每个table命名为T_\d+_Mov:
过滤 table 中匹配的 table 名称后:
转换为列表:
将列表中的名称转换为真实的 table:
现在我只需要将它们组合起来,这就是我卡住的地方。
重要的是我不想为此使用 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)