場(chǎng)景1 模糊其他人的銷售數(shù)據(jù),但能看自己以及集體的真實(shí)數(shù)據(jù),并顯示排名
最終樣式:

image.png
實(shí)現(xiàn)1
1)構(gòu)建權(quán)限表

image.png
2)度量值
①先判斷是否需要隱藏?cái)?shù)據(jù)
Measure.IsMask =
--是否有所有的權(quán)限
VAR ifAllAccess =
IF (
CONTAINS (
MaskControlTable,
MaskControlTable[User to check], USERPRINCIPALNAME(),
MaskControlTable[view salesman], "All"
),
TRUE (),
FALSE ()
)
--是否具有權(quán)限
VAR ifHasAccess =
IF (
CONTAINS ( MaskControlTable, MaskControlTable[User to check], USERPRINCIPALNAME() ,
MaskControlTable[view salesman],SELECTEDVALUE(Sheet1[Salesman])
),
TRUE (),
FALSE ()
)
--顯示小計(jì)數(shù)據(jù)
VAR totalVisible = COUNTROWS(DISTINCT(Sheet1[Salesman])) >2
RETURN
IF ( ifAllAccess || ifHasAccess || totalVisible, FALSE (), TRUE () )
②根據(jù)上述判斷,返回脫敏前/后的數(shù)據(jù)情況
Measure.Sales.Mask = IF([Measure.IsMask],"*",[Measure.sales])
Measure.Rank.Mask = IF([Measure.IsMask],"*",[Measure.Rank])
3)替換可視化對(duì)象中的measure并檢驗(yàn)
之后可視化對(duì)象中的measure換成mask后的measure即可。
以其他身份查看檢驗(yàn):

image.png

image.png

image.png
脫敏前后,數(shù)據(jù)一致。
場(chǎng)景2 造假數(shù)據(jù),比如姓名為USER1、2等,薪資為隨機(jī)數(shù)字
1)構(gòu)建假數(shù)據(jù)列
eg.在PQ中構(gòu)建了假的姓名列

image.png
并且再構(gòu)造一個(gè)假的工資列(隨機(jī)數(shù))
先插入索引(?上一個(gè)步驟必須是索引,否則隨機(jī)數(shù)是同一個(gè)數(shù)字)
然后添加自定義列如圖

image.png

image.png
然后再添加一次索引,再刪除上述過(guò)程中產(chǎn)生的索引列
(上述步驟也可以在pbi里做,不在pq里做)
2)應(yīng)用后,在dax里面應(yīng)用假數(shù)據(jù)列,并隱藏真實(shí)數(shù)據(jù)列

image.png
效果圖
其中Current User列動(dòng)態(tài)獲取,其他兩列就是剛造的假數(shù)據(jù)
Current User =
VAR RealName =
SELECTEDVALUE ( Dim_Employee_Salesman[SalesMan] )
VAR LoggingName =
USERPRINCIPALNAME ()
VAR MaskName =
SELECTEDVALUE ( Dim_Employee_Salesman[Masked Sales] )
RETURN
IF ( LoggingName = RealName, RealName, BLANK () )
顏色的話:
Current User.color = IF(NOT(ISBLANK([Current User])),"#FFFF00")
然后再各列應(yīng)用一下即可

image.png

image.png
其他待嘗試:
將數(shù)據(jù)脫敏與組織層級(jí)結(jié)構(gòu)結(jié)合起來(lái)
參考這個(gè)記錄
http://www.itdecent.cn/p/5ba3efeb3b91