减少基数
基数是一个术语,用于描述列中的值的唯一性。 基数还在两个表之间关系的上下文中用于描述关系的方向。
确定列中的基数级别
以前,在使用 Power Query 编辑器分析元数据时,“视图”选项卡上的“列分布”选项会显示有关数据中每一列的非重复项和唯一项数量的统计信息。
非重复值计数 - 给定列中的不同值的总数。
唯一值计数 - 在给定列中仅出现一次的值的总数。
在其范围内有大量重复值(非重复计数值较低)的列的基数级别较低。 相反,在其范围内有很多唯一值(唯一值计数较高)的列的基数级别较高。
较低的基数会使性能更优化,因此你可能需要减少语义模型中的高基数列数。
减少关系基数
导入多个表时,可以使用所有这些表中的数据进行一些分析。 需要这些表之间的关系才能准确计算结果并在报表中显示正确信息。 Power BI Desktop 可帮助更轻松地创建这些关系。 事实上,在大多数情况下无需执行任何操作,自动检测功能会为你完成工作。 但是,有时可能必须创建关系或需要更改关系。 无论如何,了解 Power BI Desktop 中的关系以及如何创建和编辑它们十分重要。
创建或编辑关系时,可以配置其他选项。 默认情况下,Power BI Desktop 会基于其最佳推测自动配置附加选项,根据列中的数据,这对于每个关系可能会有所不同。
关系可以具有不同的基数。 基数是关系的方向,每个模型关系必须使用基数类型进行定义。 Power BI 中的基数选项包括:
多对一(
*
:1) - 此关系是最常见的默认类型。 这表示一个表中的列可以具有值的多个实例,而另一个相关表(通常称为查找表)只有值的一个实例。一对一(1:1) - 在此关系类型中,一个表中的列只有特定值的一个实例,另一个相关表也只有特定值的一个实例。
一对多(1:
*
) - 在此关系类型中,一个表中的列只有特定值的一个实例,另一个相关表可以具有值的多个实例。多对多(*:*) - 对于复合模型,可以在表之间建立多对多关系,这会消除对表中唯一值的要求。 它还会消除以前的解决方法,例如仅引入新表以建立关系。
在开发过程中,你将在模型中创建和编辑关系,因此在模型中构建新关系时,无论选择何种基数,都应始终确保用于参与关系的两个列都共享同一数据类型。 如果尝试在两个列之间建立关系,其中一列具有文本数据类型,而另一列具有整数数据类型,则模型从不会正常工作。
在下面的示例中,ProductID 字段的数据类型在 Product 和 Sales 表中都是“整数”。 数据类型为“整数”的列的性能比数据类型为“文本”的列更好。
通过减少基数级别来提高性能
Power BI Desktop 提供了不同的技术,可以用于帮助减少加载到数据模型中的数据,例如汇总。 减少加载到模型中的数据会改进报表的关系基数。 出于此原因,努力尽可能减少加载到模型中的数据十分重要。 这种情况特别适用于大型模型,或是预计会随着时间推移而逐渐变大的模型。
减少模型大小的最有效方法可能是从数据源使用汇总表。 详细信息表可能包含每个事务,而摘要表会每天、每周或每月包含一个记录。 例如,它可能是每天所有事务的平均值。
例如,源销售事实数据表为每个订单行存储一行。 如果按日期、客户和产品进行分组,并且不需要单独的事务详细信息,则可以通过汇总所有销售指标来显著减少数据。
随后,考虑可以通过在月级别上按日期进行分组,以进一步显著减少数据。 这可能会将模型大小缩小 99%;但是无法再按天或单独的订单级别进行报告。 确定汇总事实类型数据始终涉及数据详细信息的折衷。 缺点是可能会无法钻取数据,因为详细信息不再存在。 使用混合模型设计可以减少这种折衷。
在 Power BI Desktop 中,混合模式设计会生成复合模型。 实质上,它使你可以确定每个表的存储模式。 因此,每个表都可以将其“存储模式”属性设置为“导入”或“DirectQuery”。
减小模型大小的一种有效方法是将较大事实类型表的“存储模式”属性设置为“DirectQuery”。 此设计方法可以与用于汇总数据的技术很好地结合使用。 例如,汇总销售数据可用于实现高性能“汇总”报表。 可以创建钻取页以显示特定(及窄小)筛选器上下文的粒度销售额,其中显示所有上下文中的销售订单。 钻取页会包含基于 DirectQuery 表的视觉对象,以检索销售订单数据(销售订单详细信息)。
有关详细信息,请参阅用于导入建模的数据缩减技术。