
需求描述:
某些特殊的場(chǎng)景下,針對(duì)某頁(yè)看板,需要進(jìn)行數(shù)據(jù)權(quán)限卡控,但是又不能對(duì)全部的數(shù)據(jù)進(jìn)行RLS處理,這種情況下可以利用計(jì)算組來解決這個(gè)需求。
實(shí)際場(chǎng)景
事實(shí)表包含產(chǎn)品維度和銷售維度
兩個(gè)維度屬于同一公司下面的不同架構(gòu)體系
要求用戶在查看不同頁(yè)面的時(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è)一模一樣的圖表。
注意,不單是頁(yè)面權(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è)頁(yè)面,分別添加計(jì)算組到頁(yè)面篩選


我們代入一下T1這個(gè)用戶來看看兩個(gè)頁(yè)面的數(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ú)的
可視化篩選,而不是頁(yè)面篩選

