Power BI增量刷新如何配置(颠覆认知)

本文内容涉及到的一些Power BI增量刷新结论,均来源于实际测试所得,并且有的测试结果与当前主流的认知不同,其目的均是为了更好的使用Power BI,发现更多不可能成为可能,若有错误的结论,还望各位网友指正。

网上已经有很多同类型的文章,并且讲的还算比较详细,但是我在配置Power BI增量刷新的时候遇到了一些问题,尤其是很多配置的细节,如果不是特别注意的话,很容易犯错,导致配置不成功。所以,我这篇文章将讲述怎么正确的配置Power BI增量刷新,将会不厌其烦的详细描述可能在其他文章不会特别强调的细节。

文章有点长,但都是有用的干货

网上也有很多关于Power BI增量刷新的文章,很多细节一笔带过。鉴于我在配置增量刷新过程中踩的坑儿,本篇文章将讲述正确配置Power BI增量刷新。我自己在配置时走了弯路,后经高飞老师指点,配置成功,在此非常感谢高飞老师的帮助。我将详细讲述其中细节,帮助没有接触过增量刷新的朋友配置成功。

增量刷新原理

增量刷新的实现,首选根据参数所选的日期范围加载数据,然后在对应的表上右击配置增量刷新效果,保留多久的数据,刷新多久的数据,在实现增量刷新的效果时,只刷新最近N天的数据,历史数据是不动的。比如下图中的效果,保留过去10年的数据,刷新最近10天的数据。这样可以极大的节省数据刷新的工作量,这个也就是Power BI增量刷新的原理。如果未刷新的数据中可能存在变动的数据,则可以勾选下面的,检测数据更改

增量刷新的配置

增量刷新,依赖一个可以折叠的数据源,需要了解的可以网上搜下Query Folding 查询折叠。并不是所有的数据源都支持做Power BI增量刷新。

通俗的理解,就是我们将Power Query加载源数据的操作步骤可以通过SQL语句表达,比如在Power Query中的筛选,对应的是SQL语句的Where条件;在Power Query中的排序,对应的是SQL语句的order by;在Power Query中的分组依据,对应的是SQL语句的group by。也就是Power Query和SQL相通的部分,我们通过在Power Query中操作,然后转换为SQL语句,也就是前面说的可以支持Query Folding 查询折叠。

怎么识别是否支持查询折叠呢?很简单,在Power Query步骤上右击,查看本机查询是否可以编辑,灰色代表不支持查询折叠也就是当前的操作步骤无法转化为SQL语句,如果可以编辑代表支持查询折叠,我们才有了做Power BI增量刷新的基础

步骤上右击,查看本机查询

本机查询

很遗憾,上面的方法经过我的测试,严谨来说是不完全正确的,后面我会分享我的观点。

如果明白了上面的原理,那么就能理解,有些步骤是不支持将Power Query转换为SQL的,会导致前面支持折叠,操作过一些步骤之后就不再支持折叠,尤其是新手在配置的时候需要非常注意。

有了以上基础之后,我们才有了配置参数,配置增量刷新等操作。

Power BI的增量刷新并不是支持所有的数据源,仅支持基于SQL的数据源,具体可以参考学习下高飞老师的文章:Powe BI极客 增量刷新 2.3支持的数据源

不配置增量刷新发布后,是可以在在在线版下载PBI文件的,一旦配置了了增量刷新,则不再支持下载PBI文件。如果配置了增量刷新的模型本地有新的调整,请全部刷新后发布。

增量刷新流程

增量刷新效果是如何体现出来的呢?虽然前面的原理都懂了,可是增量刷新效果怎么体现出来呢?这个时候就是做线上配置的时候了,而且是必须的,做完线上配置才能看到增量刷新效果。

请记住,增量刷新的效果在Power BI Desktop里面是看不到,也测试不出来。增量刷新必须是发布后在线配置Power BI才能使用。这些都是必须的

官网教程 Power BI中的数据刷新

