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/ 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM