减少基数
基数 是用于描述列中值的唯一性的术语。 基数也用于模型关系的上下文中,它描述关系的方向。
确定列中的基数级别
以前,当您使用 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 表的视觉对象,以检索销售订单数据(销售订单详细信息)。
有关详细信息,请参阅导入建模时减少数据的方法。