Power BI 系列 - 权限设计 通用权限, 父子权限(导入方式)

代码下载 https://github.com/zengxinwen/PowerBI

视频下载   

链接:https://pan.baidu.com/s/1JbhCQMcfdbTYf-byKVPE7A 
 提取码:8ytz 

 

1.具体步聚

1.创建权限表 ,在模型中设置关联

2.PowerBI 管理角色,并且设置限制的DAX表达式

 

2.通过权限

1.模型中,有 (用户收入信息, 部门表, 用户部门权限表 ,用户表)

收入信息

 

 

 部门表

 

 

   用户部门权限表

 

 

 用户表

 

模型的关系 (注意这里使两个方向并且在两个方向应用安全筛选器,都打上勾了)

 

 

 2.选择POWER BI菜单栏,建模, 管理角色

表达式  '用户'[账号]=USERPRINCIPALNAME()

表达式的含就是,是否等于获得账号, 这个USERPRINCIPALNAME() 可以获得Power bi当前的邮箱。如果是power bi server 可以换成userName(),获得windows 账号

 

 

  

  3.进行测试

 

 

 

针对通过权限,还有一种设计方法,不需要用户表。

 没有,用户表,没有在两个方向上应用筛选器。

 

 

表达式

'部门'[部门] =CALCULATE(VALUES('部门'[部门]),'权限'[账号]=USERPRINCIPALNAME())

表达式 ,查询当部门表当前行的部门ID 并且在权限表中当前账号的部门ID的里面。

 

 

 

2.父子权限设置

父子权限关系图如下:

 

 

 1 在部门表中 创建父子路径字段, 如图所示 ,可以得到一个部门所属节点的完整情况。

 

 

路径 = PATH('部门'[部门],'部门'[父部门])
 
2.表达式

 

 

'部门'[部门] in
SELECTCOLUMNS ( Filter( GENERATE( filter('权限','权限'[账号]=USERPRINCIPALNAME()) ,'部门'), PATHCONTAINS('部门'[路径],'权限' [部门]) ),
"部门", '部门'[部门])

  

表达式分析。

1.GENERATE( 权限表等于当前用户, 部门表)   这个两个表进行cross join 得到新表

2.在新的基础中进行过滤,过滤条件是 PATHCONTAINS('部门'[路径],'权限' [部门])),"部门",  '部门'[部门])

就是当前账号,是不是在这个路径中能找到, 这样能能把所有含这个节点的路径都找到,即找到所属节点。

3. 在新表找到对应部门,然后用只在新表表中 部门字段

4.取出部门字段就 我们的所属部门及本部门, 使用 in 表达式。  

 

测试一下,我使用的我的账号, 我是最高级,应该可以看到所有的。如图所示

 

 

 

 

posted @ 2019-09-02 13:41  曾新文  阅读(4380)  评论(0编辑  收藏  举报