加入 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登录,报告中返回他负责的北京的数据: