处理关系
选择模型框架并转换数据后,需要创建关系以根据来自另一个表的数据进行数据筛选和聚合。 创建星形架构并强制执行筛选维度表的规则,使模型关系能够有效地将这些筛选器应用到事实数据表,这是很常见的做法。
创建星型架构
在我们的方案中,我们从需要连接到湖屋的 .csv 中导入了一个维度表。 在导入的表进行转换后,可以创建关系来形成星型架构。
在星型架构中,事实数据表和维度表协同工作以组织和分析数据。 事实数据表存储有关业务活动(如销售或事件)的主要数据,而维度表则提供有关这些活动的上下文和说明性信息。
例如,如果你有一个销售事实数据表,该表可能存储诸如销售额和每次销售的日期之类的数据。 维度表随后会提供更多详细信息,例如客户信息、产品详细信息和时间段。 通过将事实数据表链接到维度表,可以轻松地对数据进行筛选、分组和分析。
创建关系
通过标识每个表中的相关列并创建关系,就可以直截了当地创建事实数据表和维度表之间的关系。 在数据库或数据仓库之类的关系源中,这些列通常称为“键”。 如果缺少键列,请检查表以确定要将哪些列用于关系。
关系采用不同的类型:
- “一对多”是最常见的类型,是指一个表中的一条记录与另一个表中的多条记录相关。 通常情况下,一对多是指从具有某个唯一值的维度表到许多行与该值相关的事实数据表的关系。
- “多对一”本质上与“一对多”相同,具体取决于在表之间配置筛选器的方式。
- “一对一”不太常见,因为两个表都具有唯一的数据。 考虑一下,你是需要两个表,还是可以将两个表合并为一个表。
- “多对多”不太常见,但对于复杂数据而言却是必需的。 它允许一个表中的多个记录与另一个表中的多个记录相关联。
对于多对多关系,可能需要使用桥接表。 桥接表通过中间键连接各个表,从而帮助管理这些关系。 复合模型还允许你合并来自不同源的数据,因而有助于建立多对多关系。
筛选器方向
创建关系时,可以配置数据从一个表到另一个表的筛选方向。 在星型架构中,该方向通常是从维度表到事实数据表,因此维度表可以筛选事实数据表的结果。
“双向筛选器”也是可以使用的,有时用于一对一或多对多关系。 在使用双向筛选器之前,请确保数据和关系已正确配置。 请谨慎操作,因为双向筛选器可能会对模型查询性能产生负面影响,并可能使报表用户感到困惑。
“引用完整性”可确保表之间的关系保持一致。 这意味着外键列中的每个值都必须在相关表的主键列中有一个对应值。 与 LEFT OUTER 联接相比,此功能还可以提高使用 INNER 联接时的查询性能。
了解筛选器方向和引用完整性对于准确的数据建模至关重要。 仅当关系路径完整且遵循定义的方向时,筛选器才会传播。 这些配置可确保整个模型的数据一致性和完整性。
非活动关系
可以禁用关系并通过 DAX 函数修改其筛选器上下文。 有时需要在表之间建立多个关系,但两个表之间一次只能激活一个关系。 在这种情况下,请使用 DAX 中的 USERELATIONSHIP 函数引用非活动关系以获得相同的筛选行为。 下面是一个示例:
CALCULATE(
SUM(Sales[Amount]),
USERELATIONSHIP(Sales[Date], Calendar[Date])
)
将 DAX 函数用于关系很有价值,因为它们允许你创建能够适应不同数据方案的动态且灵活的计算。 这种灵活性使你能够处理复杂的数据模型并执行仅靠静态关系难以实现的高级分析。
使用已断开连接的表
一个模型表与另一个模型表不关联的情况不太常见。 有效模型设计中的此类表称为断开连接的表。 断开连接的表并非用于将筛选器传播到其他模型表。 相反,它接受“用户输入”(可能通过切片器可视化呈现),让模型计算能够以有意义的方式使用输入值。 例如,假设有一个断开连接的表,表中有一系列货币汇率值。 按单个汇率值进行筛选时,度量值表达式就可以使用该值来转换销售值。
Power BI Desktop what-if 参数是一项用于创建断开连接的表的功能。 有关详细信息,请参阅在 Power BI Desktop 中创建并使用 What if 参数来可视化变量。