有没有办法动态识别和扩展嵌入表的列?

时间:2017-06-08 12:38:57

标签: powerquery m

如果我想扩展这个嵌入式表格......

enter image description here

...然后点击展开按钮,我会看到下拉列表,选择要扩展的列:

enter image description here

但是,如果我选择“(选择所有列)”将它们全部展开,Power Query会在我执行此操作时将其转换为所有列的硬编码列名称。像这样:

= Table.ExpandTableColumn(Source, "AllData", {"Column1", "Column2", "Column3", "Column4", "Custom"}, {"Column1", "Column2", "Column3", "Column4", "Custom"})

之后,如果底层嵌入表的列发生更改,则硬编码列名将不再相关,查询将“中断”。

那么如何告诉它动态地识别并提取嵌入式表的所有当前列?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作来获取列名列表:

List.Accumulate(Source[AllData], {}, (state, current) => List.Union({state, Table.ColumnNames(current)}))

这将遍历列中的每个单元格,从该单元格中的表中获取列名称,并将新名称添加到结果中。将其存储在新步骤中更容易,然后在下一步中引用它。

请记住,此方法比传入您知道的名称列表要慢得多,因为它必须扫描整个表以获取列名称。如果将其用于Table.ExpandTableColumn中的第三个参数,也可能会出现问题,因为它可能使用已存在的列名。

答案 1 :(得分:0)

尝试使用Table.Join,它可以一步加入并扩展第二个表。

"Merged Queries" = Table.Join(Source,{"Index.1"},Table2,{"Index.2"},JoinKind.LeftOuter)

您只需要确保表之间的列是唯一的。 使用Table.PrefixColumns确保列名称是唯一的