使用性能分析器诊断问题
在解决性能问题之前,需要找到它。 性能分析器是内置于Power BI中的主要诊断工具,用于识别报表中速度缓慢的原因。 它测量每个视觉元素的加载时间,并将该时间分解为不同类别,以便您可以精确确定瓶颈的位置。
打开性能分析器
在 Power BI Desktop 中,选择 Optimize 功能区,然后选择 Performance 分析器。 “性能分析器”窗格将在报表画布右侧打开。 窗格可见后,即可开始录制。
注释
性能分析器也可在Power BI 服务中使用。 在编辑模式下打开报表,选择 “视图 ”菜单,然后选择 “性能分析器”。 时间划分和复制查询功能的工作方式相同。
记录和度量性能
若要捕获计时数据,请执行以下步骤:
- 在“性能分析器”窗格中选择“ 开始录制 ”。
- 与报表交互:刷新视觉对象、调整切片器或在页面之间导航。
- 观察每个视觉对象所对应的实时显示的时间结果。
- 捕获到足够数据时,请选择 “停止 ”。
每个交互(例如更改切片器或刷新页面)都会在窗格中创建一个分区。 在每个部分下,你将看到各个视觉对象及其加载时间。
小窍门
在测量以获取准确结果之前清除视觉缓存。 在 Power BI Desktop 中,可在“性能分析器”窗格中找到此选项。 缓存的数据可能会掩盖实际的查询性能,因此清除缓存可以确保测量到真实的执行时间。
还可以度量单个视觉对象。 性能分析器录制时,选择任何视觉对象的右上角的 “分析此视觉对象 ”图标,以单独刷新和捕获其性能数据。
了解计时指标
性能分析器将每个视觉对象的加载时间分解为多个类别:
| Metric | 它度量的内容 |
|---|---|
| DAX 查询 | 视觉对象向语义模型发送查询并接收结果的时间。 这是最常见的瓶颈。 |
| 视觉显示 | 视觉对象在屏幕上呈现的时间,包括检索 Web 图像或地理编码。 |
| 直接查询 | 使用 DirectQuery 存储模式时发送到外部数据源的查询的时间。 |
| 其他 | 后台处理的时间,包括等待其他视觉对象完成、准备查询和网络开销时间。 |
Duration (ms) 值表示每个操作从开始到结束的总时间。 由于大多数操作在单个 UI 线程上依次执行,因此所报告的持续时间中,可能包含了在其他视觉对象完成处理期间,任务在队列中等待时所耗费的时间。
在诊断一个响应慢速报表时,应当首先关注其中贡献最大的那个影响因素。 如果 DAX 查询时间占主导地位,问题位于模型或度量值中。 如果视觉显示时间很高,则视觉对象本身呈现的数据过多。 如果直接查询时间较长,可能是外部数据源或查询折叠的问题。
导出和分析 DAX 查询
性能分析器最有用的功能之一是能够提取视觉对象发送到语义模型的确切 DAX 查询。 这样,便可以分析特定查询速度缓慢的原因。
要导出 DAX 查询,您可以:
- 在“性能分析器”窗格中展开视觉对象的条目。
- 选择“ 在 DAX 查询视图中运行 ”以自动打开新选项卡中的查询,或选择“ 复制查询 ”将其复制到剪贴板。
- 在 DAX 查询视图中,运行查询并查看结果。
结果网格显示可视化所用的数据。 可以在 DAX 查询视图中检查查询结构、识别成本高昂的操作和测试优化。
视觉对象生成的 DAX 查询通常比手动编写的查询更详细。 它包括额外的 VAR、TOPN 包装器和支持视觉对象类型切换的列引用。 如果Copilot可用,它可以帮助简化 DAX 查询视图中的查询结构。 尝试一个提示,例如“删除 VAR 和 TOPN 并简化此 DAX 查询”。
注释
在 Power BI 服务 中,DAX 查询视图中的 Run 按钮不可用。 请改为复制查询,选择 “打开数据模型 ”以打开 Web 建模体验,然后切换到 DAX 查询视图以粘贴并运行它。 关闭浏览器后,不会保存 Web 中的查询。
使用 DAX Studio 进行更深入的诊断
DAX Studio 是一种免费的开源工具,可通过 XMLA 终结点连接到本地语义模型或已发布的语义模型。 DAX Studio 提供内置 DAX 查询视图以外的功能:
- 服务器计时:将查询执行分为公式引擎(FE)和存储引擎(SE)时间,显示引擎花费精力的确切位置。
- 查询计划:显示逻辑查询计划和物理查询计划,这有助于识别复杂度量值中的低效操作。
- 模型指标:分析表和列大小、基数和压缩统计信息,以便可以识别模型大小的最大参与者。
当需要获取性能分析器和 DAX 查询视图未公开的引擎级诊断信息或无法访问用于简化查询的 Copilot 时,DAX Studio 特别有用。 工作流相同:从性能分析器复制 DAX 查询,将其粘贴到 DAX Studio 中,并使用服务器计时和查询计划来了解引擎花费时间的位置。
有效地解释结果
仅原始数字就不讲完整故事。 有效诊断需要在上下文中比较结果:
- 比较各视觉之间的相对时间。 如果一个视觉对象需要花费 5,000 毫秒,而所有其他视觉对象都在 200 毫秒以下,那么这个视觉对象就是焦点区域。
- 确定瓶颈类别。 如果一个视觉对象的 DAX 查询耗时 4,800 毫秒,而视觉对象显示仅耗时 200 毫秒,那么问题通常出在数据模型或度量值上,而非渲染环节。
- 使用代表性数据进行测试。 对包含 1,000 行的开发数据集的性能度量无法准确反映具有 1000 万行的数据集的生产性能。
- 重复度量。 单个度量可能会受到缓存、网络可变性或后台进程的影响。 多次运行度量并观察模式。
请考虑此示例:报表页包含五个视觉对象。 清除缓存并刷新所有视觉对象后,结果如下所示:
| 视觉对象 | DAX查询(ms) | 视觉对象显示 (ms) | 总计(ms) |
|---|---|---|---|
| 按区域划分的收入(条形图) | 120 | 80 | 200 |
| 每月趋势(折线图) | 150 | 90 | 240 |
| 产品详细信息(表) | 4,500 | 300 | 4,800 |
| KPI 卡 | 50 | 30 | 80 |
| 顶级客户(表) | 180 | 110 | 290 |
产品详情表明显是例外。 其 DAX 查询时间为 4,500 毫秒,表示代价高昂的度量值或数据请求过多。 下一步是复制该查询,在 DAX 查询视图中对其进行分析,并确定问题是复杂的计算、低效的筛选器模式还是返回过多的数据。
性能度量的最佳做法
遵循以下准则,从性能分析器获取可靠且可操作的结果:
- 在每次测试之前清除视觉缓存。 缓存的结果会屏蔽实时查询执行时间。
- 隔离变量。 一次更改一件事,然后再次度量。
- 测试现实方案。 使用生产规模的数据和典型的筛选器设置。
- 文档基线。 记录更改前后的计时结果,以便量化改进。
- 专注于影响用户的视觉效果。 设置默认登陆页上和常用报表页的视觉对象的优先级。
性能分析器是故障排除工作流的起点。 它告诉你什么是缓慢的,以及哪个类别(DAX、视觉对象、DirectQuery)贡献最大。 下一步是解决此问题:从 DAX 优化开始。