了解 Power BI Desktop 中的多对多关系

本文适用于 Power BI Desktop,不适用于 Power BI 服务。 如果使用 Power BI 服务,则目前不支持多对多关系。

当一个表中的值可以与另一个表中的多个值关联时,会发生多对多关系,反之亦然。 这种情况很常见,例如具有多个帐户的客户或注册了多个课程的学生。

为什么多对多关系很重要

在传统的一对多关系中,一个表中的每一个值仅匹配另一个值。 但实际数据通常会打破此规则。 Power BI Desktop 支持多对多关系,以帮助你准确为这些方案建模。

如何对多对多关系建模

若要创建多对多关系,通常需要一个中间表。 此表通过列出其键的所有有效组合来连接这两个主要表。

示例:客户和帐户

假设你有两个表:

  • 客户表:包含唯一 CustomerID
  • 帐户表:包含唯一 AccountID

然后, 桥接表 (AccountCustomer) 包含如下行:

  • CustomerID = 91AccountID = 1
  • CustomerID = 92AccountID = 1
  • CustomerID = 92AccountID = 2

此桥接表使 Power BI 能够了解哪些客户属于哪些帐户,即使存在重叠也是如此。

创建关系

设置表(包括桥接表)后,需要定义它们之间的关系,以便 Power BI 能够了解数据连接方式。 此步骤对于跨模型启用准确的筛选和分析至关重要。 可以在 Power BI Desktop 的 “管理关系 ”视图中执行此作,可以在其中链接字段并控制筛选器在表之间的流动方式。

  1. 创建一对多关系:
    • CustomerIDCustomer 表中到 CustomerIDAccountCustomer 表中。
    • AccountIDAccount 表到AccountIDAccountCustomer 表。
  2. 如果需要,在报表视图中隐藏桥接表。 它用于建模,而不是报告。

使用模型

定义关系后,Power BI 会使用这些关系自动连接和筛选表中的数据。 这样,就可以生成反映真实交互的视觉对象,例如客户如何链接到帐户或交易与两者的关系。

模型处理后台的逻辑,因此无需编写复杂的 DAX 或手动联接表。 相反,你可以专注于构建能够对筛选器和切片器做出动态响应的报表。

设置关系后:

  • 可以按客户筛选帐户,也可以按帐户筛选客户。
  • 可以添加一个事实数据表(例如,Transactions),该表连接到AccountID,并用于分析跨客户、帐户和时间的活动。

初学者提示

  • 始终在表格中使用唯一标识符。
  • 使用桥接表解析多对多关系。
  • 避免循环关系 - 如果发生循环关系,Power BI 将发出警告。
  • 此功能仅在 Power BI Desktop 中可用。