使用表级别存储优化 DirectQuery 模型

已完成

DirectQuery 是将数据导入 Power BI Desktop 的一种方法。 DirectQuery 方法是直接连接到 Power BI Desktop 内部源存储库的数据。 这是将数据导入 Power BI Desktop 的替代方法。

使用 DirectQuery 方法时,整体用户体验在很大程度上取决于底层数据源的性能。 查询响应时间缓慢会导致用户体验不佳,极端情况下还可能导致查询超时。此外,同时打开报表的用户数量也会影响数据源承受的负载。 例如,如果报表中包含 20 个视觉对象,并且有 10 个用户在使用报表,则数据源上会存在 200 个或更多查询,因为每个视觉对象都将发出一个或多个查询。

遗憾的是,Power BI 模型的性能不仅会受到底层数据源性能的影响,还会受到其他不可控因素的影响,例如:

  • 网络延迟:网络速度越快,返回数据的速度就越快。

  • 数据源服务器的性能以及该服务器上的其他工作负载数量。 例如,数百人出于不同原因使用同一服务器时,会对服务器刷新造成很大影响。

因此,使用 DirectQuery 会对模型性能的质量带来一定的风险。 要在此情况下优化性能,必须能够控制(或访问)源数据库。

有关详细信息,请参阅 Power BI Desktop 中的 DirectQuery 模型指导

使用 DirectQuery 的影响

最佳做法是将数据导入 Power BI Desktop,但您的组织可能出于以下某种原因(或者说 DirectQuery 的优点)而需要使用 DirectQuery 数据连接模式:

  • 它适用于数据频繁更改并需要准实时报告的情况。

  • 它无需预先聚合即可处理大型数据。

  • 它应用数据主权限制来符合法律要求。

  • 它可以与包含 SAP Business Warehouse (BW) 等度量值的多维数据源一起使用。

如果您的组织需要使用 DirectQuery,您应该清楚地了解其在 Power BI Desktop 中的行为并注意其局限性。 这样,您才能占据有利位置,采取措施尽可能优化 DirectQuery 模型。

DirectQuery 连接的行为

当您使用 DirectQuery 连接 Power BI Desktop 中的数据时,该连接的行为方式如下:

  • 当首次使用 Power BI Desktop 中的获取数据功能时,您将需要选择源。 如果连接到关系源,则可以选择一组表,每个表会定义一个以逻辑方式返回一组数据的查询。 如果选择多维源(如 SAP BW),则只能选择该源。

  • 当加载数据时,任何数据都不会导入到 Power BI Desktop 中,而只会加载架构。 当在 Power BI Desktop 内生成视觉对象时,查询将发送到底层源以检索必要的数据。 刷新视觉对象所花的时间取决于底层数据源的性能。

  • 如果对底层数据进行更改,由于高速缓存原因,这些更改不会立即反映在 Power BI 现有的视觉对象中。 需要执行刷新才能看到这些更改。 对于每个视觉对象,都有相应的查询存在,并且这些视觉对象会相应地更新。

  • 当将报表发布到 Power BI 服务时,它将在 Power BI 服务中产生一个与导入相同的语义模型。 但是,该语义模型不包含任何数据。

  • 当在 Power BI 服务中打开现有报表或构建新报表时,系统将再次查询底层源以检索必要的数据。 根据原始源的位置,可能必须配置本地数据网关。

  • 可以将视觉对象或整个报表页固定为仪表板磁贴。 磁贴按计划(例如每小时)自动刷新。 可以控制此刷新的频率,以满足要求。 打开仪表板时,磁贴会反映上次刷新时的数据,可能不包含对底层数据源进行的最新更改。 始终可以刷新打开的仪表板,以确保它是最新的。

DirectQuery 连接的局限性

