Power BI 优化指南
本文提供的指南使开发人员和管理员能够生产和维护优化的 Power BI 解决方案。 可以在不同的体系结构层优化解决方案。 这些层包括:
- 数据源
- 数据模型
- 可视化效果(包括仪表板、Power BI 报表和 Power BI 分页报表)
- 环境(包括容量、数据网关和网络)
优化数据模型
数据模型支持整个可视化体验。 数据模型托管在 Power BI 生态系统或外部(使用 DirectQuery 或 Live Connection),在 Power BI 中称为 语义模型。 请务必了解你的选择,并为解决方案选择适当的语义模型类型。 有三种语义模型表存储模式:Import、DirectQuery 和 Composite。 有关详细信息,请参阅 Power BI 服务中的语义模型和 Power BI 服务中的语义模型模式。
有关特定语义模型表存储模式指南,请参阅:
针对报表作者和模型使用者进行优化
语义模型是 Power BI 中所有报表的基础。 语义模型的使用者可以通过连接到已发布的语义模型或连接到数据并创建本地语义模型,在 Power BI Desktop 中创建 Power BI 报表。 语义模型还可用于在浏览器中创建 Power BI 报表、创建 Power BI 浏览、创建分页报表、创建 DAX 查询以及在 Excel 中使用分析在 Excel 中创建报表、连接到 Excel 中的 Power BI 或从报表视觉对象导出数据以及其他许多报表工具。 语义模型作者可以帮助语义模型使用者了解和利用语义模型及其生成模型的方式。
- 名称:语义模型中具有描述性名称的表、列和度量值。 例如,“Store Sales”作为表名比“Table1”更直观。
- 说明:模型中的表、列和度量值可以添加说明,以提供比名称更详细的说明。 不仅说明它们包含的内容,还说明应如何使用它们。
- 隐藏:可以隐藏模型中的表、列和度量值,以仅显示报表中使用的表、列和度量值。 例如,关系列可能是报表不需要的 ID,并且可以隐藏,因为它不应在报表中使用,或者具有聚合列的度量值的数据列可能会被隐藏,以鼓励改用度量值。 隐藏对象以后始终可由模型使用者取消隐藏,因此它们仍将可用,但隐藏可以提供焦点。
- 层次结构:可以创建层次结构,以跨多个列传达层次结构。 例如,日历层次结构可能包含 Year、Month、Day 列和 Product 层次结构可能包含 Category、Sub-Category、Product 列。 右键单击列以创建层次结构。
- 度量值:可以使用度量值聚合语义模型中的数据列,以便跨报表提供一致性。 度量值的范围可以是列的 SUM,到以特定方式组合多个聚合的运行状况索引,或比较跨时间段的聚合,例如本月的日均值与去年同月的每日平均值进行比较。 还可以在 Power BI 搜索和其他功能(如 指标和记分卡)中显示度量值。
- 格式:默认情况下,可以指定列或度量值在视觉对象中的显示方式。 视觉对象中的值可以在视觉对象中进一步自定义。 格式选项包括如果有数千个逗号、小数位数、显示日期的方式等。还可以应用 自定义 或 动态 格式。
- 数据类别:可以指定列 数据类别,例如,它是国家/地区或 Web URL。
这些是 Power BI 语义模型的常见功能,可用于帮助报表作者和模型使用者。 还有其他许多列,例如 计算组、 字段参数、 如果参数以及分组和 装箱列,应评估这些列,以确定它们是否应用了特定的报告需求。
优化可视化效果
Power BI 可视化效果可以是仪表板、Power BI 报表或 Power BI 分页报表。 每种可视化效果都有不同的体系结构,因此具体指南也有所不同。
仪表板
请务必了解,Power BI 维护仪表板磁贴的缓存,但不包括实时报表磁贴和流式处理磁贴。 如果你的语义模型强制实施动态行级别安全性 (RLS),请务必了解性能影响,因为磁贴将以每用户为基础进行缓存。
将实时报表磁贴固定到仪表板后,查询缓存中不会提供这些磁贴。 而是执行类似于报表的操作,动态查询虚拟核心。
顾名思义,与依赖数据源相比,从缓存中检索数据可提供更好、更稳定的性能。 利用此功能的一种方法是将仪表板作为用户的首个登录页。 将经常使用且请求次数较高的视觉对象固定到仪表板。 通过这种方式,仪表板成为有价值的“第一道防线”,可通过容量上的较低负载提供稳定的性能。 用户仍然可以单击查看报表以分析详情。
对于 DirectQuery 和实时连接语义模型,缓存是通过查询数据源进行定期更新的。 默认情况下,它每小时查询一次,但你可以在语义模型设置中配置不同的频率。 每个缓存更新都会将查询发送到基础数据源来更新缓存。 生成的查询数量取决于在依赖于数据源的仪表板上固定的视觉对象数量。 请注意,如果启用了“行级别安全性”,则会为每个不同的安全性上下文生成查询。 例如,假设有两个不同的角色用于对用户进行分类,并且它们具有两个不同的数据视图。 在查询缓存刷新期间,Power BI 会生成两组查询。
Power BI 报表
对于优化 Power BI 报表设计,有一些建议。
注意
当报表基于 DirectQuery 语义模型时,对于其他报表设计优化,请参阅 Power BI Desktop 中的 DirectQuery 模型指南(优化报表设计)。
应用限制性最强的级别
视觉对象需要显示的数据越多,加载视觉对象的速度越慢。 虽然此道理显而易见,但很容易忘记。 例如:假设你有一个大型语义模型。 基于该语义模型,使用表生成报表。 最终用户在此页上使用切片器来获取他们所需的行,通常他们只对某几十行感兴趣。
一个常见的错误是采用表未经筛选的默认视图,即显示全部的一亿多行。 这些行的数据会加载到内存中并在每次刷新时解压缩。 这种处理对存储器产生了巨大的需求。 解决方案:使用“Top N”筛选器减少表显示的最大项数。 可以将最大项数设置为大于用户所需数量,例如 10,000。 结果是最终用户体验不会发生变化,但内存使用会大幅下降。 最重要的是,提高了性能。
对于报表中的所有视觉对象,建议采用以上类似的设计方法。 问问自己,是否需要此视觉对象中的所有数据? 是否有方法可将视觉对象中显示的数据量滤除,而又不会对最终用户体验造成过多影响? 请注意,尤其是表可能成本高昂。
限制报表页上的视觉对象
上述原则同样适用于报表页上添加的视觉对象数量。 强烈建议将特定报表页上的视觉对象数量限制为仅包括必需的视觉对象。 钻取页面和报表页工具提示是不错的方法,它们可提供更多详细信息,而又不会在页面上显示过多视觉对象。
评估自定义视觉对象性能
确保将每个自定义的视觉对象通过其节奏来确保高性能。 Power BI 视觉对象优化欠佳可能会对整个报表的性能产生负面影响。
Power BI 分页报表
通过将最佳做法设计应用到报表的数据检索,可以优化 Power BI 分页报表的设计。 有关详细信息,请参阅分页报表的数据检索指南。
此外,请确保容量有足够的内存分配给分页报表工作负载。
优化环境
通过配置容量设置、调整数据网关大小并减少网络延迟,可以优化 Power BI 环境。
容量设置
使用容量(通过 Power BI Premium (P SKU)、Premum Per User (PPU) 许可证或 Power BI Embedded (A SKU, A4-A6) 提供)时,可以管理容量设置。 有关详细信息,请参阅 Microsoft Fabric 容量许可证和管理 Premium 容量。
重要
有时本文指的是 Power BI Premium 或其容量订阅 (P SKU)。 请注意,Microsoft 目前正在合并购买选项并停用 Power BI Premium Per Capacity SKU。 新客户和现有客户应考虑改为购买 Fabric 容量订阅 (F SKU)。
有关详细信息,请参阅 Power BI Premium 许可即将进行的重要更新和 Power BI Premium 常见问题解答。
调整网关大小
当 Power BI 必须访问无法直接通过 Internet 访问的数据时,就需要网关。 可以将本地数据网关安装在本地服务器上,也可以安装在 VM 托管的基础结构即服务 (IaaS) 上。
若要了解网关工作负载和调整大小的建议,请参阅本地数据网关大小调整。
网络延迟
网络延迟可增加请求到达 Power BI 服务以及传输响应所需的时间,从而影响报表的性能。 Power BI 中的租户被分配到一个特定区域。
提示
要确定租户的位置,请参阅我的 Power BI 租户位于何处?
当来自租户的用户访问 Power BI 服务时,他们的请求将始终被路由到此区域。 请求到达 Power BI 服务后,服务就可以发送其他请求(例如,到基础数据源或数据网关的请求),这也会受到网络延迟的影响。
诸如 Azure 速度测试之类的工具可提供客户端与 Azure 区域之间的网络延迟的指示。 一般来说,为了尽量降低网络延迟的影响,请争取使数据源、网关和 Power BI 容量尽可能地靠近。 它们最好位于同一区域中。 如果网络延迟成为一个问题,请尝试将网关和数据源放在云托管的虚拟机内,以查找与 Power BI 容量更近的网关和数据源。
监视性能
可以监视性能以确定瓶颈。 应重点针对速度缓慢的查询或报表视觉对象进行持续优化。 监视可以在设计时在 Power BI Desktop 中完成,也可以在 Power BI Premium 容量中的生产工作负载上完成。 有关详细信息,请参阅在 Power BI 中监视报表性能。
相关内容
有关本文的详细信息,请参阅以下资源:
- Power BI 指南
- 监视报表性能
- Fabric 采用路线图
- 是否有任何问题? 尝试咨询 Power BI 社区
- 建议? 提出改进 Power BI 的想法