具有NOT IN或NOT EQUAL規則的Power BI中的動態行級安全性


​具有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,打造出色分析體驗!

利用好這3個隱藏技巧,Power BI 開發體驗更絲滑

Power BI數據流——新圖表視圖

Power BI 11月功能更新 —— 視頻上線

如何自動播放 Power BI 移動應用的幻燈片

 

技術交流

1.Power BI免費下載:http://www.yeacer.com/

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

2.歡迎加入的Power BI技術群,目前正在學習階段,有興趣的朋友可以一起學習討論。 

   Power Data技術交流群:702966126 (驗證注明:博客園Power BI) 

   更多精彩內容請關注微信公眾號:悅策PowerBI          


如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載。


免責聲明!

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



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