工作中,基于同事提供的基础数据在PowerBI中搭建好数据模型之后如何更方便地刷新,是一个很重要的问题。
最简单的方式是原始数据来自于联网的数据库,这样刷新不需要手动操作。
但是如果数据不是来自于数据库,而是来自于Excel,就很头疼。
实际工作中,我找到了两种不基于联网数据库的PowerBI报表刷新方式,分别列举如下。
两种方法用的建模工具是PowerBI Destkop,因为要用它将模型发送到PowerBI网络服务。
当然用Excel作为建模工具也是可以的,这样就不需要PowerBI网络服务,只是Excel模型只能在本地计算机上刷新,如果要把生成的报表共享给其他同事要做一番额外的工作——比如,把模型放入OneDrive For Business然后共享给同事。
一、基于OneDrive For Business的PowerBI报表自动刷新方法
第一步,得有一个OneDrive For Business账号,我是公司购买了一个office365,就自带1T的OneDrive For Business了。
第二步,得准备一个OneDrive For Business文件夹,用于存放原始数据。
第三步,基于OneDrive For Business建立PowerBI数据模型。这一步很简单,直接建立一个类似于下面这样的数据源即可:
SharePoint.Contents("https://xxx-my.sharepoint.cn/xxx/", [ApiVersion = "Auto"])
到哪里去获取引号中的链接地址呢?在PowerBI网页版中点击左上角的九个点,选择OneDrive图标,然后鼠标左键单击,就会进入OneDrive For Business页面了。
图片2.png
第七步,在PowerBI网络服务中设置刷新。
image.png可见网关连接不需要了,但是要在数据源凭据里进行设置,之后就可以设置计划刷新了。
这种方式的好处是无需本地计算机随时开机,只要把链接发给同事让他们更新其中的文件就好了。
坏处是如果采用匿名链接,对安全性要求高的数据就很危险了,这时需要额外花钱去给需要更新数据的同事购买能打开OneDrive For Business链接的账号,这一般都是office365账号且隶属于同一个组织。
二、基于本地网关的全自动刷新方式
这是我最先采用的方法。
这种刷新方式要求在本地计算机上安装数据网关。配置好之后,只要本地电脑开机,那么数据网关就和PowerBI服务器建立了持久的连接,能自动刷新本地计算机上的数据。
那么,同事的数据如何到达我自己的电脑呢?有很多种方式,适用场景最广的是通过发送电子邮件(这样不受局域网限制),然后用某种方式把电子邮件自动保存到指定文件夹,再把这个指定文件夹添加到数据网关的数据源。
我平时用outlook比较多,所以找了一段VBA代码(代码见附件)来自动监测指定主题的邮件,如果有附件则自动保存到指定文件夹。
把这段VBA代码添加到outlook之后,再创建一条规则:当新邮件来自于指定主题且包含附件,则将其保存到指定的文件夹:
image.png
如果宏无法运行,则需启用宏:
image.png
这种方式的好处是基本做到了全自动化:同事只需要根据指定规则发邮件到指定邮箱即可。
但这种方式也有很大弊端:必须保持数据网关所在的电脑随时开机,否则万一在非工作时间也需要刷新数据就很麻烦了。而在周末和节假日期间,这类非服务器的电脑一直开机也有安全隐患——且不说浪费电的问题。
附件:自动保存附件的VBA代码
Option Explicit
Public Sub SaveAttach(Item As Outlook.MailItem)
SaveAttachment Item, "S:\Holding\", "*.xls"
MsgBox "附件已保存"
End Sub
' 保存附件
' path为保存路径,condition为附件名匹配条件
Private Sub SaveAttachment(ByVal Item As Object, path$, Optional condition$ = "*")
Dim olAtt As Attachment
Dim i As Integer
If Item.Attachments.Count > 0 Then
For i = 1 To Item.Attachments.Count
Set olAtt = Item.Attachments(i)
' save the attachment
If olAtt.FileName Like condition Then
olAtt.SaveAsFile path & olAtt.FileName
End If
Next
End If
Set olAtt = Nothing
End Sub
网友评论