Power BI中基于PS_ACCESO_CENTRO表实现动态RLS按登录用户过滤中心数据
完全可以实现,这是动态行级别安全(RLS)的典型适用场景,具体实现步骤如下:
动态RLS实现策略
前置确认
你的表模型中PS_ACCESO_CENTRO表与Centros表已通过Center Code字段建立关联,符合RLS的联动过滤要求,参考模型图如下:
步骤1:校验权限表字段格式
- 确认
PS_ACCESO_CENTRO表中存储登录账号的字段值,格式与Power BI服务的用户主体名称(UPN)一致,通常为用户邮箱@企业域名.com格式,如果存储的是域账号,需要提前清洗转换为UPN格式 - 无需提前删除表内的重复用户记录,RLS逻辑会自动识别同一用户对应的所有中心编码权限
步骤2:创建RLS角色与筛选规则
在Power BI Desktop的「建模」选项卡点击「管理角色」,新建自定义角色(建议命名为中心访问权限角色),选中PS_ACCESO_CENTRO表,输入如下DAX筛选规则:
[存储登录账号的字段名] = USERPRINCIPALNAME()
如果你使用的是本地部署的Power BI报表服务器,可将
USERPRINCIPALNAME()替换为USERNAME()适配域账号验证逻辑
步骤3:配置跨表筛选逻辑
有两种可选方案实现PS_ACCESO_CENTRO到Centros表的联动过滤,二选一即可:
- 方案1:打开两表的关系编辑界面,将筛选方向调整为双向,并勾选「在双向筛选器中应用安全筛选器」
- 方案2:在RLS角色设置中选中
Centros表,新增如下DAX规则:
[Center Code] IN VALUES('PS_ACCESO_CENTRO'[Center Code])
步骤4:效果验证
在Power BI Desktop点击「建模」-「以角色身份查看」,选择创建好的角色,输入测试用户的账号,即可验证是否仅展示该用户有权限的中心数据。
部署到Power BI服务后,需要在数据集的「安全性」设置中,把需要访问报表的用户添加到对应RLS角色中,规则才会正式生效。
扩展提示
你提到的登录状态度量值可以配合RLS做异常提示,例如当用户无任何权限时,返回*您暂无对应中心的访问权限*的提示信息,提升使用体验。
内容的提问来源于stack exchange,提问作者Antoniooms
相关产品推荐
相关产品推荐

