需求描述:
某些特殊的場(chǎng)景下处渣,針對(duì)某頁看板伶贰,需要進(jìn)行數(shù)據(jù)權(quán)限卡控,但是又不能對(duì)全部的數(shù)據(jù)進(jìn)行RLS處理罐栈,這種情況下可以利用計(jì)算組來解決這個(gè)需求黍衙。
實(shí)際場(chǎng)景
事實(shí)表包含產(chǎn)品維度和銷售維度
兩個(gè)維度屬于同一公司下面的不同架構(gòu)體系
要求用戶在查看不同頁面的時(shí)候,根據(jù)
不同的體系進(jìn)行控權(quán)
案例數(shù)據(jù)
數(shù)據(jù)比較簡(jiǎn)單荠诬,分別是銷售維度琅翻、產(chǎn)品維度位仁、事實(shí)表以及權(quán)限表。
模型關(guān)系如下圖:
構(gòu)建基礎(chǔ)度量值:
Amt =
SUM ( 'Fact'[銷售金額] )
Qty =
SUM ( 'Fact'[銷售數(shù)量] )
將其拖拽出來方椎,如下:
為了方便給大家展示聂抢,白茶這里拖拽了兩個(gè)一模一樣的圖表。
注意辩尊,不單是頁面權(quán)限涛浙,針對(duì)不同可視化的數(shù)據(jù)權(quán)限控制辦法也是一樣的。
解決思路
利用DAX函數(shù)摄欲,復(fù)制銷售維度和產(chǎn)品維度
不與其他表建立模型關(guān)系
配置RLS權(quán)限
VAR AccessCount =
CALCULATETABLE ( VALUES ( 'Access'[產(chǎn)品權(quán)限] ), 'Access'[用戶姓名] = USERNAME () )
RETURN
'RLS_Product'[產(chǎn)品] IN AccessCount
VAR AccessCount =
CALCULATETABLE ( VALUES ( 'Access'[銷售權(quán)限] ), 'Access'[用戶姓名] = USERNAME () )
RETURN
'RLS_Dep'[銷售代表] IN AccessCount
添加計(jì)算組
打開Tabular轿亮,選擇創(chuàng)建計(jì)算組
CALCULATE (
SELECTEDMEASURE (),
KEEPFILTERS ( TREATAS ( VALUES ( 'RLS_Product'[產(chǎn)品] ), 'Dim_Product'[產(chǎn)品] ) )
)
CALCULATE (
SELECTEDMEASURE (),
KEEPFILTERS ( TREATAS ( VALUES ( 'RLS_Dep'[銷售代表] ), 'Dim_Dep'[銷售代表] ) )
)
到這里,我們的所有設(shè)置基本完成
效果如下
回到PowerBI的兩個(gè)頁面胸墙,分別添加計(jì)算組到頁面篩選
我們代入一下T1這個(gè)用戶來看看兩個(gè)頁面的數(shù)據(jù)
產(chǎn)品權(quán)限
銷售權(quán)限
補(bǔ)充
如果使用RLS配置角色直接控制銷售維度和產(chǎn)品維度我注,那么
整個(gè)數(shù)據(jù)模型
都會(huì)進(jìn)行過濾一個(gè)RLS設(shè)置兩張表,二者是
取交集
兩個(gè)RLS設(shè)置兩張表迟隅,二者是
取并集
DAX中
沒有函數(shù)
可以獲取到用戶的RLS角色名稱可視化組件的權(quán)限設(shè)置與上面一致但骨,區(qū)別在于卡控的是單獨(dú)的
可視化篩選
,而不是頁面篩選