查看度量值、关系和视觉对象的性能

已完成

如果语义模型具有多个表、复杂关系、复杂计算、多个视觉效果或冗余数据,则可能存在报表性能不佳的情况。 报表性能不佳会导致负面的用户体验。

影响报表性能的因素的屏幕截图。

若要优化性能,必须首先确定问题的来源;换句话说,查明报表和语义模型的哪些元素导致了性能问题。 之后,可以采取措施来解决这些问题,从而提高性能。

确定报表性能瓶颈

若要在报表中实现最佳性能,需要创建具有快速运行的查询和度量值的高效语义模型。 当你具有良好基础时,可以分析查询计划和依赖项,然后进行更改以进一步优化性能,从而改进模型。

应查看语义模型中的度量值和查询,以确保使用最高效的方法来获取所需结果。 应首先确定代码中存在的瓶颈。 确定语义模型中的最慢查询时,可以首先关注最大瓶颈,并建立优先级列表来处理其他问题。

分析性能

可以使用 Power BI Desktop 中的性能分析器来帮助了解用户与每个报表元素交互时它们的性能。 例如,可以确定在由用户交互启动时,视觉对象刷新所用的时间。 “性能分析器”可帮助确定导致性能问题的元素,这在故障排除过程中非常有用。

运行“性能分析器”之前,若有确保在分析(测试)中获得最准确的结果,请确保从干净的视觉对象缓存和干净的数据引擎缓存开始。

  • 视觉对象缓存 - 加载视觉对象时,无法在不关闭 Power BI Desktop 并再次打开的情况下清除此视觉对象缓存。 若要避免进行任何缓存,需要使用干净的视觉缓存开始分析。

    若要确保具有干净的视觉缓存,请将空白页添加到 Power BI Desktop (.pbix) 文件,然后在选择该页的情况下,保存并关闭该文件。 重新打开要分析的 Power BI Desktop (.pbix) 文件。 它会在空白页上打开。

  • 数据引擎缓存 - 运行查询时,结果会进行缓存,因此分析的结果会产生误导。 重新运行视觉对象之前,需要清除数据缓存。

    若要清除数据缓存,可以重启 Power BI Desktop 或将 DAX Studio 连接到语义模型,然后调用“清除缓存”。

清除了缓存并在空白页上打开了 Power BI Desktop 文件后,转到“视图”选项卡,选择“性能分析器”选项。

若要开始分析过程,请选择“开始录制”,选择要分析的报表页,并与要度量的报表元素进行交互。 在工作时,你会看到交互的结果显示在“性能分析器”窗格中。 完成后,选择“停止”按钮。

“性能分析器”启动屏幕的屏幕截图。

有关更多详细信息,请参阅使用性能分析器检查报表元素性能

查看结果

可以在“性能分析器”窗格中查看性能测试的结果。 若要按持续时间顺序(最长到最短)查看任务,请右键单击“持续时间(毫秒)”列标题旁的“排序”图标,然后在“降序”顺序中选择“总时间”。

显示如何在分析器中对结果进行排序的屏幕截图。

每个视觉对象的日志信息会显示完成以下类别的任务所花费的时间(持续时间):

  • DAX 查询 - 视觉对象发送查询所花费的时间,以及 Analysis Services 返回结果所花费的时间。

  • 视觉对象显示 - 视觉对象在屏幕上呈现所花费的时间,包括检索 Web 图像或地理编码所花费的时间。

  • 其他 - 视觉对象准备查询、等待其他视觉对象完成或执行其他后台处理任务所花费的时间。 如果此类别显示较长持续视觉,则缩短此持续时间的唯一真正方法是为其他视觉对象优化 DAX 查询,或减少报表中的视觉对象数。

性能分析器结果中的类别的屏幕截图。

分析测试的结果可帮助了解语义模型的行为,并确定需要优化的元素。 可以比较报表中每个元素的持续时间,并确定持续时间较长的元素。 应重点关注这些元素,并调查它们在报表页上加载时间如此之长的原因。

若要更详细地分析查询,可以使用 DAX Studio,它是由其他服务提供的免费开放源代码工具。

解决问题并优化性能

分析的结果会确定需要改进的方面以及进行性能优化的机会。 你可能会发现需要对语义模型中的视觉对象、DAX 查询或其他元素进行改进。 以下信息提供有关要查找的内容以及可进行的更改的指导。

视觉对象

如果将视觉对象确定为导致性能不佳的瓶颈,则应找到一种方法来提高性能,同时尽可能减少对用户体验的影响。

考虑报表页上的视觉对象数;视觉对象更少意味着性能更好。 问问自己视觉对象是否确实需要,以及是否会为最终用户增加价值。 如果答案为否,则应删除该视觉对象。 不要在页上使用多个视觉对象,而是考虑其他方法来提供附加详细信息,例如钻取页和报表页工具提示。

检查每个视觉对象中的字段数。 报表中的视觉对象越多,出现性能问题的可能性便越高。 此外,视觉对象越多,报告便越可能显得拥挤并且不清晰。 视觉对象的上限为 100 个字段(度量值或列),因此具有 100 个以上字段的视觉对象会加载较慢。 问问自己是否确实需要视觉对象中的所有这些数据。 你可能会发现可以减少当前使用的字段数。

DAX 查询

在“性能分析器”窗格中检查结果时,可以看到 Power BI Desktop 引擎计算每个查询所花费的时间(以毫秒为单位)。 好的起点是花费时间超过 120 毫秒的任何 DAX 查询。 在此示例中,你会识别一个具有较长持续时间的特定查询。

性能分析器中持续时间较长的示例的屏幕截图。

“性能分析器”会突出显示潜在问题,但并不指出需要执行哪些操作来改善这些问题。 你可能要进一步调查此度量值花费如此长时间进行处理的原因。 可以使用 DAX Studio 更详细地调查你的查询。

例如,选择“复制查询”以将计算公式复制到剪贴板中,然后将它粘贴到 Dax Studio 中。 随后可以更详细地查看计算步骤。 在此示例中,你将尝试统计订单数量大于或等于五的产品总数。

Count Customers =
CALCULATE (
    DISTINCTCOUNT ( Order[ProductID] ),
    FILTER ( Order, Order[OrderQty] >= 5 )
)

分析查询之后,可以使用自己的知识和经验来确定出现性能问题的位置。 你还可以尝试使用不同的 DAX 函数,以查看它们是否可提高性能。 在下面的示例中,FILTER 函数替换为 KEEPFILTER 函数。 在“性能分析器”中再次运行测试时,持续时间由于使用了 KEEPFILTER 函数而缩短。

Count Customers =
CALCULATE (
    DISTINCTCOUNT ( Order[ProductID] ),
    KEEPFILTERS (Order[OrderQty] >= 5 )
)

在这种情况下,可以将 FILTER 函数替换为 KEEPFILTER 函数,以显著减少此查询的计算持续时间。 进行此更改时,若要检查持续时间是否得到改进,请清除数据缓存,然后重新运行“性能分析器”进程。

性能分析器中持续时间较短的示例的屏幕截图。

语义模型

如果度量值和视觉对象的持续时间显示较低值(换句话说,其持续时间较短),则它们不是产生性能问题的原因。 相反,如果 DAX 查询显示较高持续时间值,则很可能度量值编写得很糟糕或语义模型发生了问题。 此问题可能是由模型中的关系、列或元数据所导致,也可能是“自动日期/时间”选项的状态,如下一部分中所述。

关系

应查看表之间的关系,以确保建立了正确的关系。 检查是否正确配置了关系基数属性。 例如,包含唯一值的单端列可能会错误地配置为多端列。 你将在此模块后面部分了解有关基数如何影响性能的详细信息。

最佳做法是不导入不需要的数据列。 若要避免在 Power Query 编辑器中删除列,应在将数据加载到 Power BI Desktop 中时,尝试在源中处理这些列。 但是,如果无法从源查询中删除冗余列,或者数据已在其原始状态下导入,则始终可以使用 Power Query 编辑器检查每个列。 问问自己是否确实需要每个列,并尝试确定每个列为语义模型带来的好处。 如果发现某列没有增加任何价值,则应将它从语义模型中删除。 例如,假设有一个 ID 列,其中包含数千个唯一行。 你知道不会在关系中使用此特定列,因此不会在报表中使用它。 因此,应将此列视为不需要的列,并承认它在语义模型中浪费空间。

删除不需要的列时,会减小语义模型的大小,进而导致文件大小更小,刷新时间更快。 此外,由于语义模型仅包含相关数据,因此将提高整体报表性能。

有关详细信息,请参阅用于导入建模的数据缩减技术

元数据

