将增量刷新与数据流配合使用

使用数据流,你可以将大量数据引入到 Power BI 或组织提供的存储中。 但是,在某些情况下,在每次刷新中更新源数据的完整副本并不可行。 增量刷新是一个很好的替代方法,这种方法可为数据流提供以下优势:

  • 刷新速度更快:只需要刷新更改的数据。 例如,仅刷新 10 年数据流的最后五天。
  • 刷新更可靠:例如,无需长时间与不稳定的源系统保持连接。
  • 降低资源消耗:要刷新的数据量减少,这降低了内存和其他资源的整体消耗。

增量刷新在 Power BI 中创建的数据流和 Power Apps 中创建的数据流中可用。 本文显示了 Power BI 中的屏幕,但这些说明适用于在 Power BI 或 Power Apps 中创建的数据流。

注意

在分析数据流中的表的架构发生更改时,将进行完全刷新,以确保所有生成的数据都与新架构匹配。 因此,任何增量存储的数据都将刷新,在某些情况下,如果源系统不保留历史数据,则这些增量存储的数据会丢失。

数据流的增量刷新。

如果要在 Power BI 中创建的数据流中使用增量刷新,则要求数据流驻留在高级容量的工作区中。 Power Apps 中的增量刷新需要 Power Apps 每应用或每用户计划,并且仅适用于以 Azure Data Lake Storage 为目标的数据流。

在 Power BI 或 Power Apps 中,使用增量刷新要求引入到数据流中的源数据具有一个增量刷新可以筛选的 DateTime 字段。

为数据流配置增量刷新

数据流可以包含多个表。 增量刷新在表级别设置,并允许一个数据流同时保存完全刷新的表和增量刷新的表。

若要设置增量刷新的表,请首先像配置任何其他表一样配置此表。

创建并保存数据流后,请在表视图中选择增量刷新增量刷新。,如下图所示。

数据流的增量刷新图标。

在选择此图标时,将显示增量刷新设置窗口。 启用增量刷新。

数据流的增量刷新。

以下列表说明了增量刷新设置窗口中的设置。

  • 增量刷新打开/关闭切换开关:为表打开或关闭增量刷新策略。

  • 筛选字段下拉列表:选择为进行增量刷新而对表进行筛选所依据的查询字段。 此字段仅包含 DateTime 字段。 如果你的表不包含 DateTime 字段,则无法使用增量刷新。

    重要

    为增量刷新筛选器选择未更改的日期字段。 如果字段值发生更改(例如,使用日期修改字段),这可能会导致因数据中的重复值引起刷新失败。

  • 存储/刷新以前的行:上图中的示例说明了接下来的几个设置。

    在此示例中,我们定义了一个刷新策略,用于存储总共 5 年的数据,并增量刷新 10 天的数据。 假设每天都刷新表,则对每次刷新操作执行以下操作:

    • 添加新的一天的数据。

    • 刷新 10 天,截止到当前日期。

    • 删除当前日期之前五年的日历年度。 例如,如果当前日期为 2019 年 1 月 1 日,则删除 2013 年。

    第一次数据流刷新可能需要一段时间才能导入所有五年的数据,但后续刷新可能很快就能完成。

  • 检测数据更改:增量刷新 10 天远比 5 年的完整刷新更有效,但你可能能够做得更好。 选中检测数据更改复选框时,你可以选择日期/时间列,以仅标识和刷新数据发生更改的日期。 这假定源系统中存在此类列,这通常用于审核目的。 将针对增量范围中的每个周期评估此列的最大值。 如果该数据自上次刷新以来未更改,则无需刷新此期间。 在此示例中,这或许可能会进一步将增量刷新的天数从 10 天减少到 2 天。

    提示

    当前设计要求将用于检测数据更改的列保留并缓存到内存中。 你可能需要考虑使用以下一种技术来减少基数和内存消耗:

    • 刷新时使用 Power Query 函数仅保留此列的最大值。
    • 按照你的刷新频率要求将精度降低到可接受的级别。
  • 仅刷新整个期间:假设刷新计划每天凌晨 4:00 运行。 如果在当天的前 4 小时内源系统中显示数据,则你可能不需要考虑这些数据。 一些业务指标(如石油和天然气行业中的每日桶数)根据部分天数来考虑并不实际也不明智。

    另一个适合仅刷新整个期间的示例是刷新财务系统的数据。 假设有一个财务系统,其中上个月的数据在当月的第 12 个日历日获得批准。 你可以将增量范围设置为一个月,并将刷新计划在当月第 12 天运行。 选择此选项后,系统将在 2 月 12 日刷新 1 月的数据(最近的整个每月期间)。

注意

数据流增量刷新根据以下逻辑确定日期:如果计划了刷新,则数据流增量刷新会使用刷新策略中定义的时区。 如果不存在刷新计划,则增量刷新将使用运行刷新的计算机中的时间。

配置增量刷新后,数据流会自动更改查询以包括按日期筛选。 如果数据流是在 Power BI 中创建的,则还可以使用 Power Query 中的高级编辑器来编辑自动生成的查询,以微调或自定义刷新。 请在以下部分中阅读有关增量刷新及其工作原理的详细信息。

注意

编辑数据流时,Power Query 编辑器会直接连接到数据源,并且不会在经增量刷新策略处理后的数据流中显示缓存/筛选的数据。 若要查看数据流中缓存的数据,请配置增量刷新策略并刷新数据流,然后从 Power BI Desktop 连接到数据流。

增量刷新以及链接表与计算表

对于链接表,增量刷新会更新源表。 由于链接表只是指向原始表的指针,因此增量刷新不会影响链接表。 在根据定义的源表刷新策略刷新源表时,任何链接表都应假定已刷新源中的数据。

计算表基于在数据存储上运行的查询,可以是另一个数据流。 因此,计算表的行为方式与链接表相同。

由于计算表和链接表的行为类似,因此两者的要求和配置步骤相同。 一个区别在于,对于计算表,在某些配置中,由于分区生成方式的缘故,无法以优化方式运行增量刷新。

在增量刷新和完全刷新之间更改

数据流支持在增量刷新和完全刷新之间更改刷新策略。 在任一方向(完全向增量或增量向完全)发生更改时,更改会影响下一次刷新后的数据流。

将数据流从完全刷新更改为增量刷新时,新的刷新逻辑会遵循增量刷新设置中定义的刷新窗口和增量来更新数据流。

将数据流从增量刷新更改为完全刷新时,增量刷新中累积的所有数据都会被完全刷新中定义的策略所覆盖。 你必须审批此操作。

增量刷新中的时区支持

数据流增量刷新取决于其运行时间。 查询筛选取决于查询的运行日期。

为了适应这些依赖项并确保数据一致性,数据流增量刷新对立即刷新方案实施以下启发式方法:

  • 在系统中定义了计划刷新的情况下,增量刷新使用计划刷新部分中的时区设置。 这可确保无论刷新数据流的人员处于哪个时区,它始终与系统的定义保持一致。

  • 如果未定义计划刷新,则数据流将使用执行刷新的用户的计算机中的时区。

还可以使用 API 调用增量刷新。 在这种情况下,API 调用可以保存刷新中使用的时区设置。 使用 API 有助于实现测试和验证目的。

增量刷新实施详细信息

数据流使用分区进行增量刷新。 数据流中的增量刷新可使最小分区数满足刷新策略要求。 超出范围的旧分区被删除,此操作会保持滚动窗口。 分区会被适时合并,从而减少所需的分区总数。 这可以改进压缩,在某些情况下,还可以提高查询性能。

本节中的示例共享以下刷新策略:

  • 存储过去 1 个季度中的行
  • 刷新过去 10 天内的行
  • 检测数据更改 = False
  • 仅刷新整天 = True

合并分区

在此示例中,日分区在超出增量范围后会自动合并到月份级别。 增量范围内的分区需要以每日粒度进行维护,以便仅允许刷新这些天。 运行日期为 12/11/2016 的刷新操作合并了 11 月中的天,因为这些天超出了增量范围。

合并数据流中的分区。

删除旧分区

超出总范围的旧分区会被删除。 运行日期为 1/2/2017 的刷新操作会删除 2016 年第 3 季度的分区,因为它超出了总范围。

删除数据流中的旧分区。

从长时间故障中恢复

此示例模拟系统如何从长时间故障中正常恢复。 假设刷新不会成功运行,因为数据源凭据已过期,需要 13 天才能解决问题。 增量范围只有 10 天。

运行日期为 1/15/2017 的下一个成功的刷新操作需要回填缺失的 13 天并刷新这些天。 它还需要刷新前 9 天,因为这些天未按正常计划刷新。 换句话说,增量范围从 10 天增加到了 22 天。

运行日期为 1/16/2017 的下一个刷新操作会借机合并 2016 年 12 月和第 4 季度中的月份。

在数据流中从长时间故障中恢复。

数据流增量刷新和数据集

数据流增量刷新和数据集增量刷新旨在协同工作。 可以接受并支持以下操作:将数据流中的增量刷新表完全加载到数据集中,或将数据流中完全加载的表增量加载到数据集中。

这两种方法都根据刷新设置中的指定定义来工作。 详细信息:Power BI Premium 中的增量刷新

另请参阅

本文介绍数据流的增量刷新。 下面是一些可能有用的更多文章:

有关 Power Query 和计划刷新的详细信息,可阅读以下文章:

有关 Common Data Model 的详细信息,可阅读以下概述文章: