2.28 PowerBI数据建模-动态行级别权限(CONTAINSSTRING+USERPRINCIPALNAME)

加入 PowerBI自己学 知识星球:下载源文件,边学边练;遇到问题,提问交流,有问必答。

在建模的管理角色中使用默认编辑器向导设置行级别权限,只能对字段做简单筛选,如何使用包含判断和调用登录用户名实现动态权限呢?

解决方案  

行级别权限的本质是给模型套上一个大的筛选上下文。按照角色对权限表进行筛选,借助关系传递,实现对整个模型的筛选。对权限表的筛选相当于给权限表设置了一个FILTER(权限表, 条件表达式)。筛选条件切换到DAX编辑器中,可以直接在文本框中输入筛选表达式。在表达式中:

1 可以用CONTAINSSTRING实现包含判断,也可以用FIND或SEARCH函数,返回的数字大于0就是包含, CONTAINSSTRING的性能更高。

2可以用USERPRINCIPALNAME调用登录的用户名,然后拿它和权限表中的用户名相关列去做比较进行筛选就是动态权限。从登录邮箱账号中提取用户名的代码如下:

VAR _vm_position = FIND("@",USERPRINCIPALNAME())

RETURN LEFT(USERPRINCIPALNAME(),_vm_position-1)

举例

使用省份权限表给用户分配权限,一个省份会对应多个用户,每个省份的多个用户出现在同一个单元格里,按登录的用户名分配动态的行级别权限。

模型

省份权限表

操作步骤

STEP 1 点击菜单栏建模下的管理角色;在跳出的窗口中,点击新建角色,为角色命名;点击右上角的切换到DAX编辑器,切换到筛选表达式的代码界面。

STEP 2 选中省份权限表,输入筛选表达式的代码。

VAR _vm_position = FIND("@",USERPRINCIPALNAME())

VAR _vm_username = LEFT(USERPRINCIPALNAME(),_vm_position-1)

RETURN CONTAINSSTRING([用户],_vm_username)

STEP 3 调试。点击菜单栏建模下的通过以下身份查看,在跳出的窗口中,同时选择省份权限和其他用户,输入用户邮箱。

以用户yi.zheng@abc.com登录,报告中返回他负责的两个省份的数据:

以用户er.song@abc.com登录,报告中返回他负责的北京的数据:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值