增量刷新的流程大概分下面几步:
  • 需要专业版Power BI账号
  • Power Query使用支持查询折叠的数据源
  • Power Query创建参数并据此为筛选条件配置到表中
  • Power Pivot表上右击点击增量刷新配置存储行和刷新行的设置
  • 保存发布
  • 打开网页版Power BI,在线配置网关连接、数据凭证、参数、计划的刷新
  • 以上步骤配和在一起才是一个完整的增量刷新配置,线上配置是必须的
在线配置

我解释下这个刷新是怎么执行的,其实就是将本地的模型上传,然后在线的模型通过配置进行刷新,配置就是需要满足和线下刷新同样的条件。

  • 网关连接 此时PBI模型已经在微软服务器了,那么如果想要刷新则需要连接本地的数据源,此时需要网关,而且是必须的。安装本地数据网关,安装个人版即可。

我在配置个人网关时遇到一个错误,就是点击输入账号的界面就报错退出,忘了留截图了,然后我用的解决办法是换了个安装路径,并且使用窗口切换,快捷键Alt+Tab切换到网关页面,然后使用Tab键选择需要输入账号的界面粘贴账号,并登陆成功,可以做个借鉴。

  • 数据源凭证 这部分是PBI文件连接的数据源的配置,比如从MySQL取值,那么需要提供其对应的账号和密码,如果是本地文件,则需要提供对应的路径。也就是让在线刷新时能找到数据源,且可以使用账号密码进行访问。
  • 参数 参数就是在Power Query创建的RangeStart 和 RangeEnd。这部分根据我当前的测试经验,完全不用管,看了我下面的方法,即便参数有下面图片中的问题,也一样支持增量刷新,我指的是下面图片中的提示,而非不配置参数。以上的前提是你已经在模型中正确配置了参数。
    参数有未设置提示,不代表不能增量刷新

如果在Power BI Desktop里面做增量刷新不配置参数,则在设置增量率刷新时会有报错提示且无法打开增量刷新按钮。所以设置参数是必须的。


未配置参数就配置增量刷新,无法打开增量刷新按钮
  • 计划的刷新 配置自动刷新的时间,类似于自动触发刷新,无需再有人为干扰,每天就可以得到最新的数据。在很多人不了解这个功能的时候,会通过本地手工点击刷新并重新发布覆盖的方式更新,这个功能就是相当于做成自动的过程。虽然增量刷新不支持本地Excel文件,但是Excel文件搭建的模型依然可以使用计划刷新,只不过是全量刷新,使用时请注意区分。

使用在线的自动刷新配置,有个缺点,就是刷新的速度慢,如果对比下手工点击刷新的速度,会发现刷新时间要长很多,如果你遇到了,请不要紧张,事实就是这样。如果想更快,可以配置个模拟手工刷新的自动化程序。这些问题,可能其他文章一般都不会提。

配置条件

配置增量刷新至少需要Power BI Pro,也就是Power BI的专业版,每年大概700多人民币。当然也有一些其他的不需要专业版,也可实现的增量刷新效果。

如果不是专业版用户,这个问题我也找到了解决方案,请参考佐罗老师的文章,使用这个方法可以实现类似增量刷新的效果,且免费使用PowerBI 多种增量刷新方案最大支持100T数据存储及单个模型50G+,感谢佐罗老师发明的方案!

配置教程

首先,微软官网是有教程的,很完整,但是有些细节不太容易理解,这也是造成我困惑的原因。微软官网 Power BI中的增量刷新

我更推荐高飞老师关于Power BI增量刷新配置的这篇文章,做了很多细节的工作,Power BI增量刷新的正常操作部分,看这篇文章就够了。增量刷新视频演示

Power BI极客 增量刷新

增量刷新特殊问题

以下全部都是个人在此之外的发现,都是各种的不正经。

这里面有几个关键点,尤其是新手会犯错的错误,文章中都做了重点的强调,我也在这里强调一次,因为太重要了,太容易出错了。

首先就是配置参数这块,需要在Power Query参数设置中配置参数,分别配置一个开始时间和结束时间,RangeStart 和 RangeEnd。

但是官网教程不会告诉你这是必须的。

参数开始时间的参数名称必须是“RangeStart”,结束时间的参数名称必须是“ RangeEnd”,不要自己创造其他名称的参数名称否则无效,也不要更改大小写,且格式必须日期/时间格式。

但是,即便你按上面的配置做了可能依然不会成功,因为加载的数据源的格式有可能是需要调整的,因为参数的格式是日期/时间格式,那么筛选的数据源也必须是日期/时间格式,但是我相信大部分人的数据源都不会存储日期/时间格式,大部分肯定是日期格式,而且还是文本格式的日期,或者是8位文本数字的日期。

我们第一个坑来了

Power Query 更改数据类型后配置参数,不能折叠

此时看似已经没有选择,只能在数据库增加这样一个datetime格式的日期,然后使用参数进行筛选,然后该方法调整成本很高。这个问题也吓倒了不少人。

你又无法通过将加载到Power Query的数据通过更改数据类型后再用参数筛选,因为这样源数据不能折叠也就不能实现增量刷新了,而且是真正的不能折叠。

即便是这样,还有更特别的,比如Hadoop的数据源。因为受限于Hadoop本身,不支持datetime格式,默认的日期时间是带毫秒的,如果拿掉毫秒就是文本格式的日期时间了,加载到Power BI依然面临着数据类型的更改,尴尬了!

我就是因为使用Impala连接Hadoop才走上了这条不归路

我没有放弃,我在官网找到了方法,而且测试效果可行,往后看,有详细的讲解。

还有一个超级大坑

只要Power Query中的步骤都是支持折叠查询,也就是右击最后一个步骤,“查看本机查询”是可编辑状态,那么即便Power Pivot页面配置表的增量刷新是提示下面的错误无法确认是否可以折叠M查询,都是可以实现增量刷新的,这个提示只是提示,可能会不准,不代表不能增量刷新。这个简直是天坑,因为很多人会在这一步放弃。

这一步是高飞老师告诉我的关健一步,如果能强行进行后面的测试,其实也能发现这个问题,但是当时我是没发现,而且一直卡在这个问题上。最关键的是我当时测试用的是MySQL,而该问题只在MySQL上发生了,后面又装了SQL Server测试,同样的数据源同样的步骤,没有这个提示。

无法确认是否可以折叠M查询

三个超出认知的配置

下面这三个关键点,非常重要,可能会导致你因为之前对增量刷新配置的主观认识,导致在遇到一些情况就主动放弃,最终无法完成Power BI增量刷新的配置。看了下面我的讲述,可以极大的拓宽对增量刷新的配置,增加了更多可能性。

参数配置

我再重复一遍,配置Power BI的增量刷新,参数配置是很关健的一步,首先就是参数名称,必须按照RangeStartRangeEnd两个名称,大小写都不能改变的作为开始时间和结束时间,并且类型必须是日期/时间格式,这个是强制的。那么这种设置会对数据源有一定的要求,如果你加载的数据源里面没有日期/时间格式,而是通过Power Query的更改数据类型设置,并且在更改的类型上做筛选,则该数据源将不会被折叠,无法实现增量刷新。

虽然有各种限制,但不要放弃!

这个问题有解法,官网提供了一种方法,经测试有效。以下是官网原文:

虽然参数的数据类型必须是日期/时间,但可进行转换以符合数据源的要求。 例如,下面的 Power Query 函数将日期/时间值转 换为类似于 yyyymmdd 形式的整数代理键,这对数据仓库而言非常常见。 此函数可通过筛选步骤调用。
(x as datetime) => Date.Year(x)10000 + Date.Month(x)100 + Date.Day(x)

这一步其实就告诉了我们方法,因为在主流的数据库中,为了性能和使用便捷性,大多不会存储为日期/时间格式,一般的表日期都是8位数字日期,比如20200801,这些都是针对数据库来说了,如果是展示表或者导出的话一般会通过函数转换位yyyy-mm-dd格式。那么我们可以通过将两个参数转换为yyyymmdd格式来达到我们筛选的效果。

但是还有个小前提就是,从数据库加载的8位日期,需要是数值类型,同时为了后续的字段格式转换和使用需要,个人建议是做两列8位日期,其中一个字段必须是数值类型用于参数筛选,另一个不限格式,用于转换为表日期。从数据库加载到Power Query的数据不一定都是它该有的数值类型,一定会涉及到字段的数据类型更改,但是我们不能更改筛选参数的字段的数据类型,因为会失去折叠,是真正的失去折叠,这句话我反复说了好几遍。但是却支持对其他字段更改数据类型,即便你操作完其他字段的数据类型更改,“查看本机查询”为灰色,也照样支持增量刷新,记住这一点很重要

根据官网的公式提示,我们可以对8位数值日期进行筛选,随便做一个筛选,然后更改M公式。如果不知道怎么修改M公式,可以按照我编写的照猫画虎,如果实在看不懂,请补充基础知识。

M公式是可以直接引用参数的,使用方法是直接写参数名称

= Table.SelectRows(Table, each [日期] >= Date.Year(RangeStart)*10000 + Date.Month(RangeStart)*100 + Date.Day(RangeStart) and [日期] < Date.Year(RangeEnd)*10000 + Date.Month(RangeEnd)*100 + Date.Day(RangeEnd) )

上面这个操作,就是将日期/时间格式的参数,转换为8位数值日期,这个操作是支持折叠的。这点很多文章上少有提及。果然,微软官网上不放废话,放的提示都是有用的。

可以在Excel中模拟下这个公式,大概就明白其中的原理了。比如我们的日期/时间是A1=2020-08-01,那么

=YEAR(A1)*10000+MONTH(A1)*100+DAY(A1) = 20200801

做完这个配置,然后关闭并应用,到Power Pivot页面找到这张表

无法确认是否可以折叠M查询

我之所以把这个问题提出来,也是我在配置过程中遇到的一个难题,如果前面配置都是正常的,也支持折叠,那么在看到有这句话的提示,你是放弃还是继续坚信你的配置没有问题呢?可能很多人看到这个报错会跟我一样,直接就放弃了,因为有报错的提示,肯定是自己哪里设置错了。

点击了解详情可以打开微软官网配置教程

这个问题一直困扰我好几天,一直找不到对应的答案,直到我无意间在高飞老师的文章留言,经高飞老师提醒,这个提醒仅供参考,以是否支持折叠为标准,并且很巧的是我当时用的数据源是从MySQL里面加载的,而后续我安装了SQL Server同样的表,同样的配置,但是没有这个报错。最终两种数据源都可以配置成功,那么根据我这个描述,我们的答案就呼之欲出了。

配置增量刷新,提示无法确认是否可以折叠M查询仅供参考,有这个提示不代表不能配置成功,关健还要看数据源是否可以折叠。

具体是否支持折叠,这要看我第三个描述。

查看本机查询

首先,对是否支持折叠的判断,依照目前主流的观点,都是让看Power Query的操作步骤右击,查看本机查询是否可以打开,如果不能打开代表不能折叠,如果可以打开,代表支持折叠,而且是不要操作不能折叠的步骤,我相信绝大部分做Power BI增量刷新的人都是这么想的,也是这么做的。

但是我想说,是否支持折叠不全是看这个,可以打开肯定是支持折叠的,那么打不开就一定不能折叠吗?答案是否定的。

如果你只是操作了MySQL、SQL Server、Oracle等数据库,你不会遇到下面的问题。

说下我为什么发现了这个问题,发现这个问题是因为我受限于一些条件,只能使用Impala连接Hadoop,从第一步开始到无论我操作什么,“查看本机查询”都是灰色的,这个问题一直困扰我好几天,我突然想起来之前高飞老师指点我的,“无法确认是否可以折叠M查询仅供参考,最终以Power Query里面显示的是否折叠为准”,然后我就在想,是否折叠是否也有这个问题呢?然后我按照查询折叠的步骤做了参数的筛选,并且还做了其他我认为可以折叠的步骤,比如新增列、更改非参数筛选字段的数据类型、重命名、更改列位置等,刷新发布后,按照增量刷新的步骤配置,完美的实现了增量刷新效果。虽然一路都是红灯,但是结果却成功了。

