Power BI刷新避免使用网关,蚊子肉也是腿,电费也是钱
之前写过一篇文章,在使用Power BI进行建模时,能尽量使用SQL就不要使用Excel文件。
不过,绝大部分报告,免不了要使用excel文件的,尤其是对于很多不熟悉SQL而一时又没有时间和精力去学习的朋友来说,使用多个甚至几十个excel文件是很平常的事情。
这就给云端刷新报告带来了困难。因为每当新增一个数据源,你都需要在云端编辑一次网关。
如果忘记了编辑网关,那么所有的计划刷新都将失效,而关键的是,绝大部分情况下,你得事后很长时间才能发觉,这严重影响了数据的及时性。
除非你能在报告首页添加一个数据刷新时间来查看:
如果这个时间和你计划刷新的时间有出入,那么一般情况下就是网关出现了问题。
而且,如果要使用本地网关,那么就代表着必须要有一台24小时不断电不断网的电脑。
很多企业中,除IT的服务器和监控外,其他电路在下班时都是要拉闸的。即便是白天,你能保证电脑一直开机吗?笔记本电脑合上盖子还能进行刷新吗?
如果是最近在家中办公,你能一直开着电脑吗?电费不要钱吗?
所以说,本地网关本身就是一个BUG,使我们坚决要摒弃的。
那么,问题来了, 我用本地excel文件搭建的报告,该如何不使用网关进行刷新呢?
今天,我就用下面这个例子来解决这一问题:
我将数据文件放在onedrive中,然后用它构建一个Power BI报告,并发布到云端:
我们发现,要刷新这个报告,必须安装并配置网关:
经过一番折腾,安装并设置了本地网关:
但是!!这个过程有个问题!!
onedrive文件本质上是网络位置,它不应该走本地网关这一条路的。
那为什么刷新云端报告必须得安装网关呢?原因就在上面这个图中,数据源明显是本地文件。从下面pq的源中也能看出来:
所以,虽然看上去我们导入的是onedrive中的文件,但它本质上只是onedrive文件在本地的副本,还是一个本地文件。
解决思路:
首先我们需要获取本地文件的onedrive网络位置,打开文件-开始-信息,右键打开文件位置-复制路径:
你会得到如下的链接:
https://xueqianpbi-my.sharepoint.cn/personal/admin_xueqianpbi_partner_onmschina_cn/Documents
将这个路径复制下来。
接着,我们需要将powerquery中的文件获取方式进行修改。excel文件获取用的是File.Contens函数:
由于我们要从web获取文件,所以我们需要将File.Contents替换为Web.Contents,并且将文件路径替换为刚才的链接路径:
= Excel.Workbook(Web.Contents('https://xueqianpbi-my.sharepoint.cn/personal/admin_xueqianpbi_partner_onmschina_cn/Documents/工作簿.xlsx'), null, true)
注意,本地文件路径是“\”,而网络路径是“/”。
过程中需要使用账号进行登录。
关闭并应用,然后重新发布。
到云端我们发现网关已经关闭了:
这样,不需要网关也可以进行刷新了:
而且,无论从onedrive中获取多少个excel文件,云端的数据源凭证只有一个。
由此我们可以得出结论:
结论
在建立一个Power BI报告时,从长远的角度来考虑,应尽量使用SQL作为数据来源,且最好是云数据库。如果实在想频繁使用excel文件,也尽量放在Onedrive或者SharePoint中,且用Web.Contents函数来获取文件。
这样既避免了云端编辑数据源权限的麻烦,也避免了断电或断网造成的计划刷新失效问题。