Power Query将多个表合并为一个表

假设你正在为销售和人力资源团队开发 Power BI 报表。 他们要求你创建一个联系信息报表,其中要包含每名员工、供应商和客户的联系信息和位置。 HR.Employees、Production.Suppliers 和 Sales.Customers 表中的数据如下图所示。

在 Power Query 编辑器中选择表的屏幕截图

但是,这些数据来自多个表,因此,这一困境确定了你如何合并这多个表中的数据并创建一个真实数据来源表以从中创建报表。 利用 Power BI 的固有功能,可以将查询合并到一个表中。

追加查询

在追加查询时,你会将数据行添加到另一个表或查询中。 例如,你可能有两个表,其中一个表有 300 行,另一个表有 100 行,在追加查询后,最后将有 400 行。 在合并查询时,你会将列从一个表(或查询)添加到另一个表(或查询)中。 若要合并两个表,必须有一个列是两个表之间的关键值。

对于之前提及的情况,你将使用 Production.Suppliers 和 Sales.Customers 表对 HR.Employees 表进行追加,因此你会有一个联系信息的主列表。 由于你想创建一个表,此表要包含员工、供应商和客户的所有联系信息,因此,当你合并查询时,你的合并表中所需的相关列的命名必须与原始数据表中的命名相同,这样才能看到一个合并的视图。

开始合并查询之前,可以从表中删除此任务不需要的无关列。 若要完成此任务,请将每个表的格式设置为只有四个包含你的相关信息的列,并对它们进行重命名,使它们全都具有相同的列标头:ID、company、name 和 phone。 以下图像是重格式化后的 Sales.Customers、Production.Suppliers 和 HR.Employees 表的代码片段。

重格式化以进行追加

完成重格式化后,可以合并查询。 在 Power Query 编辑器功能区的“开始”选项卡上,选择“追加查询”的下拉列表 **** ****。 可以选择“将查询追加为新查询”,这意味着追加的输出将生成一个新查询或表,或者可以选择“追加查询”,这会将行从现有表添加到另一个表中 ****。

下一个任务是创建新的主表,因此需要选择“将查询追加为新查询” ****。 选择后会转至一个窗口,你可以从中将要追加的表从“可用表”添加到“要追加的表”中,如下图所示 **** ****。

在 Power Query 编辑器中将查询追加为新查询

在添加了要追加的表后,请选择“确定”。 你将被路由到一个新查询,其中包含所有三个表中的所有行,如下图所示。

追加为新查询的最终结果

现在,你已成功创建了包含员工、供应商和客户信息的一个主表。 你可以退出 Power Query 编辑器,然后生成围绕此主表的所有报表元素。

但是,如果是想合并表,而不是将数据从一个表追加到另一个表,此过程将有所不同。

合并查询

合并查询时,你将基于表之间通用的列将数据从多个表合并到一个表中。 此过程类似于 SQL 中的 JOIN 子句。 假设销售团队现在希望你将订单和它们对应的详细信息(当前位于两个表中)合并到单个表中。 可以通过合并 Orders 和 OrderDetails 这两个表来完成此任务,如下图所示。 这两个表之间共享的列为 OrderID ****。

要合并的订单和订单详细信息表

转到 Power Query 编辑器功能区上的“开始”,然后选择“合并查询”下拉菜单,从中可以选择“将查询合并为新查询” ****。 此选择将打开一个新窗口,从中可以选择要从下拉列表中合并的表,然后选择表之间匹配的列,在本例中为 orderid ****。 

“合并查询”窗口

还可以选择如何联接两个表,这也是类似 SQL 中的 JOIN 语句的一个过程。 这些联接选项包括: 

  • 左外部 - 显示第一个表中的所有行以及第二个表中的匹配行。

  • 完全外部 -显示两个表中的所有行。

  • 内部 - 显示两个表之间匹配的行。

对于这种情况,你将选择使用“左外部”联接。 选择“确定”,这会将你路由到一个新窗口,从中可以查看你合并的查询。

“合并的查询”最终视图

现在,你可以通过不同的方式合并两个查询或表,从而根据业务需求以最合适的方式查看你的数据。

有关本主题的详细信息,请参阅 在 Power BI 中调整和合并数据文档。

 

参见:

https://docs.microsoft.com/zh-cn/learn/modules/clean-data-power-bi/5-combine-tables

 

### 使用Power Query进行多合并 当面对多个结构不一致的情况时,在Power Query中实现多合并不仅能提高效率,也能确保数据准确性。对于字段数量及顺序不同格,具体操作流程如下: #### 步骤解析 获取来自文件夹内的所有Excel文档作为初始输入源[^1]。 ```m let Source = Folder.Files("C:\YourFolderPath"), FilteredFiles = Table.SelectRows(Source, each ([Extension] = ".xlsx")), RemovedOtherColumns = Table.RemoveColumns(FilteredFiles,{"Content"}), AddedCustom1 = Table.AddColumn(RemovedOtherColumns, "GetFileData", each Excel.Workbook([Content],true)), ExpandedGetFileData = Table.ExpandTableColumn(AddedCustom1, "GetFileData", {"Name", "Item"}, {"Sheet Name", "Table Data"}) in ExpandedGetFileData ``` 上述代码片段展示了如何读取指定路径下的所有`.xlsx`文件,并提取其中的工作名称及其对应的数据。此部分实现了对目标文件夹内所有Excel文件的初步处理[^4]。 针对不同结构格,需进一步标准化每张的内容以便后续统一处理。假设存在三个具有不同列布局的样本,则应先识别共同的关键字段用于关联各行记录。通过自定义转换逻辑来调整各格式的一致性,例如重命名某些特定含义却名字各异的列名,移除无关紧要的信息等操作[^2]。 完成预处理之后,利用`Append Queries`功能可将经过整理后的各个子集追加在一起形成最终的大宽。此时应注意设置好主键或其他唯一标识符防止重复导入相同条目造成混淆[^3]。 最后一步则是清理不必要的辅助列(如原始文件名),并对剩余的有效属性执行必要的清洗动作——去除空白单元格、修正异常值等等,从而得到一份整洁有序的结果报
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值