改进模型刷新和功能

已完成

在进一步探究如何改进模型刷新和功能之前,应该要知道 Power BI 如何存储数据。 类似于 Tableau 的超文件,Power BI 将数据存储为列式数据库。

基于行的数据库和 Power BI 列式数据库的屏幕截图。

注意

列式数据库将每个列存储为其自己的文件,而不是逐行存储数据(基于行的数据库)。

将数据存储为列式数据库非常适合用于长表,在这种情况下,检索列的行要快得多。 一列中的数据始终属于同一类型,如字符串或整数。 由于一种类型的所有条目都组合在一起,因此可以更有效地压缩它们,从而在分析大量数据时提高性能。

注意

Power BI 还试图通过将这些列分组,例如项,来优化存储这些列。 对列进行分组之后,将创建一个映射非重复值的字典。

创建模型

想要改善模型的性能时,请考虑以下因素:

  • 基数

  • 将空白更改为值

  • 删除多余和不必要的字段

  • 星型架构

  • 自动日期/时间

  • 整数与字符串

删除高基数字段

基数是指数据库列或字段中包含的唯一值的数目。 高基数值通常是标识号、电子邮件地址或用户名。

具有高基数的数据表列的一个示例是具有名为 USER_ID 列的 USERS 表。

首先要考虑的是删除高基数字段。 如果每个行都有唯一的 ID,则删除该字段。 基数越大,存储的成本就越高;非重复值对应高成本。

一个常见的问题是“日期/时间”字段,其中日期和时间的组合增加了字段的基数。 若要解决此问题,请考虑将字段拆分为单独的日期和时间字段。

将空白更改为值

编写度量值时,可能会遇到无法返回有意义值的情况。 在这些情况下,你可能会倾向于返回一个值,例如零。 为了性能起见,你应该重新考虑这种想法。

在大多数计算中,空值将被忽略,但零值不会。 将空值转换为零会强制计算评估更多行并返回大型查询结果集,这通常会导致报表呈现速度变慢。 换句话说,将空白值转换为零会增加计算成本。

删除多余和不必要的字段

你正在尝试限制表的宽度,因此有必要删除多余和不必要的字段,这将提高刷新性能。 通常,你可以删除多余字段,因为你已经创建了星型架构,不需要同一字段显示多次。 使用不必要的字段,可以确定导入时将使用的字段。 最好从小数据着手,循序渐进,而不是将所有数据放入一个巨大数据集中。

创建具有星型架构的高性能模型

星型架构设计与开发高性能、可用 Power BI 模型相关。 每个 Power BI 报表都将创建一个发送到 Power BI 模型的查询。 这些查询用于对模型数据进行筛选、分组和汇总。 设计良好的模型可提供用于筛选、分组和汇总的表。

注意

星型架构是一种数据建模架构,中间有一个事实数据表,在事实数据表周围有几个关联的维度表。 星型架构经过优化,可用于查询大型数据集。

这一设计良好的模型可以很好地满足星型架构要求:

  • 维度表支持筛选和分组

  • 事实数据表支持汇总

星型架构会阻止加法连接的计算和处理(雪花型架构可实现),但仍会提供平面表无法提供的压缩数据的优势。

禁用自动日期/时间

“自动日期/时间”是 Power BI Desktop 中的一种数据加载选项,它支持基于加载到模型中的日期列的有用时间智能报告。 启用此选项后,Power BI Desktop 将在数据集中每个日期字段的后面创建隐藏的日期/时间表。

将所有这些隐藏的日期/时间表和日期字段放在一起,模型大小会大幅增长。 减小模型大小会优化性能,尤其是对于较大的数据集。 最佳做法是创建一个日期表,并链接到该日期表。 你也可以用你自己的日期表添加其他日期维度,这些维度可以提供比隐藏的自动日期/时间表更多的功能。

若要在 Power BI 中禁用“自动日期/时间”选项,请按以下过程操作。

  1. 选择“文件”>“选项和设置”。

  2. 选择“选项”。

    用于禁用自动日期/时间的选项和设置的屏幕截图。

  3. 选择“全局文件”或“当前文件”部分中的“数据加载”选项。

  4. 在“时间智能”部分中,取消选中“新文件的自动日期/时间”框。

使用整数而非字符串

整数比字符串更好,原因有两个:

  • 将整数与其他整数匹配比将字符串与另一字符串匹配的速度更快。

  • 字符串必须以这样一种方式存储:必须先找到它们的索引,然后才能找到值。

字符串被引用两次,而整数仅被引用一次。

有关详细信息,请参阅了解星型架构和 Power BI 的重要性