在这篇文章中,我们将创建一个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. linux基础之grep

    grep: Global search REgular expression and Print out the line 作用: 文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查,打印匹配 ...

  2. 面试必问的SpringCloud实现原理图

    引言 面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展. 以下是 课 ...

  3. Java中的CAS实现原理

    一.什么是CAS? 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令. 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新 ...

  4. Speak Confident English

      I hope you don'd mind me asking...   I know I shouldn't ask, but.... - Well, before I answer that ...

  5. 《Practical Vim》第五章:命令行模式

    前言 出于历史原因,命令行模式又叫 Ex 模式,它具有的功能有: 读写文件:比如 :edit, :write 等等 创建标签页或者窗口:比如 :tabnew :split 操作缓存区,比如: bnex ...

  6. 《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码

    <HTTP 权威指南>笔记:第十六章 国际化 客户端通过在请求报文中的 Accept-Language 首部和 Accept-Charset 首部来告知服务器:“我理解这些语言.”服务器通 ...

  7. Iris 语录

    Iris:hello,Loki first congratulatioins to you to upgrade to V2You really did a big progress in v0 an ...

  8. eclipse get set 自动添加注释

    编码的时候通常要用到 JavaBean ,而在我们经常把注释写在字段上面,但生成的Get/Set方法不会生成,通过修改Eclipse源码可解决,直接上例子: /** * 员工ID */ private ...

  9. python和jupyter安装

    python官网:https://www.python.org/ 进去之后选择适合自己电脑的系统类型,安装,我的是windows  下载之后,双击打开 在安装时请勾选上add to path 选项,安 ...

  10. tensorflow和keras混用

    在tensorflow中可以调用keras,有时候让模型的建立更加简单.如下这种是官方写法: import tensorflow as tf from keras import backend as ...