在PowerBI中对数据权限的管控主要通过两个方式:
报表权限:是否有权限访问我的链接,这类的管控一般是通过账号来实现,拥有账号你可以访问报表.
数据权限:另外一种就是通过对数据的行级别进行管控,也就是常说的RLS,这种实现方式主要是通过对登录报表的访问者的账号进行识别,通过开发报表时候准备的权限表返回相应的数据,也就是说,不是不给你看数据,而是给你看多少数据、看什么样的数据。
管控方式:如何实现RLS的权限管控?主要是通过对维度表的管控实现,这里面需要一张权限表来对不同的用户进行权限划分。我们通过几个案例对权限管控进行详细说明。
单维度权限管控:
业务场景:假设城市经理只能看到其相应城市的数据,区域经理能够看到其负责的城市数据,总经理可以全看到全部城市的数据。
解决方案:可以使用下面这个权限管控方案,在地区维度表上下对城市列进行权限管理。
演示案例:下面截图1,用户拥有ALL权限,所以可以查询到全部省份的数据。截图2,用户拥有长沙城市的数据权限,只能看到长沙的数据。
VAR city = CALCULATETABLE(VALUES('权限表'[城市]),'权限表'[员工邮箱]=USERPRINCIPALNAME())RETURNOR("ALL"in city,[城市] in city)


分层级混合权限
业务场景:假设A省经理能够查看A省的数据,同时,也能查看其他省份的部分城市的数据。
解决方案:需要修改权限表,增加1个层级字段1代表城市,0代表省份
演示案例:这里我们让这个用户既有访问湖北省的数据也能够访问北京和广州两个城市的数据。
VAR city = CALCULATETABLE(VALUES('混合权限'[城市]),'混合权限'[员工邮箱]=USERPRINCIPALNAME(),'混合权限'[层级]=1)VAR province = CALCULATETABLE(VALUES('混合权限'[城市]),'混合权限'[员工邮箱]=USERPRINCIPALNAME(),'混合权限'[层级]=0)RETURNOR(OR("ALL"in city,[城市] in city),[省份] in province)

多维度分层级权限
业务场景:上面我们介绍的都是按照地区来控制数据的权限,假设我们需要再增加一个或者多个维度来对数据权限进行管控,比如说,我想让A省区的人只能看到产品大类是M的数据。
解决方案:需要再次修改权限表,增加Dimension字段,这个时候我们需要在不同的维度表中建立权限空值,按照我们这个场景中,需要在地区维表和产品维表进行不同的权限控制,注意这里我们仍然使用的是一个角色,不要多个角色。
下面截图的示例是我当前访问的账号只能查看省份是湖北的数据,产品为办公用品的数据,也就是对两个维度进行了管控。
===控制产品品类的角色VAR category = CALCULATETABLE(VALUES('多维度分层级'[品类]),'多维度分层级'[员工邮箱]=USERPRINCIPALNAME())RETURN[类别] in category===控制地点角色VAR city = CALCULATETABLE(VALUES('多维度分层级'[城市]),'多维度分层级'[员工邮箱]=USERPRINCIPALNAME(),'多维度分层级'[层级]=1)VAR province = CALCULATETABLE(VALUES('多维度分层级'[城市]),'多维度分层级'[员工邮箱]=USERPRINCIPALNAME(),'多维度分层级'[层级]=0)RETURNOR(OR("ALL"in city,[城市] in city),[省份] in province)

数据权限代替报表权限
业务场景:PowerBI Report Server的权限管理中,对报表访问的权限设置安全性,每次都需要一个个的配置员工的工号或者邮件,能否批量设置?
解决方案:实际上这里面是对报表权限进行管控,我们可以将报表权限设置成为everyone权限后,直接在权限表里面设置对应的权限,如果这个人在权限表中,则有访问数据的权限或者访问部分数据的权限,这个比较容易我们就不再赘述。




