Power BI 提供了性能分析器工具,以帮助解决问题并简化此过程。
考虑这样一个场景,你要为组织中的销售团队创建报表。 你通过 DirectQuery 创建了到销售团队的 SQL 数据库的数据连接,进而导入了该数据库内多个表的数据。 创建初步视觉对象和筛选器时,你发现某些表的查询速度比其他表更快,而且有些筛选器相比其他筛选器需要更长的处理时间。
优化 Power Query 中的性能
Power Query 中的性能取决于数据源级别的性能。 Power Query 提供的数据源种类非常广泛,并且针对每种数据源的性能优化技术也同样广泛。 例如,如果从 Microsoft SQL Server 中提取数据,则应遵循适用于该产品的性能优化准则。 出色的 SQL Server 性能优化技术包括索引创建、硬件升级、执行计划优化和数据压缩。 这些主题不在本文的讨论范围之内,仅作为示例介绍,以便你熟悉数据源并在使用 Power BI 和 Power Query 时获得相关优势。
Power Query 通过一种称为“查询折叠”的技术,充分利用数据源级别的出色性能。
查询折叠
Power Query 编辑器内的查询折叠功能有助于提升 Power BI 报表的性能。 “查询折叠”是这样一个过程:当你主动进行转换时,将你在 Power Query 编辑器中进行的转换和编辑同时作为本机查询或简单的“Select”SQL 语句进行跟踪。 实现此过程是为了确保可以在原始数据源服务器中进行这些转换,而不会占用大量 Power BI 计算资源。
你可以使用 Power Query 将数据加载到 Power BI 中。 然后,使用 Power Query 编辑器对数据进行进一步的转换,例如重命名或删除列,追加、分析或筛选数据,或者对数据进行分组。
考虑这样一个场景:你已经重命名销售数据中的一些列,并以“城市/省/直辖市/自治区”格式将“城市”和“省/直辖市/自治区”列合并在一起。 与此同时,查询折叠功能跟踪本机查询中的这些更改。 然后,当你加载数据时,原始数据源中独立执行了转换,这样可以确保优化 Power BI 中的性能。
查询折叠的优点包括:
-
提高数据刷新和增量刷新的效率。 使用查询折叠导入数据表时,Power BI 能够更好地分配资源并更快地刷新数据,因为 Power BI 不必在本地运行每个转换。
-
与 DirectQuery 和双存储模式自动兼容。 所有 DirectQuery 和双存储模式数据源都必须具有后端服务器处理能力才能创建直接连接,这意味着查询折叠是可供使用的自动功能。 如果所有转换可以缩减为一条“Select”语句,则系统会进行查询折叠。
下面的场景演示了运行中的查询折叠。 在此场景中,你将一组查询应用于多个表。 在使用 Power Query 添加新数据源并转至 Power Query 编辑器后,转到“查询设置”窗格并右键单击最后应用的步骤,如下图所示。
如果“查看本机查询”选项不可用(未以粗体显示),则无法在此步骤中执行该查询折叠;此时,你必须在“应用的步骤”区域中逆向操作,直到进入可以使用“查看本机查询”(以粗体显示)的步骤。 此过程将显示用于转换数据集的本机查询。
本机查询不适用于以下转换:
- 添加索引列
- 合并和追加具有两个不同数据源的不同表中的列
- 更改列的数据类型
- 运行复杂的 DAX 函数
要记住的一个有效原则是,如果可以将转换转变为一条“Select”SQL 语句(其中包括 GROUP BY、SORT BY、WHERE、UNION ALL 和 JOIN 等运算符和子句),则可以使用查询折叠。
对于检索、导入和准备数据,查询折叠是优化性能的一种方式,还有另一种方式是查询诊断。
查询诊断
可用于研究查询性能的另一个工具是“查询诊断”。 借助该功能,你可以确定在以下情况下存在的瓶颈(如果有):加载和转换数据,刷新 Power Query 中的数据,在查询编辑器中运行 SQL 语句等。
要在 Power Query 编辑器中访问查询诊断,请在“主页”功能区中转到“工具”。 准备好开始在 Power Query 编辑器中转换数据或进行其他编辑后,在“会话诊断”选项卡上选择“启动诊断”。诊断完成后,务必选择“停止诊断”。
选择“诊断步骤”会显示运行该步骤所花的时间,如下图所示。 通过此选项,你可以了解某个步骤是否比其他步骤花费的时间更长,然后以此为进一步研究的起点。
当你希望在 Power Query 端分析任务(例如加载数据集、运行数据刷新或运行其他转换任务)性能时,此工具非常有用。
有助于优化性能的其他技术
优化 Power BI 中查询性能的其他方式包括:
-
在原始数据源中处理尽可能多的数据。 Power Query 和 Power Query 编辑器支持处理数据;但是,完成此任务需要占用处理能力,这可能会降低报表其他区域中的性能。 一般而言,推荐做法是在本机数据源中处理尽可能多的数据。
-
使用本机 SQL 查询。 针对 SQL 数据库使用 DirectQuery 时(例如在我们的场景中),确保未从存储过程或公用表表达式 (CTE) 中拉取数据。
-
将日期和时间分开(如果绑定在一起)。 如果有任何表中存在将日期和时间合并在一起的列,务必先将它们分隔到不同的列中,然后再导入 Power BI 中。 此方法将提高压缩能力。
参见:
https://docs.microsoft.com/zh-cn/learn/modules/get-data/8-performance-issues