一个DAX函数搞定Power BI增量刷新(FAKE incrimental refresh in PowerBI)

Power BI的增量刷新功能目前是Premium的一项”特权”,免费用户和Pro用户无法使用PowerBI原生的增量刷新功能,所以,每一次刷新,都要彻底更新数据集。 这对于量级比较大的数据集来说,着实是一件耗费时间的事情。

拿我的亲身经历举个例子,我有一份报表涵盖了客户近3年的销售情况,由于客户的业务流量比较大,数据集的每一次手动刷新都在15分钟左右,而计划刷新更是会延迟到35分钟左右,严重影响到报表的日常使用。

不过呢,聪明如我 ( 偷笑 ),我还是发掘到了一个十分简单的”增量刷新”解决方案,使用一个DAX函数就可以实现。希望我以下的分享可以给你带来一些灵感。

在这里,我仍然使用NorthWind数据库做演示,分别导入Orders表格以及Customers表格。

首先,在PowerQuery将数据集里,将包含了近三年销售详情的Orders表分为三张: Orders 2017, Orders 2018, Orders 2019,里面分别包括了当年的所有销售订单。

实现步骤为:

  • 复制两份Orders表格,分别重命名。
  • 对OrderDate日期列进行操作,筛选出当年的销售数据 :
    • 方法一 : M代码 ( 以Orders 2017的日期筛选为例 )
      • "Lignes filtrées" = Table.SelectRows(#"Colonnes supprimées", each [OrderDate] >= #date(2017, 1, 1) and [OrderDate] <= #date(2017, 12, 31))
    • 方法二 : 或在PQ界面,点击OrderDate列筛选实现,

将销售表格成功”分割为三”后,还要取消2017和2018这两张表格的刷新资格。具体操作为,分别鼠标右击这两个表格,取消勾选 “Include in report refresh”。

也就是说,在下一次更新数据集时,这两张表格将不被刷新,不会再重新载入数据。

写到这里,应该有一些小伙伴已经看出来我的意图了 : 更新的时候只刷新2019年的销售数据,然后再合并这三张表,获取一个完整的Orders表格,不就约等于只刷新新增数据了吗。没错!就是这样。

所以接下来,我们要做的就是 : 合并这三张表格。

那么问题来了,应该在PQ里直接合并吗?

答案是否定的。因为如果在PQ里以Orders2019作为主表格对它们进行合并,2018和2017两张表格虽然被取消了刷新资格,但是作为2019的附属表格,还是会被刷新,会被重新载入数据。

不过,在Power BI里,我们还可以借助一个函数UNION来实现表格的合并。并且UNION可以帮助我们实现增量刷新的目的。

导入数据后,回到PowerBI操作界面,点击工具栏里的”新建表格”,使用DAX函数创建一个新的表格 Orders。

这里用到的DAX表达式为:

Orders = UNION('Orders 2017';'Orders 2018';'Orders 2019')

新表格创建成功后,来到关系视图,可以使用新创建的表格建立需要的关联关系。

点击刷新数据验证一下三张Orders表格里,是否只有Orders2019被刷新。

到这里,我的小技巧就施展完成了, 并且,在把数据集上传至Power BI Service后,同样也只刷新Orders2019。最后,大家别忘了在表格列表里隐藏 Orders 2017, Orders 2018, Orders 2019 这三张表格,假装什么都没有发生过一样。

或许看完之后你会说,这根本就不算真正的增量刷新。是的,这里我只是在”模仿”增量刷新,但这个方法解决了我的困扰。你也可以顺着这个思路,单独分出近一个季度,近一个月的数据,然后只刷新这部分数据。不过,好消息是Power BI会近期把增量刷新的功能开放给Pro用户,我们拭目以待吧。

感谢大家的阅读。