具有NOT IN或NOT EQUAL規則的Power BI中的動態行級安全性當你應用動態行級安全性時,希望將條件設置為NOT EQUAL和NOT IN。在RLS的動態實現中,這可能會有些棘手,因為關系行為通常是相反的。在本文中,我們將講解如何做到這一點。
本文重點介紹一種不基於關系的模式。
示例說明
我們這里的示例模型包括兩個表,一個表用於銷售交易,另一個表用於銷售地區國家。基於國家的模型設計如下:
這將導致如下所示的可視化,每個可視化都有每個國家/地區的銷售額:
在此示例模型中,我們要應用行級安全角色,繼續下面內容。
行級安全要求
我們有一個用戶表,一個配置文件表,並且用戶和配置文件表之間的關系是多對多的。我們還有一個名為SalesTerritoryCountry Except的表,其中包含角色不應該包含的國家/地區列表。這是該表中的示例數據,如下:
用戶,配置文件和用戶配置文件表通過以下模型連接到該表,如下:
User和Profile表的多對多關系意味着我們需要在Profile表和User表下應用RLS規則。但是,此要求還有一件事,繼續下面內容。
(NOT equal or Not in)規則
在動態RLS模式中實現Except規則與正常情況有些不同。原因是Power BI中該關系的行為。Power BI中的關系意味着過濾,通過在RLS表和銷售模式中的表之間創建關系,我們創建了一種過濾方式,因為我只希望包含這些值。
如果要通過從表中選擇一個值來使EXCLUE發生在另一個表中,則不應創建該關系。
這就是為什么我們不應該在SalesTerritoryCountry Except表和DimSalesTerritory表之間創建關系,這也是此模式的不同部分。
DAX過濾器代替關系
如果我們不使用關系來應用過濾器,則意味着我們需要使用DAX來過濾值。標准將是過濾所有內容,但要過濾來自RLS表的值。如下Power BI中的角色定義將包括以下三個過濾器:
User表上的過濾器,用於獲取當前用戶的數據,如下:
Profile表上的另一個過濾器,因為該表沒有被多對多方案的單向關系過濾,如下:
DimSalesTerritory表上的最后一個過濾器,以實現EXCEPT規則,如下:
上面的DAX表達式是實現過濾器的方法之一。概括地說,這描述了最后一個表達式中發生的事情:
-
vProfileIds:這是一個表變量,包括該用戶有權訪問的所有配置文件ID。
-
vCountryExcept:這是一個表變量,其中包含所有國家/地區的列表,該列表由上一個變量的配置文件過濾。這些國家不包括在內。
-
返回值是所有不在上一個變量中的國家。
用角色身份查看報表
操作如下:
查看結果如下:
以上圖中所看到的,我的用戶(LAPTOP-V7EE3MD9\yeacer)有權訪問兩個配置文件,並且基於該配置文件,這三個國家/地區被過濾掉了。
小結一下
以上操作就是如何連接表以及如何使用適當的DAX過濾器在最佳模型上工作以獲得所需的內容輸出;以及和大家介紹了排除值的常見動態RLS模式。
推薦閱讀
Power BI + Azure Synapse,打造出色分析體驗!
技術交流
1.Power BI免費下載:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下載地址
2.歡迎加入的Power BI技術群,目前正在學習階段,有興趣的朋友可以一起學習討論。
Power Data技術交流群:702966126 (驗證注明:博客園Power BI)
更多精彩內容請關注微信公眾號:悅策PowerBI
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載。