利用Excel和这个函数,对PowerBI报告进行动态的权限控制

关于PowerBI的行级安全性,之前已经介绍过怎么用,如果你还没有看过,请先看一下这两篇文章:
利用Power BI行级安全性,限制用户访问权限
Power BI行级安全性三种常见的角色规则设置
有伙伴问能不能对每个账户的权限,进行动态的设置,让管理员能够更灵活的控制对每个用户的权限,而不用必须在角色设置里分别调整。
其实还有个DAX函数USERNAME,它可以获取当前登录的账户,利用它就能够灵活的控制权限,这个函数也主要用于行级安全性。
假如这是在Excel中维护的一个权限表,有这三个账户,每个人可以查看的权限如下:
以张三为例,它的权限是可以查看北京、上海的耳机和贴膜数据。将这个权限表,导入到需要控制权限的Power BI报告中,先在PowerQuery中将这个表整理一下。
因为在Excel中为了方便录入和管理权限列表,让每个账户的产品权限和城市权限都挤在一个单元格中,现在需要将他们分开,可以利用PowerQuery的分列功能"拆分到行"来处理,比如选中“产品权限”列,执行按分隔符拆分列:
关于分列,可参考:Powerquery数据处理:你应该会用到的分列技巧
对于“城市权限”列,也执行同样的操作,最终将数据整理如下:
权限表上载到模型后,不需要与其他表建立关系,而是写两个度量值:
产品权限 = VAR product_access=CALCULATETABLE( VALUES('权限表'[产品权限]), '权限表'[账号]=USERNAME() )RETURN SELECTEDVALUE('产品表'[产品名称]) IN product_access
这个度量值的逻辑是,通过当前登录的账户,筛选出它在权限表中可访问的产品名称列表,最后判断当前上下文的产品名称是否在这个列表内,返回一个布尔值。
同理,写一个城市权限的度量值。
城市权限 = VAR city_access=CALCULATETABLE( VALUES('权限表'[城市权限]), '权限表'[账号]=USERNAME())RETURN SELECTEDVALUE('客户表'[客户城市]) IN city_access
然后创建一个角色“权限动态控制”,分别在产品表和客户表写入以下筛选表达式:
这样,按权限表的动态控制就设计好了,可以用“张三”的身份测试,
效果如下:
和权限表中该账户的权限是一致的。
如果某个用户的权限需要调整,直接在Excel表中修改就可以,比如张三的权限增加“数据线”和“广州市”:
在PowerBI中无需再进行权限设置,只需要点击刷新,“张三”的报告就将显示为:
是不是非常灵活。
权限表可以根据自己的需要来设置,并不是必须是上面的格式,不过最终都要整理成类似一维表的样式,以方便获取当前用户的权限列表,并且权限表的格式一旦确定,不要随意改动,否则刷新可能会报错。
以上就是利用USERNAME和权限表动态分配权限的例子,利用这个特性,还可以有其他灵活的应用,下篇文章介绍一个更实用的技巧。
PowerBI商业数据分析
帮你从0到1,轻松上手PowerBI

(0)

相关推荐