使用 DirectQuery 可能会产生负面影响。 其局限性因所使用的特定数据源而异。 应考虑以下几点:

  • 性能 - 如前所述,整体用户体验在很大程度上取决于底层数据源的性能。

  • 安全性 - 如果在 DirectQuery 模型中使用多个数据源,请务必了解数据在底层数据源之间的移动方式以及相关的安全影响。 您还应确定安全规则是否适用于底层源中的数据,因为在 Power BI 中,每个用户都可以看到该数据。

  • 数据转换 - 与导入的数据相比,来自 DirectQuery 的数据在使用 Power Query 编辑器应用数据转换技术时存在一些局限性。 例如,如果连接到 OLAP 源(如 SAP BW),则无法进行任何转换;整个外部模型都取自数据源。 如果要对数据进行任何转换,则需要在底层数据源中执行此操作。

  • 建模 - 使用 DirectQuery 时,导入数据所具有的某些建模功能会不可用,或受到限制。

  • 报告 - 对于 DirectQuery 模型,也支持导入数据所具有的几乎所有报告功能,前提是底层源提供了适当的性能级别。 不过,在 Power BI 服务中发布报表时不支持“快速见解”和“问答”功能。 此外,使用 Excel 中的浏览功能可能会导致性能较差。

有关使用 DirectQuery 的局限性的更多详细信息,请参阅使用 DirectQuery 的影响

现在,您已经简单了解了 DirectQuery 的工作原理及其局限性,可以采取措施来提高性能。

优化性能

继续以 Tailwind Traders 场景为例,在审查语义模型时,您发现查询使用了 DirectQuery 将 Power BI Desktop 连接到源数据。 使用 DirectQuery 是用户遇到报表性能不佳问题的原因。 加载报表页花费的时间太长,并且在进行某些选择时表刷新速度较慢。 需要采取措施来优化 DirectQuery 模型的性能。

可以检查要发送到底层源的查询,并尝试确定查询性能不佳的原因。 然后,可以在 Power BI Desktop 和底层数据源中做出更改,以优化整体性能。

在 Power BI Desktop 中优化数据

尽可能优化数据源后,可以在 Power BI Desktop 中使用性能分析器来采取进一步措施,即隔离查询以验证查询计划。

可以分析发送到底层源的查询的持续时间,以确定需要较长时间进行加载的查询。 换句话说,可以确定瓶颈存在于何处。

优化 DirectQuery 模型时,无需使用特殊方法;可以应用对导入数据使用的相同优化技术来调整来自 DirectQuery 源的数据。 例如,可以减少报表页上的视觉对象数,或减少视觉对象中使用的字段数。 还可以删除不需要的列和行。

有关如何优化 DirectQuery 查询的更多详细指导,请参阅:Power BI Desktop 中的 DirectQuery 模型指导成功使用 DirectQuery 的指导

优化底层数据源(连接的数据库)

第一站是数据源。 您需要尽可能地调整源数据库,因为您对提升该源数据库性能所做的任何改进都会相应地提升 Power BI DirectQuery 的性能。 在该数据库中执行的操作将发挥很大的积极作用。

请考虑使用以下适用于大多数情况的标准数据库做法:

  • 避免使用复杂的计算列,因为计算表达式会嵌入到源查询中。 将表达式推送回源会更高效,因为这样可避免向下推送。 还可以考虑将代理键列添加到维度类型表中。

  • 检查索引并验证当前索引编制是否正确。 如果需要创建新索引,请确保它们是合适的。

请参阅数据源的指导文档并实施其性能建议。

自定义查询缩减选项

Power BI Desktop 为您提供发送更少的查询并禁用特定交互的选项,如果生成的查询需要很长时间才能运行,则会导致体验不佳。 应用这些选项可防止查询持续命中数据源,从而改进性能。

在本示例中,您会编辑默认设置,以便将可用的数据缩减选项应用于模型。 您可以选择文件 > 选项和设置 > 选项,向下滚动页面,然后选择查询缩减选项。

可使用以下查询缩减选项:

  • 减少由以下对象发送的查询数 - 默认情况下,每个视觉对象都与每个其他视觉对象交互。 选中此复选框会禁用这种默认交互。 随后,可以选择使用编辑交互功能来选择相互交互的视觉对象。

  • 切片器 - 默认情况下,立即应用切片器更改选项处于选中状态。 要强制让报表用户手动应用切片器更改,请选择向每个切片器添加应用按钮,以在准备就绪时应用更改选项。

  • 筛选器 - 默认情况下,立即应用基本筛选器更改选项处于选中状态。 要强制让报表用户手动应用筛选器更改,请选择以下替代选项之一:

    • 向所有基本筛选器添加应用按钮,以在准备就绪时应用更改

    • 将单个应用按钮添加到筛选器窗格,以一次性应用更改(预览)