实现增量刷新和实时数据解决方案时,有两个阶段:第一个阶段是在 Power BI Desktop 中配置参数、筛选和定义策略,第二个阶段是初始语义模型刷新作以及服务中的后续刷新。 本文分别讨论每个阶段的故障排除。
在 Power BI 服务中对表进行分区后,请务必记住,使用 DirectQuery 获取实时数据的增量刷新表现在以混合模式运行,这意味着它们同时在导入和 DirectQuery 模式下运行。 与此类增量刷新混合表有关系的任何表都必须使用双模式,以便可以在导入和 DirectQuery 模式下使用它们,而不会造成性能损失。 此外,报表可视化组件可能会缓存结果,以避免重新请求数据源,这将阻止表格实时获取最新数据更新。 最后的故障排除部分介绍了这些混合模式问题。
在对增量刷新和实时数据进行故障排除之前,请务必在配置增量刷新和实时数据中查看模型的增量刷新和实时数据以及分步信息。
在 Power BI Desktop 中配置
配置增量刷新和实时数据时发生的大多数问题都与查询折叠有关。 如文档中所述的模型增量刷新概述 - 受支持的数据源,数据源必须支持查询折叠。
问题:加载数据需要太长的时间
在 Power Query 编辑器中选择 “应用”后,加载数据需要花费过多的时间和计算机资源。 有几个潜在原因。
原因:数据类型不匹配
此问题可能是由于数据类型不匹配引起的,Date/Time 是参数 RangeStart 和 RangeEnd 所需的数据类型,但应用筛选器的表日期列不是 Date/Time 数据类型,或反之。 参数数据类型和筛选的数据列必须是 Date/Time 数据类型,格式必须相同。 如果没有,则无法折叠查询。
解决方案:验证数据类型
验证增量刷新表的日期/时间列是否为 Date/Time 数据类型。 如果表不包含 Date/Time 数据类型列,而是使用整数数据类型,可以创建一个函数,将 RangeStart 和 RangeEnd 参数中的日期/时间值转换为数据源表的整数代理键。 若要了解详细信息,请参阅 配置增量刷新 - 将 DateTime 转换为整数。
原因:数据源不支持查询折叠
如 模型增量刷新和实时数据中所述 - 要求,增量刷新专为支持查询折叠的数据源而设计。 在将数据源查询发布到服务之前,请确保它们在 Power BI Desktop 中被正确合并,否则查询合并的问题可能会显著加重。 在增量刷新策略中包括实时数据时,此方法尤其重要,因为实时 DirectQuery 分区需要查询折叠。
解决方案:验证和测试查询
在大多数情况下,增量刷新策略对话框会显示一条警告,提示针对数据源执行的查询是否不支持查询折叠。 但是,在某些情况下,可能需要进一步确保查询折叠成为可能。 如果可能,请使用 SQL 探查器等工具监视要传递给数据源的查询。 一个基于 RangeStart 和 RangeEnd 的筛选器查询,必须在单个查询中执行。
还可以在参数中RangeStartRangeEnd指定短日期/时间段,其中包含不超过几千行。 如果将筛选后的数据从数据源加载到模型需要很长时间并且处理过程密集,则可能意味着查询不能被折叠。
如果确定查询未折叠,请参阅 Power BI Desktop 中的查询折叠指南 和 Power Query 查询折叠,以帮助识别可能阻止查询折叠的因素,以及查询如何折叠或数据源是否能够支持查询折叠。
服务中的语义模型刷新
在服务中对增量刷新问题进行故障排除时,具体步骤取决于您的模型已发布到的容量类型。 高级容量上的语义模型支持使用 SQL Server Management Studio(SSMS)等工具来查看和选择性地刷新单个分区。 另一方面,Power BI Pro 模型不提供通过 XMLA 终结点进行工具访问,因此对增量刷新问题进行问题排查可能需要更多反复试验。
问题:初始加载刷新超时
共享容量上 Power BI Pro 模型的计划刷新时间限制为两小时。 对于高级容量中的模型,此时间限制增加到 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(SQL Server Management Studio)从更改位置刷新到当前刷新分区的所有分区,从而保持关系一侧的唯一性。
问题:数据被截断
原因:数据源查询限制已超出
某些数据源(例如 Azure 数据资源管理器、Log Analytics 和 Application Insights)对可为外部查询返回的数据限制为 64 MB(压缩)。 Azure 数据资源管理器可能会返回显式错误,但对于 Log Analytics 和 Application Insights,返回的数据将被截断。
解决方案:指定较小的刷新和存储周期
在策略中指定较小的刷新和存储周期。 例如,如果指定了一年的刷新期,并且返回查询错误或数据被截断,请尝试将刷新期设置为 12 个月。 你希望确保基于刷新和存储期的当前刷新分区或任何历史分区的查询不会返回超过 64 MB 的数据。
问题:由于分区键冲突,刷新失败
原因:更新数据源的日期列中的日期
日期列上的筛选器用于将数据动态分区为 Power BI 服务中的时间段范围。 增量刷新不旨在支持在源系统中更新筛选日期列的情况。 更新被解释为插入和删除,而不是实际更新。 如果删除发生在历史范围而不是增量范围中,则不会被检测到,这可能会导致数据刷新失败,因为分区键冲突。
服务中的混合模式
当 Power BI 使用实时数据应用增量刷新策略时,它会将增量刷新表转换为在导入和 DirectQuery 模式下运行的混合表。 请注意示例表的以下分区列表末尾的 DirectQuery 分区。 DirectQuery 分区的存在对查询此表的相关表和报表视觉对象具有影响。
问题:查询性能不佳
原因:相关表格未处于双重模式下
在导入模式和 DirectQuery 模式下运行的混合表要求任何相关表要以双模式运行,以便根据提交到 Power BI 模型的查询上下文,它们可以充当已缓存或未缓存的表。 双模式使 Power BI 能够减少模型中有限关系的数量,并生成高效的数据源查询,以确保良好的性能。 受限关系无法被推送至数据源,导致 Power BI 需要检索比必要数据量更多的数据。 由于“Dual”表可以作为“DirectQuery”或“Import”表发挥作用,因此避免了这种情况。
解决方案:将相关表转换为双模式
配置增量刷新策略时,Power BI Desktop 提醒你在选择 DirectQuery(仅限高级)实时获取最新数据时,将任何相关表切换到双模式。 此外,请确保查看模型视图中的所有现有表关系。
当前在 DirectQuery 模式下运行的表很容易切换到双模式。 在表属性的“高级”下,从“存储模式”列表框中选择“双”。 但是,当前在导入模式下运行的表需要手动工作。 双表的功能约束与 DirectQuery 表相同。 因此,Power BI Desktop 无法转换导入表,因为它们可能依赖于双模式中不可用的其他功能。 必须在 DirectQuery 模式下手动重新创建这些表,然后将其转换为双模式。 若要了解详细信息,请参阅 Power BI Desktop 中的管理存储模式。
问题:报表视觉对象不显示最新数据
原因:Power BI 缓存查询结果可提高性能并减少后端负载
默认情况下,Power BI 会缓存查询结果,以便即使报表视觉对象基于 DirectQuery,也可以快速处理报表视觉对象的查询。 避免不必要的数据源查询可提高性能并减少数据源负载,但也可能意味着源的最新数据更改不包括在结果中。
解决方案:配置自动页面刷新
若要继续从源中提取最新数据更改,请在 Power BI 服务中为报表配置自动页面刷新。 可以按固定间隔执行自动页面刷新,例如 5 秒或 10 分钟。 当达到该特定间隔时,该页中的所有视觉对象都会向数据源发送更新查询并相应地进行更新。 或者,可以根据检测到的数据变化来刷新页面上的视觉效果。 此方法需要一个更改检测度量,Power BI 然后使用它来轮询数据源以检测更改。 更改检测仅在属于高级容量的工作区中受支持。 有关详细信息,请参阅 Power BI 中的自动页面刷新。