所以,是否支持折叠,不全部取决于Power Query操作步骤中的查看本机查询是否可以打开,而是取决于,操作的步骤是否支持折叠。

是不是有点颠覆认知,那么问题来了,什么操作步骤支持折叠呢?我在官网文档找到了答案,果然问题还是要多看官网文档。Power Query查询折叠,可能看起来不是那么好理解,请注意里面的关健部分。

官网文档引用:
可以查询折叠的关系数据源转换是可以作为单个SELECT语句编写的关系数据源转换。可以使用适当的WHERE,GROUP BY和JOIN子句构造SELECT语句。它还可以包含使用SQL数据库支持的常见内置函数的列表达式(计算)。

以下为引用高飞老师的文章,看起来更好理解一些。原文地址

数据源支持: 基于 SQL 的数据源,比如关系型数据库(Mysql/SQLServer/Oracle)、OData 数据源和 HDFS 都支持 QueryFolding。而 Excel、Csv 文件、blob、Web 和 OData 源等数据源不支持
操作支持:筛选、合并和追加查询、分组、透视、逆透视等常用操作都可以被折叠。

除了上面,还有很多操作支持折叠,个人建议是可以参考该步骤是否可以转换为SQL语句,虽然不完全准确,但可以做个大致的参考。最终是否支持则变成了混沌状态,所有的效果,都以最终是否实现了增量刷新效果来判定。

虽然听起来有点疯狂,但其实还没有偏离Query Folding 查询折叠。

测试Power BI增量刷新效果

该测试方法需要基于Power BI专业版

做完了以上的配置,都成功了,或者想做一些其他的尝试,应该怎么测试增量刷新效果呢?具体的发布刷新流程我上面已经讲了,这里不再重复。如果你使用的是Power BI Desktop,那么保存发布,然后打开网页版。打开网页版就是选择软件右上角的账号,点击打开查看账户,就可以打开网页版了。然后配置网关、数据源凭证,然后就是点击模型所在的工作区,选择右侧上方的数据集打开之后点击刷新。正常情况下,第一次发布,如果做了完整的配置,会自动执行刷新,如果没有配置,则需要配置后手工点击刷新,等刷新完,点击计划刷新按钮,点击查看刷新历史记录,查看刷新的开始和结束时间,对比第一次刷新的时间,如果第二次手工刷新时间明显比第一次短,那么就是配置成功了,作为对照可以再配置一个没有增量是刷新的一起发布,对比刷新时间,那么就很轻松的看到是否配置成功了。

点击计划刷新按钮打开该页面

以上的方法是为了更客观的展示Power BI增量刷新的效果,在配置时,可能会尝试很多方案,最终是否可行,至于我分享的这些测试结果,也仅仅局限于我自己测试的范围。当折叠不再看查看本机查询,配置增量刷新不再考虑是否有M的折叠提示,那么我们唯一最终衡量标准,都只能以发布后的实际刷新效果来评定了。

通过ODBC加载

再分享一个新发现,ODBC是一个神奇的存在。如果你的数据源不支持增量刷新,不妨将该数据源通过ODBC连接到Power BI,你会发现神奇的就支持了增量刷新。并且通过ODBC连接的数据源,可以解决直接加载源数据无法编写SQL进行加载的问题。总之,ODBC是一个可行的方案。至于怎么配置ODBC,这个就不在我的解答范围了。

总结

以上是我在部署Power BI增量刷新的历程和经验总结,内容很细,甚至有点啰嗦,也是希望能给后来的人提供一些灵感和方向,希望能帮到您!

这篇文章从开始编写到做各种测试,期间也花费了很多精力,为了保证传达的信息足够准确,也反复对文章做了校对,和对测试结果进行验证。由于发现了很多非常规的认知理论,所以也力求严谨,但是受限于作者的水平,可能会有不严谨的地方,望不惜赐教。

最后,再次感谢高飞老师提供的指导建议,才让这篇文章有了编写的基础。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352