Power BI 数据脱敏

场景1 模糊其他人的销售数据,但能看自己以及集体的真实数据,并显示排名

最终样式:


image.png

实现1

1)构建权限表


image.png

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即可。

以其他身份查看检验:


image.png

image.png

image.png

脱敏前后,数据一致。

场景2 造假数据,比如姓名为USER1、2等,薪资为随机数字

1)构建假数据列
eg.在PQ中构建了假的姓名列


image.png

并且再构造一个假的工资列(随机数)
先插入索引(⭐上一个步骤必须是索引,否则随机数是同一个数字)
然后添加自定义列如图


image.png

image.png

然后再添加一次索引,再删除上述过程中产生的索引列
(上述步骤也可以在pbi里做,不在pq里做)

2)应用后,在dax里面应用假数据列,并隐藏真实数据列


image.png

效果图
其中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")

然后再各列应用一下即可


image.png

image.png

其他待尝试:
将数据脱敏与组织层级结构结合起来

参考这个记录
//www.greatytc.com/p/5ba3efeb3b91
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容