【高级应用】PowerBI增量刷新原理揭秘及实战详解
随着 PowerBI 在 2020年2月的更新,增量刷新应该被投票投成了大众货,现在所有小伙伴都可以使用这个功能了。当然,其前提是 PowerBI Pro 账号,也就是 9.9 美金/月/人的 Level,很合理。这彻底将自助式BI分析推向了成规模级。
很多小伙伴跃跃欲试,看着微软的官方文档操作起来,但很快就会发现坑,本文就是用来帮助您正确理解增量刷新本质原理以及实操方法的。
增量刷新的好处
首先来看下增量刷新解决的问题到底是什么,如下:
可以看出:
- 第一次刷新将历史数据和增量更新数据一起加入,用时:5分钟。
- 第二次刷新将增量数据刷新进入PowerBI数据集,用时:20秒。
这仅仅是为了测试的示例,这样我们就可以明白,由于历史数据的固定性,一旦构建,就可以不再更改,只需要关注最近的新进数据。
由于 PowerBI 的增量刷新存在一些特点,下面我们来详细解读。
增量刷新的流程
按常识不难想到,增量刷新按以下流程进行:
- 云端发起刷新。
- 通过数据网关将刷新请求发送到数据源服务器(如:SQL Server)。
- 数据源服务器(如:SQL Server)根据时间判断增量,查询出来,通过数据网关传回云端。
- 云端刷新这部分数据并存储。
这个流程非常重要,不是写写的,你在任何一个坑里出错几乎都是没有充分理解上述步骤的内涵。下面给出一个正确的路线,但对不同的分支和产生的问题,我们将在后续文章继续介绍。
增量刷新的误解和条件
请认真再读一遍流程,并注意里面涉及到的名词和隐含概念。
这里来打消很多小白用户的错误想法,请遵守以下条件:
- 没有云端账号,无法增量刷新。
- 没有数据网关和正确配置,无法增量刷新。
- 没有本地数据源服务器(如:SQL Server)无法增量刷新。
- 在刷新中传递的查询请求必须是数据源服务器可以理解并执行的,否则无法增量刷新。
所以,以下误区请务必注意:
- 光有 PowerBI Desktop 无法增量刷新。
- 不配置数据网关无法增量刷新。(学习BI佐罗《PBI基础》)
- 一上来就连Excel文件,无法增量刷新,因为Excel文件根本不是服务器。
很明显,增量刷新不是为小白准备的,起码你要打通云上云下,并有数据源服务器(如:SQL Server)
下面,我们从零帮你体验这个流程。
安装 SQL Server
你可以自行搜索安装 SQL Server 的流程,非常简单。几乎是一路下一步。
第一步,下载并安装 SQL Server,官方网址:
https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads
不会安装的小伙伴,请大家自己搜索教程,很简单。
SQL Server 是运行在后台的,因此看不见摸不着。为了可以看得见摸得着,需要安装一个管理工具。
第二步,安装可以看见 SQL Server 的管理工具,官方网址:
https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15
可以安装中文版。
准备数据
如果你直接可以连接企业的数据库,可以忽略上述过程。
如果你无法找到可以做实验的企业数据,可以自己造,简单方法的大致思路:
- 在 Excel 里先准备好一票数据,例如:1万行,保存为 csv。
- 在 SQL Server 里导入这些测试数据。
- 可以自己搜索如何循环追加,刻意把数据量加大到 1个亿。
请自行搜索按上述思路准备即可,并不难。
最终结果大概是这样:
这样就有了可以测试大量数据表现的样本数据。
在 PowerBI Desktop 进行设置 - 获取数据
用 PowerBI Desktop 连接这些数据,平时怎么连接就怎么连接,但注意:
- 不要加载,因为数据量很大;
- 只加载样本数据。
问题是如何只加载样本数据呢?这里需要用到两个重要的系统参数。请先在查询编辑中创建这两个参数,如下:
这两个参数是:RangeStart 和 RangeEnd,请注意:
- 名字可以写对不?
- 类型必须是日期时间类型(注意:不能是日期类型)
以 90% 的人都一般栽坑到大小写和缺括号这种问题,那么写对大小写和日期时间类型可以难倒很多人。很多人都在问:老师,我是按照微软文档配置的,为什么不能增量刷新。答案:因为你根本没严格看文档。
具体在配置时,只需这步:
请务必务必注意:
- 晚于或等于
- 早于
- 参数选对
为了样本数据少,这里我们只设置了几天的数据量。
如果你可以认真读到这里并严格操作,你在 PowerBI Desktop 中就可以看到正确的样子了。
在 PowerBI Desktop 进行设置 - 增量刷新策略
点击【增量刷新】可以看到:
这里的意思是:
存储最近 X 天(如:最近 60 天)的数据,并保持刷新最近 Y 天(如:最近 5 天)的数据,如果当天没过完,只刷新到昨天即可。
请注意,你在 PowerBI Desktop 里刷新是没有任何变化的,这个变化要等到你在云端刷新才有用。
配置数据网关
配置数据网关的过程,不再赘述,有很多资源,另外,可以学习我的《PBI基础》。
配置好,你应该确保网关正在运行:
这样可以确保打通云端。
发布并配置
在没有发布前,我们看看 PowerBI Desktop 端的数据量,如下:
按照增量刷新策略:
存储最近 X 天(如:最近 60 天)的数据,并保持刷新最近 Y 天(如:最近 5 天)的数据,如果当天没过完,只刷新到昨天即可。
我们先发布到云端,并配置数据网关,确保:
在云端设置好增量刷新,如下:
一切OK。
首次刷新
在云端进行首次刷新时,会将历史数据和增量数据一起刷入,所以耗时可能较长。
点击刷新按钮。
等待片刻(在这个案例中是5分钟),结果如下:
可以看到:
整个刷新结果是按照刷新策略进行的,也就是:
存储最近 X 天(如:最近 60 天)的数据,并保持刷新最近 Y 天(如:最近 5 天)的数据,如果当天没过完,只刷新到昨天即可。
由于今天是2020.02.19,由于当天没过完,只刷新到昨天即可,因此只刷到2020.02.18。
再次刷新
为了测试效果,我们写入一条数据到数据库,然后再次从云端刷新。
刷新后,可以看到:
增加了一条数据。
刷新时间对比
我们来看两次刷新时间的对比,如下:
不言而喻,增量刷新带来了重要的时间优势。
增量刷新的核心原理
那么很多伙伴会问,他凭什么就可以增量刷新了呢?到底是什么原理呢?下面罗叔就简单介绍并证明给你看。
首先,请再回顾我们说的流程:
- 云端发起刷新。
- 通过数据网关将刷新请求发送到数据源服务器(如:SQL Server)。
- 数据源服务器(如:SQL Server)根据时间判断增量,查询出来,通过数据网关传回云端。
- 云端刷新这部分数据并存储。
这里的关键在于:
PowerBI Service作为云端,运行的是你写好的Power Query,而这个东西只能运行在 PowerBI 里,对于 SQL Server 是不能运行 Power Query 的,而需要被转换。
因此,细心的同学可以留意到:
你生成的任何 Power Query 都有一个选项叫:查看本机查询,意思是:本机指的就是你的服务器;而本机查询就是服务器的查询,我们点击进去,可以看到:
也就是说,我们用 Power Query 生成的步骤会被转换为 SQL 查询,并在服务器运行。
因此,如果你的【查看本机查询】是灰色的话,例如,如果数据源是 Excel,就会出现:
这说明对 Excel 文件的查询是无法做到真正增量的。即使进行配置,也只能看到:
这里的警告,就是告诉你这个数据源,无法使用本机查询,因此无法做到增量刷新。
那么,对于可以增量刷新的情况,我们怎么知道它确实刷新了5天的数据呢?
我们使用 SQL Server Profile 来监控 SQL Server 的执行,然后在云端发起更新,观察监控的变化,可以发现:
回想我们的增量刷新策略:
存储最近 X 天(如:最近 60 天)的数据,并保持刷新最近 Y 天(如:最近 5 天)的数据,如果当天没过完,只刷新到昨天即可。
因此,增量刷新其实是 5 天的数据,在这里有这样的规律:
- 恰好有 5 次服务器本地 SQL 查询,发起者是 Microsoft Mashup Runtime,就是数据网关。
- 查询的结构与在 Power Desktop 中生成的本地查询样式完全一致。
- 最近 5 天对应的 5 次查询严格地满足没有刷新没有过完的今天。
到这里,我们就彻底理解了其底层原理,那就是:PowerBI服务端连通数据网关将当时设置的参数 RangeStart 和 RangeEnd 根据增量刷新策略换成真正的条件,并由数据网管调用 SQL Server 完成真增量查询。
总结
通过本文,我们彻底理解了 PowerBI 中的增量刷新,包括:
- 增量刷新的流程及内涵
- 增量刷新需要的环境
- 增量刷新的配置方法
- 增量刷新的底层原理
希望大家自己可以进行实践,增量刷新绝对是一个很重大的特性,它可以帮助我们借助 PowerBI 云端存储大规模数据并使用 PowerBI。
值得指出的是,由于增量刷新的缘故,微软禁止用户从云端再次下载这个 PBIX 文件,这与普通模式是不同的。具体的细节,大家可以结合微软的官方文档参考。
对于增量刷新还有一些补充的说明,我们留到后面的文章再做介绍,但不影响我们可以正常使用这项重要功能了。