Power BI页面级权限控制,其实只需要这3步
平时被经常问到的一个问题,就是PowerBI能不能按页面进行权限控制?比如A用户只允许查看报告的第2页,B用户只能查看第6页等,PowerBI本身是没有这个功能的,行级安全性(RLS)也是只能限制数据行,并不能按页面来控制。
不过既然行级别安全性能控制行,我们就利用这个特性,让每个页面的名称作权限表的行,不同的用户能看到不同的页面名称,然后利用导航跳转到对应的页面,不就可以实现了吗?这也正是本文页面级权限控制方案的基本思路。
运用这个方案需要先熟悉PowerBI的RLS功能,关于RLS我前面已经做了足够的铺垫,如果你还不熟悉,请先阅读这几篇文章:
下面就让我们开始吧。
以下面这个PowerBI报告为例,正文报告有4个页面,页面名称分别为整体、电脑外设、手机配件和智能设备:
1、导入权限表
首先在Excel中制作一个页面权限表:
在权限表中,张三可以查看电脑外设页、手机配件页;李四只能查看智能设备页;王五可以查看所有页面。
将这个表导入到PowerBI中,并利用PowerQuery的分列功能整理成下面的一维表样式:
其实你也可以按这个表的格式录入到Excel权限表,直接导入使用,不用在PowerQuery中整理了。
2、创建角色
创建一个新的角色"页面控制",表达式非常简单,直接在页面权限表添加一个筛选条件:
[账号] = USERNAME()
3、设计封面页
因为是按页面控制权限,这个报告中原有的4个页面不能直接展现,要全部隐藏起来,取而代之的是设计一个封面落地页,让用户先看到该页,然后再根据权限导航到相应的页面,所以,封面页非常重要。
在封面页中,利用权限表中的“页面权限”字段,添加一个切片器,这个切片的内容来自权限表,根据角色规则,它会随着不同的登录账户,返回不同的内容。
然后在切片旁边添加一个按钮:
设置按钮的操作属性:
在【类型】里选择“页导航”,【目标】里放置一个度量值,它的写法为:
页面导航 = SELECTEDVALUE( '页面权限表'[页面权限] )
这个度量值很简单,返回当前切片器的选项内容,但【目标】里可以放度量值,这个功能非常关键,可以说是这个解决方案不可或缺的一环,利用它,才可以实现点击按钮,导航到切片器所选的那一页。
至此,所有的关键节点都已经部署完成。
关于封面页,既然是每个用户打开报告第一眼就看到的,要尽量做的高上大,可以找张图片在PPT中设计好,作为封面页的背景,将切片器和导航放置到相应的位置上,一个按页面级权限控制的报告就设计好了:
还可以用度量值将当前登录的用户名显示出来放到封面上:
当前登录用户名 =
CALCULATE(
MAX('页面权限表'[用户名]),
'页面权限表'[账号]=USERNAME()
)&""
然后将这个报告发布到相应的工作区中就可以了。
某个夏日的午后,张三喝着咖啡,打开电脑,登录自己的PowerBI账户,查看他负责的业务进展情况:
一切都是那么的自然。
全神贯注的他,浑然不觉此时的李四,也打开了这个报告,看着与他完全不同的内容……
同样,当有用户需要调整页面权限时,只需要在Excel中更改就行了,如果不在权限列表中的用户,也打开了这个报告,那么他只能欣赏一下封面,什么都看不了:
这个方案并不复杂,灵活运用了PowerBI中的常用功能,行级安全性是灵魂,动态页导航是关键。
本文介绍有总体思路,也详细描述了操作细节,希望能帮你设计一个页面级权限控制的PowerBI报告。