使用数据流,可以将大量数据引入 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 运行。 如果在那天的前四个小时内源系统中显示数据,您可能不想将其纳入考虑。 一些业务指标(如石油和天然气行业的每天桶数)不实用也不明智,基于部分天数进行计算是不合理的。
另一个仅刷新完整时段是适当的示例是刷新来自金融体系的数据。 假设一个金融体系,其中上个月的数据在月的第 12 个日历日获得批准。 可以将增量调整范围设置为一个月,并安排刷新在每月的第 12 天运行。 选择此选项后,系统将在 2 月 12 日刷新 1 月数据(即最近一个完整月份的数据)。
注释
数据流增量刷新根据以下逻辑确定日期:如果计划刷新,则数据流的增量刷新使用刷新策略中定义的时区。 如果不存在刷新的计划,增量刷新将使用运行刷新的计算机的时间。
配置增量刷新后,数据流会自动更改查询以包括按日期筛选。 如果在 Power BI 中创建数据流,还可以使用 Power Query 中的高级编辑器编辑自动生成的查询,以微调或自定义刷新。 阅读有关增量刷新及其工作原理的详细信息,请参阅以下部分。
注释
编辑数据流时,Power Query 编辑器会直接连接到数据源,在增量刷新策略处理数据流后不会在数据流中显示缓存或筛选的数据。 若要检查数据流中缓存的数据,请在配置增量刷新策略并刷新数据流后从 Power BI Desktop 连接到数据流。
增量刷新表和链接表与计算表
对于 链接 表,增量刷新会更新源表。 由于链接表只是指向原始表的指针,因此增量刷新不会影响链接表。 根据源表定义的刷新策略刷新源表时,任何链接表都应假定源中的数据已刷新。
计算得出 的表基于在数据存储中运行的查询,可以基于另一个数据流。 因此,计算表的行为方式与链接表相同。
由于计算表和链接表的行为类似,因此两者的要求和配置步骤相同。 一个区别在于,对于计算表,在某些配置中,由于分区的生成方式,增量刷新无法以优化的方式运行。
在增量更新和完全更新之间更改
数据流支持在增量刷新和完全刷新之间更改刷新策略。 当更改在任一方向(从完全到增量或从增量到完全)发生时,变更会在下次刷新后影响数据流。
当您将数据流从完全刷新转换为增量刷新时,新的刷新逻辑将根据增量刷新设置中定义的刷新窗口和增量对数据流进行更新。
将数据流从增量刷新移动到完全刷新时,增量刷新中累积的所有数据都会覆盖完全刷新中定义的策略。 您必须批准此操作。
增量刷新中的时区支持
数据流增量刷新取决于其运行时间。 查询的筛选取决于查询的运行日期。
为了适应这些依赖项并确保数据一致性,数据流的增量刷新在refresh now场景中实现以下启发式方法:
在系统中定义计划刷新的情况下,增量刷新使用计划刷新部分中的时区设置。 此过程可确保无论刷新数据流的人员处于哪个时区,其都与系统的时区定义保持一致。
如果未定义计划刷新,数据流将使用执行刷新的用户的计算机中的时区。
还可以使用 API 调用增量刷新。 在这种情况下,API 调用可以保存刷新中使用的时区设置。 使用 API 有助于测试和验证目的。
增量刷新实现详细信息
数据流使用分区进行增量刷新。 数据流中的增量刷新使最小分区数满足刷新策略要求。 删除超出范围的旧分区,这会保持滚动窗口。 分区是机会合并的,减少了所需的分区总数。 此最小分区数可改进压缩,在某些情况下,可以提高查询性能。
本节中的示例共享以下刷新策略:
- 在最近的 1 个季度内存储数据行
- 最近 10 天内刷新行
- 检测数据更改 = False
- 仅刷新完成天数 = True
合并分区
在此示例中,日分区在超出增量范围后自动合并到月份级别。 增量范围内的分区需要按日级别进行管理,以便仅刷新特定的天数。 运行日期 2016年11月12日 的刷新操作合并了11月的天数,因为这些天数超出了增量范围。
删除旧分区
删除超出总的分区范围的旧分区。 运行日期为 2017/1/2 的刷新操作将删除 2016 年第 3 季度的分区,因为它不在总范围之内。
从长时间故障中恢复
此示例模拟系统如何从长时间故障中正常恢复。 假设刷新不会成功运行,因为数据源凭据已过期,问题需要 13 天才能解决。 增量范围只有 10 天。
下一次成功的刷新操作,其运行日期为2017 年 1 月 15 日,需要回填缺失的 13 天并刷新那些数据。 它还需要刷新过去九天的记录,因为这些天没有按照正常计划被刷新。 换句话说,增量范围从 10 天增加到 22 天。
下一次刷新操作(运行日期 2017 年 1 月 16 日)将有机会合并2016年12月的天数和第四季度的各个月份。
数据流增量刷新和数据集
数据流增量刷新和数据集增量刷新旨在协同工作。 可以接受并支持在数据流中增量刷新表格,然后将其完全加载到数据集中,或者在数据流中完全加载表格,然后以增量方式加载到数据集中。
这两种方法都根据刷新设置中的指定定义工作。 详细信息:Power BI Premium 中的增量刷新
相关内容
本文介绍了数据流的增量刷新。 下面是一些可能有用的更多文章:
- Power BI 中的自助服务数据准备
- 在数据流中创建计算表
- 连接到数据流的数据源
- 在数据流之间链接表
- 在 Power BI 中创建和使用数据流
- 将数据流与本地数据源配合使用
- Power BI 数据流的开发人员资源
有关 Power Query 和计划刷新的详细信息,可以阅读以下文章:
有关 Common Data Model 的详细信息,可阅读其概述文章: