在这篇文章中,我们将创建一个DAX公式,根据报表中的过滤器生成超链接。

该度量包含2个部分,第一部分是使用DAX生成目标报告的正确URL,第二部分是将过滤器传递给该报告。

浏览器支持的MAX网址长度定义为2040,但我认为2020年是安全的。

动态网址测量 =

// 将MAX URL长度设置为2020是安全的。

var maxURLLength = 2020

现在我们确定URL,我们以两种方式执行此操作,一次我们对URL进行硬编码,然后根据模型中的过滤器确定URL。因此,我们可以根据过滤器跳转到不同的页面。

为了结束URL,我们使用了一个虚假的过滤器,可以让以后更容易地将其他过滤器附加到URL,否则你将不得不做很多魔术:)。伪过滤器是指为此目的而创建的模型中的表和列,它与任何其他表无关,因此设置它没有任何效果,除了使URL更容易制作。如果您不将这些字段添加到模型中,则URL将返回错误。

现在让我们创建度量的URL部分:


01    

我们为每个页面使用一个硬编码的URL:

VAR reportURl =

“https://app.powerbi.com/groups/a4969cce-a7ed-4868-82c9-0c8901ab83c2/reports/6c48c42d-ec49-472c-a34f-3491ebdf7052/ReportSection1? filter = a / a = 1“

我们观察到在这里添加了a / a = 1只是为了启动过滤器,现在我们要做的就是追加。

在第二个选项中,我们根据报表中过滤器的选择构建URL,每个选项生成一个不同的URL。

我们使用DAX switch语句来测试设置了哪些过滤器。使用ISFILTERED函数,我们可以检查是否已在列上设置过滤器。在这种情况下,我们将URL基于报表中设置的某些过滤器,以便我们可以根据用户的选择引导用户。每个过滤器组合都针对不同的URL。

这看起来像这样:

var reportURl = SWITCH(TRUE(),

//是否有关于教育和货币的过滤器?

AND(ISFILTERED('顾客'[英语教育]), ISFILTERED('Currency'[货币名称]))

//链接到从Power BI复制的URL

, "https://app.powerbi.com/groups/a4969cce-a7ed-4868-82c9-0c8901ab83c2/reports/5g4tc42d-ec49-472c-a34f-3491ebdf4321/ReportSection1?"

//销售地区国家/地区和货币是否有过滤器?

,AND(ISFILTERED(SalesTerritory[销售地区国家]), ISFILTERED('Currency'[货币名称]))

,"https://app.powerbi.com/groups/a4969cce-a7ed-4868-82c9-0c8901ab83c2/reports/7c48c42d-ec49-472c-a34f-3491ebdf6543/ReportSection1?"

//如果他们都没有移动到默认URL

,"https://app.powerbi.com/groups/a4969cce-a7ed-4868-82c9-0c8901ab83c2/reports/8r65c42d-ec49-472c-a34f-3491ebdf7564/ReportSection1?"

) //打开过滤器并使用模型中隐藏的表\列来使用过滤器,以便更容易添加其他过滤器

& "filter=a/a=1"


02

最后,当定义URL时,我们需要根据屏幕上的选择传入所有过滤器。我们检查设置了哪些过滤器并创建了URL的一部分。每个过滤器的URL语法是“表/列IN('value1','value2')。

要构造过滤器URL,我们使用ISFILTERED检查已设置过滤器,如果是这种情况,我们创建一个以相应的表/列名称开头的URL过滤器和IN子句,以传递我们需要过滤的值列表上。我们使用CONCATENATEX和VALUES函数连接所有选定的值。

这将为这些选定的过滤器生成URL过滤器。在此示例中,我们添加了一些不同的过滤器。我们开始查看Country并生成查询字符串:

//过滤色谱柱时,请制作过滤器部件并添加该列的所有选定值

var countryfilter = IF(ISFILTERED(SalesTerritory[销售地区国家]), "Store/Territory in ('" & CONCATENATEX(VALUES('SalesTerritory'[销售地区国家]), 'SalesTerritory'[销售地区国家], "','") & "')")

我们对日期范围也这样做,在这种情况下,我们使用MIN和MAX来获得选择值的范围,我们使用le表示<=,ge表示>=。

//过滤色谱柱时,请制作过滤器部件并添加该列的所有选定值

var datefilter = IF(ISFILTERED('Date'[FullDateAlternateKey]), "Date/FullDateAlternateKey le " & MAX('Date'[FullDateAlternateKey]) & " and Date/FullDateAlternateKey gt " & MIN('Date'[FullDateAlternateKey]))

我们对要传递给新报告的所有过滤器重复此操作。 
生成所有过滤器后,我们将它们全部添加到URL。由于最大URL长度设置为2020,我们希望创建一些回退过滤器,以防所有过滤器都不符合最大长度。我们首先创建一些过滤器,然后在列表中添加更多过滤器。如果过滤器不为空,我们需要在URL中添加“and”以启动新过滤器。每个过滤器列表都会越来越长。

//创建URL,添加备份URL以防长度过长而过滤器较少

var URLfilter4 = reportURl & IF(LEN(countryfilter)>0, " and ") & countryfilter & IF(LEN(datefilter)>0, " and ") & datefilter

//B在短过滤器的基础上进行扩展,直到我们达到URL限制

var URLfilter3 = URLfilter4 & IF(LEN(educationFilter)>0, " and ") & educationFilter

var URLfilter2 = URLfilter3 & IF(LEN(promotionFilter)>0, " and ") & promotionFilter

var URLfilter1 = URLfilter2 & IF(LEN(currencyFilter)>0, " and ") & currencyFilter

最后,我们返回要在报告上使用的度量的完整URL。根据过滤器URL的长度,我们确定需要返回哪一个。如果我们没有符合条件的任何网址,我们会向用户抛出错误。在这种情况下,他不会看到URL,而是报告中的错误,他可以使用提供的消息单击该错误。

//根据URL的长度将URL返回到度量

return SWITCH(TRUE(),

//URLfilter1是否小于最大URL长度?

AND(LEN(URLfilter1)>=0, LEN(URLfilter1)<=maxURLLength) , URLfilter1 ,

//URLfilter2是否小于最大URL长度?

AND(LEN(URLfilter2)>=0, LEN(URLfilter2)<=maxURLLength) , URLfilter2 ,

//URLfilter3是否小于最大URL长度?

AND(LEN(URLfilter3)>=0, LEN(URLfilter3)<=maxURLLength) , URLfilter3 ,

//URLfilter4是否小于最大URL长度?

AND(LEN(URLfilter4)>=0, LEN(URLfilter4)<=maxURLLength) , URLfilter4 ,

//如果它们都不适合URL长度则向用户抛出错误

"" & ERROR("我们无法创建链接,请删除一些过滤器值,然后重试")

)

在这里我们可以观察做的“”和错误内容,这将确保度量的数据类型是一个文本,这是使度量返回TEXT所需的,因此我们可以将其标记为web url。

最终结果将是这样的URL:

https://app.powerbi.com/groups/a4969cce-a7ed-4868-82c9-0c8901ab83c2/reports/8r65c42d-ec49-472c-a34f-3491ebdf7564/ReportSection1?filter=a/a=1 and Store/Territory in ('加拿大') and Customer/English_x0020_Education in ('中学')

最后,我们需要将度量的数据类别设置为Web URL 就大功告成了

根据过滤器在Power BI中生成可单击的超链接:


1.Power BI免费下载:http://www.yeacer.com/

Microsoft Power BI Desktop中文最新版:下载地址

2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。

Power Data技术交流群:702966126 (验证注明:博客园Power BI)

更多精彩内容请关注微信公众号:悦策PowerBI


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/ 

DAX创建带有过滤器的超链接的更多相关文章

  1. 【百度地图API】如何快速创建带有标注的地图?——快速创建地图工具+如何标注商家

    原文:[百度地图API]如何快速创建带有标注的地图?--快速创建地图工具+如何标注商家 摘要: 如果你不会程序,如果你不想写代码. 如果你想拥有一张自己的地图,如果你想在该地图上标注出你商店的位置. ...

  2. NPOI-Excel系列-1002.创建带有Document Summary Information和Summary Information的Excel文件

    1. using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using Microsoft.VisualSt ...

  3. 创建带有IN类型参数的存储过程(四十八)

    创建带有IN类型参数的存储过程 我们经常要从数据表中删除记录,一般情况我们删除记录都是根据id来删除的,比如我们通常要输入DELETE FROM 表名 WHERE 后面跟上我们的条件,因为我们要经常写 ...

  4. 用 cctld工具创建带有国家代码的IP地址表

    用 cctld工具创建带有国家代码的IP地址表 cctld tools is creating IP addresses table with Country Code 项目地址 https://gi ...

  5. 如何创建带有大纲和书签的交互式web报表

    交互式报表允许用户与之交互.例如,报表可以包含超链接.书签和大纲.通过点击大纲部分的标题,你可以将书签导航到报表中的所需位置.这样的报表经常用在产品目录中.(查看更多web报表教程) 让我们为Web创 ...

  6. HTML <map> 标签-创建带有可点击区域的图像映射

    定义和用法 定义一个客户端图像映射.图像映射(image-map)指带有可点击区域的一幅图像. 所有主流浏览器都支持 <map> 标签. 注释:area 元素永远嵌套在 map 元素内部. ...

  7. [Swift通天遁地]三、手势与图表-(5)创建带有标题、图例、坐标轴的柱形图表

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. 使用storyboard创建带有navigation的界面的简单方法

    步骤1:正常创建1个新项目 步骤2:选中默认创建的viewcontroller 步骤3:选择最上面工具栏的editor->embedin->navigation controller. 同 ...

  9. 解决创建带有NameSpace的XML文件出现空白xmlns的问题

    为了能够让用户自行部署ClickOnce应用程序,需要编写一个生成ClickOnce应用程序的ClickOnce专用安装程序setup.exe,而生成这个setup.exe的方法就是编写一个XML格式 ...

随机推荐

  1. 用ab的post方式进行测试

    一.Ab是常用的性能测试工具,因为它支持windows…… 通常使用的命令是ab –c –n –k -r,分别表示:模拟终端数.发送包数.请求是否带keepalive.忽略错误,默认都是以GET方式去 ...

  2. Python assert断言

    assert断言:指定某个对象判断类型,不成立则报错. 使用环境  :接下来程序的执行,如果依赖前面的类型,不能报错的情况下使用. assert type(obj) is str print(&quo ...

  3. vijos 1605 双栈排序 - 贪心 - 二分图

    题目传送门 传送门I 传送门II 题目大意 双栈排序,问最小字典序操作序列. 不能发现两个数$a_{j}, a_{k}\ \ (j < k)$不能放在同一个栈的充分必要条件时存在一个$i$使得$ ...

  4. Linux统计文件中单词出现的次数

    grep -E "\b[[:alpha:]]+\b"  /etc/fstab  -o | sort | uniq -c 或 awk '{for(i=1;i<NF;i++){c ...

  5. 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。

    问题描述: 1.我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题. 2. 分析: swiper的机制是:初始化的时候将swiper ...

  6. Linux下更新Git

     查看git版本,卸载旧版本(如果没有安装git请直接到下一步) git --version yum remove git  安装依赖软件 yum install curl-devel expat-d ...

  7. JAVA中的值传递和引用传递问题

    这是个老生常谈的问题了,引起过无数争论,但可以说一直没有一个令人满意的回答. 有人总结过: 对象是按引用传递的 Java 应用程序有且仅有的一种参数传递机制,即按值传递 按值传递意味着当将一个参数传递 ...

  8. spring cloud 版本号与 boot版本之间的对应关系(版本不对,会导致pom无法引入)

    版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号. 开发代号看似没有什么规律,但实际上首字母是有顺序的,比如:Dalston版本,我们可以简称 D 版本,对应的 Edg ...

  9. MATLAB绘图功能(1) 二维高层绘图操作

    文末源代码 部分源代码 %% 基本绘图操作 x=:*pi; y=sin(x); plot(x,y); % 第二个参数为矩阵 y1=sin(x); y2=cos(x); y3=0.002*exp(x); ...

  10. postman(二):使用postman发送get or post请求

    总结一下如何使用postman发送get或post请求 请求 一.GET请求 通常用于请求服务器发送某个资源,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接 1.请求方 ...