对增量刷新和实时数据进行故障排除

在实现增量刷新和实时数据解决方案时有两个阶段:第一个阶段是在 Power BI Desktop 中配置参数、筛选和定义策略,第二个阶段是在服务中执行初始语义模型刷新操作和后续刷新。 本文将分别介绍针对每个阶段的故障排除。

在 Power BI 服务中对表进行分区后,请务必记住,已增量刷新且使用 DirectQuery 获取实时数据的表现在正在混合模式下运行,这意味着它们同时在导入模式和 DirectQuery 模式下运行。 与这种增量刷新的混合表有关系的任何表都必须使用双重模式,这样它们就可以在导入和 DirectQuery 模式下使用,而不影响性能。 此外,报表视觉对象可能会缓存结果以避免将查询发送回数据源,这会阻止表实时提取最新的数据更新。 最后的故障排除部分介绍了这些混合模式问题。

在对增量刷新和实时数据进行故障排除之前,请务必查看语义模型的增量刷新和实时数据配置增量刷新和实时数据中的分步信息。

在 Power BI Desktop 中配置

配置增量刷新和实时数据时出现的大多数问题都与查询折叠有关。 如模型增量刷新概述 - 支持的数据源中所述,数据源必须支持查询折叠。

问题:加载数据的时间太长

在 Power Query 编辑器中,选择“应用”后,加载数据将占用大量的时间和计算机资源。 有几个可能的原因。

原因:数据类型不一致

此问题可能是由于数据类型不一致,RangeStartRangeEnd 参数所需的数据类型是 Date/Time,但应用筛选器的表日期列不是 Date/Time 数据类型,反之亦然。 参数数据类型和筛选过的数据列必须是 Date/Time 数据类型,且格式必须相同。 如果不是,则查询不能被折叠。

解决方案:验证数据类型

验证增量刷新表的日期/时间列的数据类型是否为 Date/Time。 如果表中不包含数据类型为 Date/Time 的列,而是使用整数数据类型,则可以创建一个函数来转换 RangeStartRangeEnd 参数中的日期/时间值,以匹配数据源表的整数代理键。 若要了解详细信息,请参阅配置增量刷新 - 将日期/时间转换为整数

原因:数据源不支持查询折叠

模型的增量刷新和实时数据 - 要求中所述,增量刷新适用于支持查询折叠的数据源。 确保数据源查询在发布到服务之前,在 Power BI Desktop 中进行折叠,这种情况下的查询折叠问题更加复杂。 当在增量刷新策略中包含实时数据时,此方法尤其重要,因为实时 DirectQuery 分区需要进行查询折叠。

解决方案:验证和测试查询

在大多数情况下,“增量刷新策略”对话框中会显示一条警告,指示对数据源执行的查询是否不支持查询折叠。 但是,在某些情况下,可能需要进一步确保可以进行查询折叠。 如果可能的话,请使用 SQL 事件探查器之类的工具监视传递给数据源的查询。 具有基于 RangeStartRangeEnd 的筛选器的查询必须在单个查询中执行。

你还可以在 RangeStartRangeEnd 参数中指定一个短日期/时间周期,其中包含不超过几千行。 如果将已筛选数据从数据源加载到模型需要很长时间,且使用大量进程,则很可能意味着查询未折叠。

如果确定查询未折叠,请参阅 Power BI Desktop 中的查询折叠指南Power Query 查询折叠,了解如何确定阻止查询折叠的原因,以及数据源如何或是否支持查询折叠。

服务中的语义模型刷新

排查服务中增量刷新的问题取决于模型发布到的目标容量类型。 高级容量上的语义模型支持使用 SQL Server Management Studio (SSMS) 等工具查看和选择性地刷新单个分区。 另一方面,Power BI Pro 模型不提供通过 XMLA 终结点进行的工具访问,因此排查增量刷新问题可能需要更多的尝试和错误。

问题:初始刷新超时

共享容量上的 Power BI Pro 模型的计划刷新时间限制为 2 小时。 对于高级容量中的模型,此时间限制增加到 5 小时。 数据源系统可能还会施加查询返回大小限制或查询超时。

原因:数据源查询未折叠

通常在发布到服务之前,在 Power BI Desktop 中确定查询折叠问题,可能是模型刷新查询没有被折叠,从而导致刷新时间过长,查询糅合引擎资源利用率过高。 发生此情况是因为为模型中的每个分区创建了一个查询。 如果查询未折叠,并且未在数据源中筛选数据,引擎将尝试筛选数据。

解决方案:验证查询折叠

在数据源中使用跟踪工具确定为每个分区传递的查询是包含基于 RangeStart 和 RangeEnd 参数的筛选器的单个查询。 如果不是,则在将少量筛选过的数据加载到模型时,验证 Power BI Desktop 模型中是否发生了查询折叠。 如果没有,请先在模型中进行修复,然后(通过使用 XMLA 终结点)对模型执行仅元数据更新,或者,如果是共享容量上的 Power BI Pro 模型,请在服务中删除不完整模型,重新发布,然后再次尝试初始刷新操作。

如果确定查询未被折叠,请参阅 Power BI Desktop 中的查询折叠指南Power Query 查询折叠,了解如何确定可能阻止查询折叠的原因。

原因:加载到分区的数据太大

解决方案:减小模型大小

在许多情况下,超时的原因是必须查询并加载到模型分区中的数据量超过了容量施加的时间限制。 减小数据集大小或降低模型复杂性,或者考虑将模型拆分为更小的部分。

解决方案:启用大型模型存储格式

