改进模型刷新和功能
在进一步探究如何改进模型刷新和功能之前,应该要知道 Power BI 如何存储数据。 类似于 Tableau 的超文件,Power BI 将数据存储为列式数据库。
注意
列式数据库将每个列存储为其自己的文件,而不是逐行存储数据(基于行的数据库)。
将数据存储为列式数据库非常适合用于长表,在这种情况下,检索列的行要快得多。 一列中的数据始终属于同一类型,如字符串或整数。 由于一种类型的所有条目都组合在一起,因此可以更有效地压缩它们,从而在分析大量数据时提高性能。
注意
Power BI 还试图通过将这些列分组,例如项,来优化存储这些列。 对列进行分组之后,将创建一个映射非重复值的字典。
创建模型
想要改善模型的性能时,请考虑以下因素:
基数
将空白更改为值
删除多余和不必要的字段
星型架构
自动日期/时间
整数与字符串
删除高基数字段
基数是指数据库列或字段中包含的唯一值的数目。 高基数值通常是标识号、电子邮件地址或用户名。
首先要考虑的是删除高基数字段。 如果每个行都有唯一的 ID,则删除该字段。 基数越大,存储的成本就越高;非重复值对应高成本。
一个常见的问题是“日期/时间”字段,其中日期和时间的组合增加了字段的基数。 若要解决此问题,请考虑将字段拆分为单独的日期和时间字段。
将空白更改为值
编写度量值时,可能会遇到无法返回有意义值的情况。 在这些情况下,你可能会倾向于返回一个值,例如零。 为了性能起见,你应该重新考虑这种想法。
在大多数计算中,空值将被忽略,但零值不会。 将空值转换为零会强制计算评估更多行并返回大型查询结果集,这通常会导致报表呈现速度变慢。 换句话说,将空白值转换为零会增加计算成本。
删除多余和不必要的字段
你正在尝试限制表的宽度,因此有必要删除多余和不必要的字段,这将提高刷新性能。 通常,你可以删除多余字段,因为你已经创建了星型架构,不需要同一字段显示多次。 使用不必要的字段,可以确定导入时将使用的字段。 最好从小数据着手,循序渐进,而不是将所有数据放入一个巨大数据集中。
创建具有星型架构的高性能模型
星型架构设计与开发高性能、可用 Power BI 模型相关。 每个 Power BI 报表都将创建一个发送到 Power BI 模型的查询。 这些查询用于对模型数据进行筛选、分组和汇总。 设计良好的模型可提供用于筛选、分组和汇总的表。
注意
星型架构是一种数据建模架构,中间有一个事实数据表,在事实数据表周围有几个关联的维度表。 星型架构经过优化,可用于查询大型数据集。
这一设计良好的模型可以很好地满足星型架构要求:
维度表支持筛选和分组
事实数据表支持汇总
星型架构会阻止加法连接的计算和处理(雪花型架构可实现),但仍会提供平面表无法提供的压缩数据的优势。
禁用自动日期/时间
“自动日期/时间”是 Power BI Desktop 中的一种数据加载选项,它支持基于加载到模型中的日期列的有用时间智能报告。 启用此选项后,Power BI Desktop 将在数据集中每个日期字段的后面创建隐藏的日期/时间表。
将所有这些隐藏的日期/时间表和日期字段放在一起,模型大小会大幅增长。 减小模型大小会优化性能,尤其是对于较大的数据集。 最佳做法是创建一个日期表,并链接到该日期表。 你也可以用你自己的日期表添加其他日期维度,这些维度可以提供比隐藏的自动日期/时间表更多的功能。
若要在 Power BI 中禁用“自动日期/时间”选项,请按以下过程操作。
选择“文件”>“选项和设置”。
选择“选项”。
选择“全局文件”或“当前文件”部分中的“数据加载”选项。
在“时间智能”部分中,取消选中“新文件的自动日期/时间”框。
使用整数而非字符串
整数比字符串更好,原因有两个:
将整数与其他整数匹配比将字符串与另一字符串匹配的速度更快。
字符串必须以这样一种方式存储:必须先找到它们的索引,然后才能找到值。
字符串被引用两次,而整数仅被引用一次。
有关详细信息,请参阅了解星型架构和 Power BI 的重要性。