代碼下載 https://github.com/zengxinwen/PowerBI
視頻下載
鏈接:https://pan.baidu.com/s/1JbhCQMcfdbTYf-byKVPE7A
提取碼:8ytz
1.具體步聚
1.創建權限表 ,在模型中設置關聯
2.PowerBI 管理角色,並且設置限制的DAX表達式
2.通過權限
1.模型中,有 (用戶收入信息, 部門表, 用戶部門權限表 ,用戶表)
收入信息
部門表
用戶部門權限表
用戶表
模型的關系 (注意這里使兩個方向並且在兩個方向應用安全篩選器,都打上勾了)
2.選擇POWER BI菜單欄,建模, 管理角色
表達式 '用戶'[賬號]=USERPRINCIPALNAME()
表達式的含就是,是否等於獲得賬號, 這個USERPRINCIPALNAME() 可以獲得Power bi當前的郵箱。如果是power bi server 可以換成userName(),獲得windows 賬號
3.進行測試
針對通過權限,還有一種設計方法,不需要用戶表。
沒有,用戶表,沒有在兩個方向上應用篩選器。
表達式
'部門'[部門] =CALCULATE(VALUES('部門'[部門]),'權限'[賬號]=USERPRINCIPALNAME())
表達式 ,查詢當部門表當前行的部門ID 並且在權限表中當前賬號的部門ID的里面。
2.父子權限設置
父子權限關系圖如下:
1 在部門表中 創建父子路徑字段, 如圖所示 ,可以得到一個部門所屬節點的完整情況。

'部門'[部門] in
SELECTCOLUMNS ( Filter( GENERATE( filter('權限','權限'[賬號]=USERPRINCIPALNAME()) ,'部門'), PATHCONTAINS('部門'[路徑],'權限' [部門]) ),
"部門", '部門'[部門])
表達式分析。
1.GENERATE( 權限表等於當前用戶, 部門表) 這個兩個表進行cross join 得到新表
2.在新的基礎中進行過濾,過濾條件是 PATHCONTAINS('部門'[路徑],'權限' [部門])),"部門", '部門'[部門])
就是當前賬號,是不是在這個路徑中能找到, 這樣能能把所有含這個節點的路徑都找到,即找到所屬節點。
3. 在新表找到對應部門,然后用只在新表表中 部門字段
4.取出部門字段就 我們的所屬部門及本部門, 使用 in 表達式。
測試一下,我使用的我的賬號, 我是最高級,應該可以看到所有的。如圖所示