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

Is there a way to dynamically identify and expand an embedded table's columns?

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

...然后我点击展开按钮,我看到 select 我想展开哪些列的下拉菜单:

但是,如果我选择“(Select 所有列)”将它们全部展开,Power Query 会在我这样做时将其转换为所有列的 hard-coded 列名称。像这样:

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

之后,如果底层嵌入的 table 的列发生变化,hard-coded 列名称将不再相关,查询将 "break."

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

您可以像这样获取列名列表:

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

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

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

尝试使用 Table.Join 一步连接和扩展第二个 table。

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

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