本文适用于 Power BI Desktop,不适用于 Power BI 服务。 如果使用 Power BI 服务,则目前不支持多对多关系。
当一个表中的值可以与另一个表中的多个值关联时,会发生多对多关系,反之亦然。 这种情况很常见,例如具有多个帐户的客户或注册了多个课程的学生。
为什么多对多关系很重要
在传统的一对多关系中,一个表中的每一个值仅匹配另一个值。 但实际数据通常会打破此规则。 Power BI Desktop 支持多对多关系,以帮助你准确为这些方案建模。
如何对多对多关系建模
若要创建多对多关系,通常需要一个中间表。 此表通过列出其键的所有有效组合来连接这两个主要表。
示例:客户和帐户
假设你有两个表:
-
客户表:包含唯一
CustomerID值 -
帐户表:包含唯一
AccountID值
然后, 桥接表 (AccountCustomer) 包含如下行:
-
CustomerID = 91、AccountID = 1 -
CustomerID = 92、AccountID = 1 -
CustomerID = 92、AccountID = 2
此桥接表使 Power BI 能够了解哪些客户属于哪些帐户,即使存在重叠也是如此。
创建关系
设置表(包括桥接表)后,需要定义它们之间的关系,以便 Power BI 能够了解数据连接方式。 此步骤对于跨模型启用准确的筛选和分析至关重要。 可以在 Power BI Desktop 的 “管理关系 ”视图中执行此作,可以在其中链接字段并控制筛选器在表之间的流动方式。
- 创建一对多关系:
- 从
CustomerIDCustomer 表中到CustomerIDAccountCustomer 表中。 - 从
AccountIDAccount 表到AccountIDAccountCustomer 表。
- 从
- 如果需要,在报表视图中隐藏桥接表。 它用于建模,而不是报告。
使用模型
定义关系后,Power BI 会使用这些关系自动连接和筛选表中的数据。 这样,就可以生成反映真实交互的视觉对象,例如客户如何链接到帐户或交易与两者的关系。
模型处理后台的逻辑,因此无需编写复杂的 DAX 或手动联接表。 相反,你可以专注于构建能够对筛选器和切片器做出动态响应的报表。
设置关系后:
- 可以按客户筛选帐户,也可以按帐户筛选客户。
- 可以添加一个事实数据表(例如,
Transactions),该表连接到AccountID,并用于分析跨客户、帐户和时间的活动。
初学者提示
- 始终在表格中使用唯一标识符。
- 使用桥接表解析多对多关系。
- 避免循环关系 - 如果发生循环关系,Power BI 将发出警告。
- 此功能仅在 Power BI Desktop 中可用。