本文介绍如何通过获取包含较少图表的可视化视觉对象,优化由于具有大量卡片图的慢速 Power BI 报表。
在 Power BI 报表中,每个可视化视觉对象都必须完成许多计算才能呈现结果。显示数据的可视化视觉对象必须生成一个或多个 DAX 查询,执行这些查询会增加等待时间,特别是当多个用户同时访问报表时还会增加服务器的工作量。为了提高报告的性能,最好的方式是减少在报告中可视化视觉对象的数量。
当用户位于报告的单个页面上时,Power BI 仅计算报表活动页面的可视化视觉对象。当用户将切换到其他页面时,其他页面中的视觉效果数量会对用户体验产生影响。
了每一张卡片视觉效果,代表着不同的销售度量值。该报告包含 22 张卡片图,每个图由不同的 DAX 计算。
在功能非常强大的 Power BI 上执行的页面渲染时间为 1.5 秒。通过性能分析器窗格,可以看到确切的计算时间。首先,启用「性能分析器」窗格(①),单击「开始记录」(②),单击「刷新视觉对象」(③),按「总时间」排序(降序排列)(④)。
通过再次单击刷新视觉效果,我们可以看到不同的排序顺序。在此示例中,在「性能分析器」窗格提供的列表中,展开 Accessories,排列最后的「其他」视觉对象就能看到页面中最慢的视觉效果,可以看到大部分时间都用在「其他」项上,
你也许会好奇「其他」是什么。其实「其他」意味着该视觉对象必须等待其他任务完成才能执行 DAX 查询。由于页包含 22 个视觉效果,因此某些视觉对象必须等待其他视觉对象完成其任务,然后才能执行任何操作。
那如何提高性能?在此我们使用一个能够产生许多相同的卡片图的外置视觉对象。例如,通过使用 OKVIZ 的 Cards with States,可以创建一张卡片图网格,其中对列的每个值重复测量。此自定义视觉效果可在 Power BI 的 AppSource 中添加,所有功能都是免费的,
我们以计算每一个产品子类别的销售额为例,将 Measures(度量)设为「销售总额」,将 Category(类别)设为 ProductSubCategory(产品子类别)
如果我们在性能分析器中重复执行「刷新视觉对象」操作,则会看到最慢的视觉对象在 228 毫秒内刷新,并且 DAX 查询现在仅生成 2 个视觉效果,见图 7.2.77。
因为我们从报表中删除了 20 个视觉效果,所以大大减少了运算量,且页面刷新时间从 1.5 秒降至 0.2 秒,无须更改数据模型即可减少 86% 的运行时间。