具有组织层次结构Power BI的动态行级安全性
Remark:以下RLS基于username构建
1. username RLS一般做法
1)先构建基础数据表,如下:
(注:@gmail这儿,一定要换成自己组织的邮箱后缀。因为后续应用时,还需要在service端配置,而非组织内邮箱后缀的账户无法添加)
2) 新建username 度量值
3)新建角色
4)在Service端设置邮箱(可以先跳到步骤5测试,实际使用需要service端配置账号)
5)在desktop中测试看结果
2. 具有组织结构层级的话,RLS如何构建
需要用到path函数
path函数效果可参考:
https://www.jianshu.com/p/5b51a39976ce
思路是:用path将员工的层级结构列出来,在建立role时,只要层级里包含当前用户就能显示出来
1)构建表格
2)为角色表新增一列path路径
3)新建角色
4)看结果
3. 多条件情况下的RLS
如果多筛选条件来自多个表格:
4. 有些指标希望是全局指标,而非当前用户的
1)这个时候没法用all函数,加载的数据只是当前用户的数据
2)解决方法一: 可以不使用RLS,自己用DAX构建RLS(因为RLS的本质其实用TRUE/False筛选表格)
eg.
Sales.role = CALCULATE( [销售 销售额] , FILTER( '权限表' , '权限表'[PowerBI账号] = [用户 当前用户] ) )
--[用户 当前用户] = username()
缺点是,度量值如果太多,那么每一个都要这么写,太累了
3) 解决方法二:将涉及到全局指标的表格,复制一份出来,不做权限控制
缺点是数据冗余
5. RLS故障排除
6. 一个用户,多个角色:
当一个用户被赋予多个角色时,是取并集。如上述截图,是返回了结果1并上结果2
报错排查:
在PQ里将空值替换成null
REFER TO:
https://mp.weixin.qq.com/s?__biz=MzI1MDA4MzcxMA==&mid=2650781832&idx=1&sn=c109316cab83d68c77926ccd66802712&chksm=f18cb899c6fb318ffa21d88dd8674eaac61dddf177fd189de09d94b38f58851c06ff705fd146&scene=21
https://radacad.com/dynamic-row-level-security-with-organizational-hierarchy-power-bi
https://docs.microsoft.com/en-us/power-bi/guidance/rls-guidance