DAX分享23:数据集Datasets中添加参数Parameter

浏览: 54

咬牙在复活节之前把项目上线了,最近事情不多,准备弄弄增量更新。突然发现现在Datasets数据集里面的parameter已经很不错了。先来一篇Datasets数据集里面的Parameter应用来预预热。节后发增量更新的内容。

  • 功能实现概述

    datasets数据集里面的参数,主要是创建于Power BI Desktop中。当报表发布到Power BI Server之后,在Datasets setting里面可以随意改变参数Parameter。   


  • 应用场景

    当以平面文件为数据源,可以把平面文件的路径path作Parameter,当路径修改的时候,不需要打开Power BI的pbix文件,直接修改路径的parameter就可以了。

    还有比如,数据量很大(不是上亿条每天的那种,那种还是增量更新更划算一些)的Power BI报表,一般我们可以在Power BI Server上定时刷新,其实速度还是可以的。但是,import的报表数据,需要在本地刷一次才能保存修改,然后上传到Power BI Server上。有时候数据量太大,这一次刷新会消耗很多时间。这时巧用Parameter是个不错的选择。

    再者,之前写的SASURL的数据源,也可以创建Parameter,然后将Parameter写在function和M Query里面。等SAS token过期的时候,就不用再打开报表修改啦~~


  • 3. 实战应用

a. 以平面文件为数据源。

  1. 导入Excel数据源

     

    导入完成后,查看Transform data

点击Advanced Editor

得到如下内容:

let
Source = Excel.Workbook(File.Contents("C:\Users\YA\Desktop\study\DAX分享\DAX分享23\datasource.xlsx"), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"StoreKey", Int64.Type}, {"ProductKey", Int64.Type}, {"CustomerKey", Int64.Type}, {"Quantity", Int64.Type}, {"Unit Price", type number}, {"Unit Discount", Int64.Type}, {"Unit Cost", type number}, {"Net Price", type number}, {"Order Date", type datetime}, {"Due Date", type datetime}, {"Delivery Date", type datetime}, {"Sales Amount", type number}, {"Order Year Month", type date}, {"Order Year Month sort", Int64.Type}})
in
#"Changed Type"

2.  创建变量

点击Transform data->Transform data

点击Manage Parameters里面的New Parameter

为Excel源数据路径创建一个parameter

这里数据类型,选择Text类型。OK。如果要修改Parameter,可以直接点击Manage Parameter来修改。

3. 用Parameter替换原来的路径内容

let
Source = Excel.Workbook(File.Contents(P_Path), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"StoreKey", Int64.Type}, {"ProductKey", Int64.Type}, {"CustomerKey", Int64.Type}, {"Quantity", Int64.Type}, {"Unit Price", type number}, {"Unit Discount", Int64.Type}, {"Unit Cost", type number}, {"Net Price", type number}, {"Order Date", type datetime}, {"Due Date", type datetime}, {"Delivery Date", type datetime}, {"Sales Amount", type number}, {"Order Year Month", type date}, {"Order Year Month sort", Int64.Type}})
in
#"Changed Type"

对于没有paramter的报表,在Transform data里面看到的"Edit parameters是灰色的。创建之后就会变成下面的样子。创建之后可点这里修改​。

4. 完成之后保存报表并发布到Power BI。在此,我发布到了test group这个workspace。我用的是Pro的账号。


发布完成。

5. 在Datasets里面修改Parameter

首先定位到workspace。在test group这个workspace里面找到parameter-file1这个datasets。右面竖向三个点,右键Settings.

得到下面的页面

23.17.png

当修改了屏幕文件的路径的时候,只要在这个页面上修改就可以了。非常方便。修改文件里面的内容,麻烦移步pbix内。

b. 这个如果应用在SASURL的项目里,就更好啦。不知道什么是SASURL的可以参考以下内容:

学习笔记1:Power BI访问SASURI获取数据

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

按照以上介绍的方法,加载数据源,创建Parameter。

主要创建了link以及st,se,sv,tn和sig几个参数如下:

打开函数function的advanced editor,配置到Function中,如下图所示

直接抄下面所有内容就好~~记得改函数名(RecursiveTableStorag-ASSA)哦~~

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(link, [ Headers=[Accept="application/json;odata=nometadata"], Query = queryCombine ])),
resultAsList = result[value],
lastInList = List.Last(resultAsList),
tokens = CreateContinuationTokens(lastInList[PartitionKey], lastInList[RowKey]),
a1 = List.Combine({resultAsList, #"RecursiveTableStorag-ASSA"( query, tokens)}),
a2 = resultAsList,
resultList = if List.Count(resultAsList) > 1 then a1 else a2
in
resultList
in
Func

修改table的M Query部分,用参数代替具体值

看的仔细的小伙伴,肯定发现,我还多一个daterange_end的参数。

这个参数主要是控制上传到Power BI Server的数据范围。SASURL数据源里面的数据太多了。所以创建了一个据今天多少天的column,然后只上传部分数据,节省在本地加载数据的时间,然后在Power BI Server上修改变量,来加载更多的数据。这个距今天多少天的​column定义如下:

部分M Query代码如下:

   #"Added Custom3" = Table.AddColumn(#"Changed Type", "datediff", each Duration.Days([Date]-[Today])),
#"Filtered Rows1" = Table.SelectRows(#"Added Custom3", each [datediff] <= daterange_end)

一切就绪,发布到Power BI Server上,在Datasets的Setting里

还不错哦~~以后这个SAS token过期了,就不用打开pbix修改了,直接在Power BI上面就可以修改了。挺方便的~~


今天写的有点多了~~

感谢关注~~

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

0 个评论

要回复文章请先登录注册