对于发布到高级容量的模型,如果模型会超过 1 GB 或更大,则可以在服务中执行第一次刷新操作之前,启用较大的模型存储格式,从而提高刷新操作的性能并确保模型不会超出大小限制。 若要了解详细信息,请参阅 Power BI Premium 中的大型模型

解决方案:启动初始刷新

对于发布到高级容量的模型,可以启动初始刷新操作。 通过启动,服务可以为模型创建表和分区对象,但不会将历史数据加载到任何分区中并进行处理。 若要了解详细信息,请参阅高级增量刷新 - 防止初始完全刷新超时

原因:数据源查询超时

查询可能受数据源默认时间限制的限制。

解决方案:覆盖查询表达式中的时间限制

许多数据源允许在查询表达式中覆盖时间限制。 若要了解详细信息,请参阅模型增量刷新 - 时间限制

问题:因存在重复的值导致刷新失败

原因:发布日期已更改

通过执行刷新操作,只有在数据源中发生更改的数据才会在模型中被刷新。 由于数据是按日期划分的,建议不要更改发布(事务)日期。

如果某个日期被意外更改,可能会出现两个问题:用户注意到历史数据中一些总数发生了(不应发生的)变化,或者在刷新过程中返回了错误,指示唯一值事实上不唯一。 对于后面一个问题,如果配置了增量刷新的表作为 1 方与另一个表具有 1:N 关系,并且应具有唯一值,就会发生这种情况。 如果(特定 ID 的)数据发生变化,该 ID 随后将出现在另一个分区中,引擎将检测到该值不唯一。

解决方案:刷新特定分区

如果有业务需要通过日期更改一些过去的数据,则可能的解决方案是使用 SSMS 刷新从更改点到当前刷新分区的所有分区,从而使关系的 1 方保持唯一。

问题:数据被截断

原因:已超过数据源查询限制

某些数据源(如 Azure 数据资源管理器、Log Analytics 和 Application Insights)对外部查询可返回的数据有 64 MB 的限制(压缩后)。 Azure 数据资源管理器可能会返回显式错误,但对于 Log Analytics 和 Application Insights 等其他程序,返回的数据将被截断。

解决方案:指定较小的刷新和存储周期

在策略中指定较小的刷新和存储周期。 例如,如果指定了 1 年的刷新周期,但返回了查询错误或返回的数据被截断,则请尝试使用 12 个月的刷新周期。 你需要确保对当前刷新分区或基于刷新和存储周期的任何历史分区的查询返回的数据不超过 64 MB。

问题:分区键冲突导致刷新失败

原因:数据源日期列中的日期已更新

对日期列的筛选用于动态地将数据划分为 Power BI 服务中的多个周期范围。 增量刷新不支持源系统中筛选后的日期列已更新的情况。 更新将体现为插入和删除,而非实际更新。 如果删除发生在历史范围内,而不是增量范围内,则不会被拾取,因为可能会因分区键冲突而导致数据刷新失败。

服务中的混合模式(预览版)

当 Power BI 应用包含实时数据的增量刷新策略时,会将增量刷新的表转换为同时在导入模式和 DirectQuery 模式下运行的混合表。 请注意示例表的以下分区列表末尾的 DirectQuery 分区。 是否存在 DirectQuery 分区将对相关表以及查询此表的报表视觉对象产生影响。

混合表的屏幕截图。

问题:查询性能不佳

同时在导入模式和 DirectQuery 模式下运行的混合表要求任何相关的表在双重模式下运行,以便它们可以充当缓存表,也可以充当未缓存表,具体视提交到 Power BI 模型的查询的上下文而定。 双重模式允许 Power BI 减少模型中的有限关系数并生成高效的数据源查询,以确保良好的性能。 不能将有限的关系推送到要求 Power BI 检索的数据量超出必需量的数据源。 由于“双重”表可以充当“DirectQuery”或“导入”表,因此可以避免这种情况。

在配置增量刷新策略时,如果选择“使用 DirectQuery 实时获取最新数据(仅限高级版)”,则 Power BI Desktop 会提醒你将任何相关表切换到双重模式。 此外,请确保在模型视图中查看所有现有的表关系。

显示如何将相关表转换为双重模式的屏幕截图。

当前在 DirectQuery 模式下运行的表可以轻松地切换到双重模式。 在表属性中的“高级”下,从“存储模式”列表框中选择“双重”。 但当前在导入模式下运行的表需要手动操作。 “双”模式表与“DirectQuery”模式表的功能约束相同。 因此,Power BI Desktop 无法转换导入表,因为这些表可能依赖于双重模式下未提供的其他功能。 必须在 DirectQuery 模式下手动重新创建这些表,然后将它们转换为双重模式。 有关详细信息,请参阅管理 Power BI Desktop 中的存储模式

问题:报表视觉对象不显示最新数据

原因:Power BI 缓存查询结果可以提高性能并减少后端负载

默认情况下,Power BI 会缓存查询结果,以便可以快速处理报表视觉对象的查询,即使它们基于 DirectQuery 也是如此。 避免不必要的数据源查询可以提高性能并减少数据源的负载,但这也可能意味着源中的最新数据更改不会包含在结果中。

解决方案:配置自动页面刷新

为了不断从源中提取最新的数据更改,请为 Power BI 服务中的报表配置自动页面刷新。 可按固定间隔(如 5 秒或 10 分钟)执行自动页面刷新。 当达到该特定间隔时,该页中的所有视觉对象都会向数据源发送更新查询并相应地进行更新。 或者,可以根据检测数据中的更改来刷新页面上的视觉对象。 此方法需要一个更改检测度量值,然后 Power BI 用它来轮询数据源的更改。 只有在作为高级容量一部分的工作区中才支持更改检测。 有关详细信息,请参阅 Power BI 中的自动页面刷新