• DAX创建带有过滤器的超链接


     

    在这篇文章中,我们将创建一个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/ 
    Fancy
  • 相关阅读:
    繁体解决方案一,ASP,JSP,PHP,DotNet任何开发通用
    18.观察者模式(Observer Pattern)
    存储过程小技巧(2)从动态查询SQL中返回值给变量
    DotNet学习
    询问:有没有用C#写的C/S模式下的网页编辑工具
    dotNet繁体解决方案
    svn感叹号大全
    svn中出现红色感叹号
    Varnish配置,Error 503解决之道
    varnish清除缓存的方法
  • 原文地址:https://www.cnblogs.com/yeacer/p/10308555.html
Copyright © 2020-2023  润新知