具有組織層次結(jié)構(gòu)Power BI的動(dòng)態(tài)行級安全性
Remark:以下RLS基于username構(gòu)建
1. username RLS一般做法
1)先構(gòu)建基礎(chǔ)數(shù)據(jù)表,如下:
(注:@gmail這兒,一定要換成自己組織的郵箱后綴肢执。因?yàn)楹罄m(xù)應(yīng)用時(shí),還需要在service端配置译红,而非組織內(nèi)郵箱后綴的賬戶無法添加)
2) 新建username 度量值
3)新建角色
4)在Service端設(shè)置郵箱(可以先跳到步驟5測試预茄,實(shí)際使用需要service端配置賬號)
5)在desktop中測試看結(jié)果
2. 具有組織結(jié)構(gòu)層級的話,RLS如何構(gòu)建
需要用到path函數(shù)
path函數(shù)效果可參考:
http://www.reibang.com/p/5b51a39976ce
思路是:用path將員工的層級結(jié)構(gòu)列出來侦厚,在建立role時(shí)耻陕,只要層級里包含當(dāng)前用戶就能顯示出來
1)構(gòu)建表格
2)為角色表新增一列path路徑
3)新建角色
4)看結(jié)果
3. 多條件情況下的RLS
如果多篩選條件來自多個(gè)表格:
4. 有些指標(biāo)希望是全局指標(biāo),而非當(dāng)前用戶的
1)這個(gè)時(shí)候沒法用all函數(shù)刨沦,加載的數(shù)據(jù)只是當(dāng)前用戶的數(shù)據(jù)
2)解決方法一: 可以不使用RLS诗宣,自己用DAX構(gòu)建RLS(因?yàn)镽LS的本質(zhì)其實(shí)用TRUE/False篩選表格)
eg.
Sales.role = CALCULATE( [銷售 銷售額] , FILTER( '權(quán)限表' , '權(quán)限表'[PowerBI賬號] = [用戶 當(dāng)前用戶] ) )
--[用戶 當(dāng)前用戶] = username()
缺點(diǎn)是,度量值如果太多已卷,那么每一個(gè)都要這么寫梧田,太累了
3) 解決方法二:將涉及到全局指標(biāo)的表格,復(fù)制一份出來侧蘸,不做權(quán)限控制
缺點(diǎn)是數(shù)據(jù)冗余
5. RLS故障排除
6. 一個(gè)用戶裁眯,多個(gè)角色:
當(dāng)一個(gè)用戶被賦予多個(gè)角色時(shí),是取并集讳癌。如上述截圖穿稳,是返回了結(jié)果1并上結(jié)果2
報(bào)錯(cuò)排查:
在PQ里將空值替換成null
REFER TO:
https://mp.weixin.qq.com/s?__biz=MzI1MDA4MzcxMA==&mid=2650781832&idx=1&sn=c109316cab83d68c77926ccd66802712&chksm=f18cb899c6fb318ffa21d88dd8674eaac61dddf177fd189de09d94b38f58851c06ff705fd146&scene=21
https://radacad.com/dynamic-row-level-security-with-organizational-hierarchy-power-bi
https://docs.microsoft.com/en-us/power-bi/guidance/rls-guidance