Power BI Desktop透過許可權表 動態控制資料許可權
目錄
資料準備
兩種許可權控制方式
在角色管理中輸入DAX表示式
新建度量值控制權限
一、資料準備
許可權表:(一層部門中寫ALL表示該使用者能看到所有一層部門的資料,二層部門寫ALL表示該使用者能看到所有二層部門的資料)
部門資訊表:
要達到的效果是根據使用者的許可權表給使用者展示相對應部門的資料
二、兩種許可權控制方式
在角色管理中輸入DAX表示式
建模 -> 管理角色 -> 建立 -> 選擇要進行資料許可權控制的表 -> 書寫許可權程式碼 -> 儲存
VAR First_Dept = CALCULATETABLE(
VALUES(‘許可權表’[一層部門]),‘許可權表’[使用者名稱]=USERPRINCIPALNAME())
/* 表示將許可權表中當前使用者所對應的一層部門資料賦值給變數First_Dept */
VAR Second_Dept = CALCULATETABLE(
VALUES(‘許可權表’[二層部門]),‘許可權表’[使用者名稱]=USERPRINCIPALNAME())
/* 表示將許可權表中當前使用者所對應的二層部門資料賦值給變數Second_Dept */
RETURN
OR(OR(
AND(“ALL” IN First_Dept,“ALL” IN Second_Dept),
AND(‘部門資訊表’[一層部門名稱] IN First_Dept,“ALL” IN Second_Dept)),
AND(‘部門資訊表’[一層部門名稱] IN First_Dept,‘部門資訊表’[二層部門名稱] IN Second_Dept)
)
/*
這裡返回值有三種情況,滿足任意一種即可返回相對應的資料:
1、許可權表中一層部門=“ALL”並且二層部門=“ALL”,則返回部門資訊表中的所有資料
2、許可權表中一層部門=“部門名稱”並且二層部門=“ALL”,則返回部門資訊表中一層部門名稱=“部門名稱”的資料
3、許可權表中一層部門=“部門名稱”並且二層部門=“部門名稱”,則返回部門資訊表中這兩個條件過濾後的資料
*/
然後進行測試:
建模 -> 透過以下身份檢視 -> 勾選其他使用者並輸入使用者名稱 同時勾選“許可權控制”角色 -> 確定
我們再檢查下其他使用者的資料檢視是否正確
因為部門資訊表中沒有公關部的資料,所以以Jack身份查看錶為空。
新建度量值控制權限
在部門資訊表中新建兩個度量值
一層部門許可權 =
VAR First_Dept = SELECTEDVALUE(‘部門資訊表’[一層部門名稱])
VAR Items = CALCULATETABLE(VALUES(‘許可權表’[一層部門]),
FILTER(‘許可權表’,‘許可權表’[使用者名稱]=USERNAME()))
RETURN OR(“ALL” IN Items,First_Dept IN Items)
二層部門許可權 =
VAR Second_Dept = SELECTEDVALUE(‘部門資訊表’[二層部門名稱])
VAR Items = CALCULATETABLE(VALUES(‘許可權表’[二層部門]),
FILTER(‘許可權表’,‘許可權表’[使用者名稱]=USERNAME()))
RETURN OR(“ALL” IN Items,Second_Dept IN Items)
然後也是需要建立一個角色
:建模 -> 管理角色 -> 建立 -> 選擇要進行資料許可權控制的表 -> 書寫許可權程式碼 -> 儲存
[一層部門許可權] = True()
&&
[二層部門許可權] = True()
然後再對使用者進行許可權測試。