元数据是有关其他数据的信息。 Power BI 元数据包含有关语义模型的信息,例如每个列的名称、数据类型和格式、数据库的架构、报表设计、上次修改文件的时间、数据刷新率等。

将数据加载到 Power BI Desktop 中时,良好做法是分析对应的元数据,以便可以在开始生成报表之前确定语义模型的任何任何不一致并规范化数据。 对元数据运行分析将提高语义模型性能,因为分析元数据时,你会确定不需要的列、数据中的错误、不正确的数据类型、要加载的数据量(包含事务或历史数据的大型语义模型需要更长时间进行加载)等。

可以在 Power BI Desktop 中使用 Power Query 编辑器检查原始数据的列、行和值。 随后可以使用可用的工具(如以下屏幕截图中突出显示的工具)进行必要的更改。

查询编辑器“开始”选项卡选项的屏幕截图。

Power Query 选项包括:

  • 不需要的列 - 评估是否需要每个列。 如果一个或多个列不会在报表中使用,因而是不需要的,则应使用“开始”选项卡上的“删除列”选项来删除它们。

  • 不需要的行 - 检查语义模型中的前几行,以查看它们是否为空,或是否包含报表中不需要的数据;如果是这样,则使用“开始”选项卡上的“删除行”选项来删除这些行

  • 数据类型 - 计算列数据类型以确保每种都正确。 如果确定数据类型不正确,请更改它,具体方法是选择列,选择“转换”选项卡上的“数据类型”,然后从列表中选择正确的数据类型。

  • 查询名称 - 检查“查询”窗格中的查询(表)名称。 正如对列标题名称执行的操作一样,应将不常见或无用的查询名称更改为更明显的名称或用户更熟悉的名称。 可以重命名查询,具体方法是右键单击该查询,选择“重命名”,根据需要编辑名称,然后按 Enter。

  • 列详细信息 - Power Query 编辑器具有以下三个数据预览选项,可用于分析与列关联的元数据。 如以下屏幕截图中所示,可以在“视图”选项卡上找到这些选项。

    • 列质量 - 确定列中有效、出现错误或为空的项的百分比。 如果有效百分比不是 100,则应调查原因、更正错误并填充空值。

    • 列分布 - 显示每个列中的值的频率和分布。 在本模块后面部分会进一步调查此内容。

    • 列配置文件 - 显示列统计信息图和列分布图。

列分析选项的屏幕截图。

注意

如果在查看包含 1000 行以上的大型语义模型,并且要分析整个语义模型,则需要更改窗口底部的默认选项。 选择“基于前 1000 行的列分析”>“基于整个数据集的列分析”。

对行进行列分析的屏幕截图。

你应考虑的其他元数据是有关整个语义模型的信息,如文件大小和数据刷新率。 可以在关联 Power BI Desktop (.pbix) 文件中查找此元数据。 加载到 Power BI Desktop 中的数据会由 VertiPaq 存储引擎进行压缩并存储到磁盘。 语义模型的大小会直接影响其性能;较小的语义模型使用较少的资源(内存),并对报表中的视觉对象实现更快的数据刷新、计算和呈现。

自动日期/时间功能

优化性能时要考虑的另一项是 Power BI Desktop 中的“自动日期/时间”选项。 默认情况下,此功能会全局启用,这表示如果满足某些条件,Power BI Desktop 会自动为每个日期列创建隐藏计算表。 新的隐藏表是语义模型中已有表的补充。

通过“自动日期/时间”选项可以在对日历时间段进行筛选、分组和深化时使用时间智能。 建议仅当处理日历时间段时,以及具有的与时间相关的模型要求过于简单时,才使“自动日期/时间”选项保持启用状态。

如果数据源已定义日期维度表,则应使用该表一致地定义组织中的时间,并且应禁用全局“自动日期/时间”选项。 禁用此选项会减小语义模型的大小并减少刷新时间。

可以全局启用/禁用此“自动日期/时间”选项,使它应用于所有 Power BI Desktop 文件,也可以为当前文件启用/禁用此选项,使它仅应用于单个文件。

若要启用/禁用此“自动日期/时间”选项,请转到“文件”>“选项和设置”>“选项”,然后选择“全局”或“当前文件”页。 在任一页上,选择“数据加载”,然后在“时间智能”部分中,根据需要选中或清除复选框。

显示如何配置自动日期时间的屏幕截图。

有关“自动日期/时间”功能的概述和一般简介,请参阅在 Power BI Desktop 中应用自动日期/时间