学习笔记2:以SASURL为数据源报表的自动刷新

浏览: 78

想写的东西很多,先把上次学习笔记1的坑填一下。

上次写了用SASURL做数据源开发了报表。学习笔记1:Power BI访问SASURI获取数据 开发好之后,Publish到了Power BI Server的workspace。用户要求定时刷新

于是,在workspace里面,在Dataset的Setting属性里准备设置刷新schedule refresh,结果发现了如下错误。

2.1.png

没有看到具体的错误信息,还是无从下手所以选择了dataset里面的“refresh now”。进而从Refresh history里面得到了详细的错误信息如下:

2.2.png

嗯,找到不能定时刷新的原因了。是因为dynamic data source不能在Power BI Server上刷新dataset.

下一步查找官网,链接如下:

https://docs.microsoft.com/en-us/power-bi/connect-data/refresh-data

内容很长,在dynamic data source来说,有两个特殊情况是可以在​Power BI Server上动态刷新数据的。比如Web.Contents M Query.

2.3.png

​这个函数,之前在创建Function的时候,​是用到过的。于是想到了​之前学习的那个链接。果然作者也是有后续的​解决方案的。

原文链接如下

https://medium.com/@martijnlentink/use-missing-skip-test-connection-in-scheduled-refresh-in-power-bi-5b3fa9a30daf

(需要科学上网)

内容有点长,​里面一些功能微软已经更新了。所以不需要自己skiptest connection,也不用run powershell​了。只要修改function的内容,Publish到Power BI server上,然后设置下​SkipTestConnection就可以了。

​修改function 内容如下​:就是把原来的URL变量,直接用​URL内容替换了。

let
Base64Encode = (str as text) => Binary.ToText(Text.ToBinary(str, BinaryEncoding.Base64)),
CreateContinuationTokens = (partitionkey as text, rowkey as text) =>
let
tokenPrefix = "1",
combineToken = "!",
encodedPartition = Base64Encode(partitionkey),
encodedRow = Base64Encode(rowkey),
nextPartKey = Text.Combine({tokenPrefix, Text.From(Text.Length(encodedPartition)), encodedPartition}, combineToken),
nextRowKey = Text.Combine({tokenPrefix, Text.From(Text.Length(encodedRow)), encodedRow}, combineToken),
result = [ NextPartitionKey = nextPartKey, NextRowKey = nextRowKey]
in
result,
Func = (query as record, optional continuationTokens as record) =>
let
queryCombine = if continuationTokens = null then query else Record.Combine({query, continuationTokens}),
result = Json.Document(Web.Contents("https://storagename.table.core.windows.net/tablename", [ Headers=[Accept="application/json;odata=nometadata"], Query = queryCombine ])),
resultAsList = result[value],
lastInList = List.Last(resultAsList),
tokens = CreateContinuationTokens(lastInList[PartitionKey], lastInList[RowKey]),
resultList = if List.Count(resultAsList) > 1 then List.Combine({resultAsList, #"RecursiveTableStorag-ASA"(query, tokens)}) else resultAsList
in
resultList
in
Func

所以相应的Query里面的内容也要变化。去掉了​URL内容。

let
queryParameters = [ st = "2019-08-20T10:00:00Z",
se = "2030-08-25T10:00:00Z",
sp = "r",
sv = "2018-05-30",
tn = "tablename",
sig = "abcdefghijklmnopqrstuvwxyz"
],
tabledata = Table.FromRecords(RecursiveTableStorage(queryParameters)),
distinctRows = Table.Distinct(tabledata, {"PartitionKey", "RowKey"}),
in
distinctRows

Power BI Desktop里面的内容就修改​完成了。

发布到​Power BI Server之后。

在Datasets里的Data source credentials 里面找到Edit credentials. 

2.5.png

​配置如下内容:

2.6.png

之后就可以schedule refresh了​。很不错吧。

2.7.png

谢谢关注,转发分享。

05m.jpg

谢谢你的关注。​我会继续努力的!

推荐 0
本文由 懒胖子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册