如何使用PowerQuery将文件夹中的多个Excel文件中的多个表缝合/合并(向左扩展)?

时间:2019-06-22 14:46:52

标签: excel powerquery m

您好,我正在尝试解决一个简单的问题,但是我一直无法在Google或其他任何地方找到解决方案。我有多个Excel文件,其中的表是相同的。我启动了PowerQuery,将所有Tables对象加载到我的数据模型中,现在我需要的是一种基于通用PrimaryKey将所有表合并在一起的方法。

文件中的所有表在结构上均相同,并且行数相同但列不同。只有1个PrimaryID列,并且在所有表中都称为相同列。

我能够弄清楚一次手动在一个表中进行文件之间的所有合并,但是我想知道Power Query是否能够通过以类似方式连接位于文件夹中的所有表来自动执行此过程。 (即合并表1 --- LEFT JOIN --->表2 --LEFT JOIN->表3)

1 个答案:

答案 0 :(得分:0)

假设我在一个文件夹中有几个文件。我可以从该文件夹加载数据连接,它看起来应该像这样:

Load from folder

现在,我将添加一个自定义列,该列将读取每行中的二进制文件并返回一个表。我的文件格式为CSV,所以我会这样写:

= Table.AddColumn(Source, "Custom", each Table.PromoteHeaders(Csv.Document([Content])))

我将删除除此新列以外的所有其他列,然后使用Table.Combine将该列转换为组合表:

= Table.Combine(#"Removed Other Columns"[Custom])

Combine tables

这里前四行来自FileA,后四行来自FileBV

这不是我想要的,但是我可以通过取消旋转非ID列然后再重新旋转以返回所需的形状来删除那些null值。 (也许我没有想到更好的方法。)

无人值守:

Unpivotted

授权:

Pivotted


M代码:

let
    Source = Folder.Files("C:\Users\Computer\test"),
    BinToTable = Table.AddColumn(Source, "Custom", each Table.PromoteHeaders(Csv.Document([Content]))),
    #"Removed Other Columns" = Table.SelectColumns(BinToTable,{"Custom"}),
    #"Added Custom" = Table.Combine(#"Removed Other Columns"[Custom]),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Added Custom", {"ID"}, "Attribute", "Value"),
    #"Pivoted Column" = Table.Pivot(#"Unpivoted Columns", List.Distinct(#"Unpivoted Columns"[Attribute]), "Attribute", "Value")
in
    #"Pivoted Column"

这不是超级优雅,但是它应该相当健壮,因为除了ID之外,我们从不使用基础文件中的列名或列号。

相关问题