如何在SSAS RLS中编写DAX公式实现门店员工数据权限控制
门店销售数据行级权限控制(SSAS)
问题背景
现有数据模型包含Y2_Stores、Y2_Sales表,表间通过storenumber/storename关联;后续新增Y2_StoreEmployee表并与Y2_Stores建立双向关联。需求是让门店员工仅能查看自身门店的销售数据,此前尝试的DAX规则未生效,以下是正确的实现方案。
方案1:仅基于Y2_Stores与Y2_Sales表
需在两个表分别配置行级安全规则,确保权限过滤传递:
- Y2_Stores表规则:筛选当前用户对应的门店
Y2_Stores[email] = USERPRINCIPALNAME()
- Y2_Sales表规则:匹配当前用户门店的销售数据
Y2_Sales[storenumber] = CALCULATE(VALUES(Y2_Stores[storenumber]), Y2_Stores[email] = USERPRINCIPALNAME())
注意:若两表为单向关系,必须同时设置两个表的规则;若为双向关系,仅设置Y2_Stores的规则即可自动过滤Y2_Sales数据。
方案2:新增Y2_StoreEmployee表后
假设Y2_StoreEmployee表包含employee_email(员工邮箱)、storenumber(关联门店编号)字段,与Y2_Stores双向关联,推荐以下配置:
- Y2_StoreEmployee表规则:筛选当前用户对应的门店权限
Y2_StoreEmployee[employee_email] = USERPRINCIPALNAME()
- Y2_Sales表规则(若关系为单向需添加,双向则可省略):
Y2_Sales[storenumber] = CALCULATE(VALUES(Y2_StoreEmployee[storenumber]), Y2_StoreEmployee[employee_email] = USERPRINCIPALNAME())
关键注意事项
- 确保
USERPRINCIPALNAME()返回的完整邮箱(如xxx@company.com)与表中存储的邮箱格式、大小写完全一致。 - 角色需设置为只读权限,并正确添加对应AD用户/组作为成员。
- 测试时必须使用对应员工账号登录验证,管理员账号默认不受行级安全限制。
内容的提问来源于stack exchange,提问作者Theo27
相关产品推荐
相关产品推荐

