跳至主要内容

Power BI 合并表:完整指南与示例

探索在 Power BI 中合并表的基本要点。本教程涵盖从基础合并到高级模糊匹配技术的全部内容。
· 9分钟 阅读

使用 AI 探索

在某个阶段,您的 Power BI 报告将不再满足于您可能一直用来学习和试验 Power BI 的那个单一 Excel 文件。

最终,您需要从不同来源导入并可能合并几张表,以构建更健壮的数据模型。

Power BI 在 Power Query 编辑器中提供了一个简单而强大的工具来实现这一点:合并表。

在本教程中,我们将通过一些实用示例和最佳实践,向您演示如何在 Power BI 中合并表。

如果您对合并和连接表的概念完全陌生,也不必担心!本教程同样会介绍您在 Power BI 中会遇到的连接类型。

如果您暂时还没准备好动手实践,不妨先看看Power BI 数据建模课程的第 2 章,作为在 Power BI 中认识连接的入门。如果您希望更深入地理解连接背后的逻辑,可以查看我们的SQL 数据连接课程。

在 Power BI 中合并表意味着什么?

在 Power BI 中合并表意味着将两张或多张表合并为一张表。

Power BI 的一大卖点在于它能够将来自多个来源的数据整合到一个统一的平台。无论您的数据来自数据仓库、Excel 文件、第三方应用,甚至网页,Power BI 都能访问并将其合并。

Power BI 的妙处在于过程非常简洁。您无需学习复杂语法或特意去上编程课程就能合并数据。Power BI 的使用体验直观且易于上手。

例如,您可能有一张包含客户信息的表,和另一张包含他们购买历史的表。通过合并这些表,您可以在一个视图中同时看到客户信息及其购买记录。

在 Power BI 中,您可以使用“合并查询”功能来实现。它允许您基于共同的列(如客户 ID或产品 ID)来连接表,从而将相关数据整合在一起查看。

在学习本教程和其他教程时,随手备一份我们的Power BI 速查表,可快速参考一些关键概念。

Power BI Cheat Sheet

DataCamp Power BI 速查表

为什么要合并表?

在深入细节之前,先澄清一下,为什么一开始您会需要合并表。

合并表并非绝对必要。毕竟,我们可以在表之间创建关系来构建一个完整的数据模型。通过这个数据模型,我们可以轻松引用关联表中的列并将其添加到可视化中。

然而,假设您的数据模型拥有庞大的连接网络,形成雪花型架构,这会让报告的运行速度和刷新时间大幅下降。那么在这种情况下该怎么办?

通过合并远端的表,您可以将数据模型转换为星型架构,从而提升性能并改善用户体验(也能减少您自己的麻烦)。

我们的Power BI 数据建模课程第 4 章会详细讲解星型与雪花型架构。或者,您也可以通过阅读我们的Power BI 数据建模教程来快速入门。

合并表 vs 创建关系:何时使用哪一种

在 Power BI 中,创建表之间的关系和合并表都是有效的方法,但它们的用途不同,带来的好处也不同。

当您拥有结构良好、表之间关系清晰的数据模型时(尤其是较大的数据集),请使用关系。这种方法有助于保持数据模型的整洁与可维护性。

当您需要为特定分析简化数据集,或在较小数据集上工作且性能影响较小时,请使用合并表。当您需要进行大量数据清洗与转换时,合并也是不错的选择。

在实践中,您可能会根据需要同时使用这两种技术。例如,您可以为整体数据模型创建关系,同时为特定分析或报表合并某些表。

开始在 Power BI 中合并表:一个简单示例

让我们先从一个简单的示例开始。

假设您有一张每日销售(Sales)表,记录每个产品每天的销量。不过,您只有产品 ID,而没有产品全名。这样的可视化效果并不好,您的利益相关者也可能不知道每个产品 ID对应的是哪个产品。

为了构建更直观、更有效的报告,我们需要将产品(Products)表合并到 Sales 表中,以便获取产品名称。

以下是我们当前的数据模型,包含两张表(为便于说明本例,忽略关系):

Power BI example of merge tables: sales table

Sales 表

Power BI example of merge tables: products table

Products 表

要执行合并,请在功能区的“主页”选项卡选择“编辑查询”,打开 Power Query 编辑器。在 Sales 表中,从功能区的“转换”部分选择“合并查询”。

Power BI merge queries location in the ribbon

Power BI 功能区中“合并查询”的位置

在第一张表中,选择Product ID 列。从下拉菜单中添加 Products 表作为合并的第二张表,并再次选择Product ID 列。

Power BI 会确认匹配行的数量,帮助我们快速识别潜在的数据问题。这里我们看到数据的 5 行都已匹配。点击“确定”执行合并。

Power BI merge tables dialog

Power BI 合并表对话框

接下来我们需要选择要从Products 表添加到Sales 表的列。在本例中,我们只需要保留Product 列。

Select columns to expand after merging tables

选择在合并后要展开的列

以下是合并结果。Product 列现已包含在Sales 表中。

After merge: Product column is added to the Sales table

合并后:Product 列已添加到 Sales 表

Power BI 中的连接类型

在 Power BI 中合并表时,您可以使用多种连接类型。每种类型都会根据匹配列决定如何组合两表的行。

好消息是,您无需深入掌握数据库设计或 SQL 才能在 Power BI 中进行这些连接。界面足够直观。

以下是您可以使用的不同连接类型:

Microsoft: Types of joins

Microsoft: 连接类型

下面我们参考以下两张表来说明每种连接。

Power BI joins example: Sales table

Sales 表

Power BI joins example: Products table

Products 表

内连接(Inner join)

仅返回两张表中都有匹配的行。如果某张表中的一行在另一张表中没有对应行,它将不会包含在结果中。

在我们的示例中,Sales 表被缩减为 5 行,因为Product ID “P020” 不存在于Products 表中。此外,来自Products 表的两行也不会包含在Sales 表中,因为没有它们的销售记录(即Product ID “P010” 和 “P001”)。

Inner join example

内连接示例

外连接(Outer join)

在 Power BI 中合并表时,您最常遇到并使用的可能是外连接(尤其是左外连接)。

我们来看看三种外连接:

左外连接:返回第一张(左侧)表的所有行,以及第二张(右侧)表中匹配的行。如果没有匹配,结果仍会包含左表的所有行,而右表列为null。

在本例中,由于在Products 表中找不到产品 “P020”,因此其没有关联的产品名称,我们在Product 列中只会看到一个null 值。

Left outer join example

左外连接示例

右外连接:与左外连接相反。它返回第二张(右侧)表的所有行,以及第一张(左侧)表中匹配的行。如果没有匹配,结果仍会包含右表的所有行,而左表列为null。

在本例中,有两个产品(Binder 和 Paper)出现在Products 表中,但在Sales 表中没有对应的销售记录。因此,我们在Sales 表中会多出两行,除了Product 列外,其他列均为空。

Right outer join example

右外连接示例

全外连接:当左表或右表任一侧有匹配时,返回所有行。如果没有匹配,结果会在不匹配的一侧显示null 值。

在本例中,我们能看到来自Sales 和Products 两张表的所有行,匹配处显示匹配,其余地方为null。

Full outer join example

全外连接示例

反连接(Anti join)

反连接对于清洗或调查可疑问题非常有用。比如,如果左外连接在连接列中返回了大量空白,这可能表明存在数据质量问题,导致 Power BI 无法识别唯一匹配。

反连接有两种类型:

左反连接:仅返回左表中在右表没有匹配的行。

在我们的示例中,只显示Product ID “P020” 的那一行,因为这是Products 表中唯一一个没有关联产品名称的产品。这立即告诉我们Products 表需要关注:缺少了一个产品!

Left anti join example

左反连接示例

右反连接:仅返回右表中在左表没有匹配的行。

在我们的示例中,只返回两行,因为这些产品没有任何关联的销售记录。

Right anti join example

右反连接示例

这或许不是急需处理的问题,但了解哪些产品被导入到了数据模型却没有任何用途,依然很有价值。

如果您有大量数据,并希望加快报告的性能和刷新时间,首先要检查的是您的表是否被无用的数据“撑大”了,而这些数据并未在报告中使用。

在 Power BI 中基于多列进行合并

当仅指定单列无法找到唯一匹配来进行连接时,就需要基于多列进行合并。

