将多个表合并为一个表

已完成

合并查询的功能非常强大,因为它使你能够追加或合并不同的表或查询。 在以下情况下,可以将表合并为一个表:

  • 存在过多的表,使得难以导航一个过于复杂的语义模型。

  • 多个表具有一个类似的角色。

  • 一个表只有一两个可以放进不同表中的列。

  • 想在一个自定义列中使用来自不同表的多个列。

可以通过两种不同的方式合并表:合并和追加。

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

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

追加查询

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

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

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

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

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

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

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

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

合并查询

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

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

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

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

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

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

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

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

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