场景1 模糊其他人的销售数据,但能看自己以及集体的真实数据,并显示排名
最终样式:
实现1
1)构建权限表
2)度量值
①先判断是否需要隐藏数据
Measure.IsMask =
--是否有所有的权限
VAR ifAllAccess =
IF (
CONTAINS (
MaskControlTable,
MaskControlTable[User to check], USERPRINCIPALNAME(),
MaskControlTable[view salesman], "All"
),
TRUE (),
FALSE ()
)
--是否具有权限
VAR ifHasAccess =
IF (
CONTAINS ( MaskControlTable, MaskControlTable[User to check], USERPRINCIPALNAME() ,
MaskControlTable[view salesman],SELECTEDVALUE(Sheet1[Salesman])
),
TRUE (),
FALSE ()
)
--显示小计数据
VAR totalVisible = COUNTROWS(DISTINCT(Sheet1[Salesman])) >2
RETURN
IF ( ifAllAccess || ifHasAccess || totalVisible, FALSE (), TRUE () )
②根据上述判断,返回脱敏前/后的数据情况
Measure.Sales.Mask = IF([Measure.IsMask],"*",[Measure.sales])
Measure.Rank.Mask = IF([Measure.IsMask],"*",[Measure.Rank])
3)替换可视化对象中的measure并检验
之后可视化对象中的measure换成mask后的measure即可。
以其他身份查看检验:
脱敏前后,数据一致。
场景2 造假数据,比如姓名为USER1、2等,薪资为随机数字
1)构建假数据列
eg.在PQ中构建了假的姓名列
并且再构造一个假的工资列(随机数)
先插入索引(⭐上一个步骤必须是索引,否则随机数是同一个数字)
然后添加自定义列如图
然后再添加一次索引,再删除上述过程中产生的索引列
(上述步骤也可以在pbi里做,不在pq里做)
2)应用后,在dax里面应用假数据列,并隐藏真实数据列
效果图
其中Current User列动态获取,其他两列就是刚造的假数据
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")
然后再各列应用一下即可
其他待尝试:
将数据脱敏与组织层级结构结合起来
参考这个记录
//www.greatytc.com/p/5ba3efeb3b91