美文网首页PowerQuery
原始数据是文件,如何自动刷新PowerBI报表?

原始数据是文件,如何自动刷新PowerBI报表?

作者: PowerQuery | 来源:发表于2020-02-25 15:23 被阅读0次

工作中,基于同事提供的基础数据在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

语雀链接:https://www.yuque.com/wanght/powerbi/refresh_data

相关文章

网友评论

    本文标题:原始数据是文件,如何自动刷新PowerBI报表?

    本文链接:https://www.haomeiwen.com/subject/bistchtx.html