例如,假设您被要求创建一个 Power BI 报告,展示每位销售在本月的销售额相对于其目标的表现。棘手之处在于,每位销售负责多个门店,并且在不同门店有不同的目标。

以下是本示例将使用的表:

Merging on multiple columns example: sales table

Sales 表

Merging on multiple columns example: targets table

Targets 表

在Sales 表中,包含每位销售(Salesperson)及其负责的门店(Stores)的数据;在Targets 表中,包含每位销售与门店(Store)对应的销售目标(Target)。

无法仅使用Salesperson 来连接这两张表,因为 Power BI 将无法找到唯一匹配(实际上会形成多对多连接)。

因此,我们需要在两张表中使用两列来进行连接:Salesperson 和 Store。

为此,我们必须先选择Salesperson 列,然后按住ctrl 键,为两张表再选择 Store 列。您必须在两张表中以相同顺序选择列。Power BI 会在每个列名旁加上小小的1 和 2 注记,便于您确认顺序。

Power BI merge on multiple columns: merge dialog

基于多列合并的对话框示例

现在,Sales 表就能准确而全面地呈现每位销售的销售额(Sales)与目标(Targets)。

Merged Sales table: merging on multiple columns

合并后的 Sales 表:基于多列合并

使用模糊匹配合并表

模糊匹配仅适用于文本列,对于数据清洗极其有用。

什么是“模糊匹配”?这是合并表的一个功能,用于查找并合并相似但不完全相同的行。例如,当客户名称存在拼写错误或细微差异时。常规连接只在精确匹配时合并,而模糊匹配允许我们根据设定的敏感度级别基于相似匹配进行合并。

请务必在使用模糊匹配后检查结果以确保准确。有时,针对某些边缘情况,您需要手动调整,因为模糊匹配并不总是完美。

我们用一个简单示例来试试。

假设您有一张Sales 表,包含客户交易记录,但客户名称记录不一致。您希望清理这些名称,确保每位客户在所有记录中都能一致呈现。

Sales table: messy customer names example

Sales 表:凌乱的客户名称

我们可以将包含正确客户名称的Customers 表合并到 Sales 表上,并删掉原先凌乱的客户名称列,从而清理这些客户名称。

在查询编辑器中,选择Sales 表并选择用于连接的Customer 列。勾选“使用模糊匹配执行合并”选项,并在需要时配置模糊匹配选项(例如,相似度阈值)。

Merge tables: Fuzzy matching

合并表:模糊匹配

对比有无模糊匹配的连接结果,我们可以看到两位名字存在拼写错误的客户也被包含进来了。

Without fuzzy matching

未使用模糊匹配

With fuzzy matching

使用模糊匹配

展开来自Customers 表的列,将干净的Customer 列包含进 Sales 表。现在我们可以安全地删除原始的 Customer 列,并使用清洗后的 Customer 列继续构建报告。

Using fuzzy matching to clean text data

使用模糊匹配清理文本数据

合并表后的转换

基于上面的简单示例,让我们看看在合并两张表之后可以进行哪些数据转换。

如果您在合并后对Products 表进行转换,这些转换会更新合并结果。例如,如果您在 Customers 表中清理数据或添加新列,这些更改在刷新数据时会反映到合并后的表中。

因此,请注意不要进行可能导致错误或不准确结果的更改,以免影响任何使用 Products 表进行合并的表(如本例中的 Sales 表)。

另一方面,您可以在合并之后的步骤中,对Sales 表自由进行转换,因为这些不会直接影响合并本身。但请注意不要在合并之前添加额外的转换步骤,因为这可能导致合并出错,进而阻止整张表加载。

查看我们的Power BI 数据转换课程,学习如何在 Power Query 编辑器中操作,并了解为报表准备数据所能进行的一切处理。

结论

在 Power BI 中管理和合并表可能具有挑战性,尤其是可选择的连接类型非常多。

不过,合并表功能极其有用,不应被忽视。

通过本教程,您现在可以自信地使用 Power BI 的合并表功能来清理数据,并构建可整合多种来源数据的报告。

如果您已准备好迈出下一步,开启您的 Power BI 职业生涯,我们的综合性Power BI 数据分析师职业路径涵盖了成为 Power BI 开发者所需的一切知识,也将全面帮助您获得认证。

Joleen Bothma

作者

Joleen Bothma

主题