繁体   English   中英

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

[英]How to stitch/merge (LEFT OUTER JOIN) multiple tables together from multiple Excel files located in a folder using PowerQuery?

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

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

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

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

从文件夹加载

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

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

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

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

合并表格

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

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

无人驾驶:

无人驾驶

定义:

皮沃特


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之外,我们从不使用基础文件中列的名称或列号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM