Power BI多表关联场景下行级安全(RLS)分级查看权限配置咨询
多表关联模型行级安全(RLS)配置方案
你已经掌握的Email = USERPRINCIPLENAME()基础规则可以直接复用,不需要拆分原有Employee Roles表,按以下步骤配置即可满足所有权限要求:
1. 前置模型关系确认
先确认3张核心表的关联关系已正确配置:
- Employee表[员工ID] 一对多关联 Employee Roles表[员工ID],关系激活
- Groups表[组编码] 一对多关联 Employee Roles表[所属员工组编码],关系激活
- 所有员工业务明细表均多对一关联Employee表[员工ID],关系激活
2. 配置Employee表RLS规则
所有业务明细表均关联Employee表,只需在Employee表上配置1条RLS规则即可全局生效,规则的DAX代码如下:
VAR CurrentUserEmail = USERPRINCIPLENAME() // 获取当前登录用户对应的员工ID VAR CurrentEmpID = CALCULATE(MAX(Employee[员工ID]), Employee[邮箱] = CurrentUserEmail) // 获取当前用户作为主管管辖的所有Management类型组 VAR ManagedGroups = CALCULATETABLE( VALUES('Employee Roles'[所属员工组编码]), 'Employee Roles'[员工ID] = CurrentEmpID, 'Employee Roles'[功能角色] IN {"Primary Supervisor", "Backup Supervisor"}, RELATED(Groups[组类型]) = "Management" ) // 获取管辖组内所有普通员工(Worker)的ID VAR ManagedWorkerIDs = CALCULATETABLE( VALUES('Employee Roles'[员工ID]), 'Employee Roles'[所属员工组编码] IN ManagedGroups, 'Employee Roles'[功能角色] = "Worker" ) // 可见范围:用户自身 + 管辖的普通员工 RETURN Employee[员工ID] = CurrentEmpID || Employee[员工ID] IN ManagedWorkerIDs
注意:如果Groups表和Employee Roles表的关联为非激活状态,需要将
RELATED(Groups[组类型]) = "Management"替换为CALCULATE(MAX(Groups[组类型]), USERELATIONSHIP(Groups[组编码], 'Employee Roles'[所属员工组编码])) = "Management"。
3. 规则效果说明
该规则完全匹配你提出的3项权限要求:
- 主管仅可见自己和所负责Management组内的Worker数据,其他主管的角色不属于Worker,因此不在可见范围内
- 普通员工(Worker)没有管辖的组,
ManagedGroups返回空值,仅可见自身数据,看不到任何主管的信息 - 所有用户默认包含自身数据的可见权限
4. 验证方法
发布前可以在Power BI Desktop中直接测试:
- 点击「建模」选项卡 -「以角色身份查看」
- 选择你创建的RLS角色,输入测试用户的邮箱即可模拟对应权限,无需发布到服务后验证
内容的提问来源于stack exchange,提问作者Sarah B
相关产品推荐
相关产品推荐

