Power BI静态RLS中如何为产品、品牌维度配置行级安全?
解决方案:数据集级RLS实现维度表(Products/Brand)的客户级过滤
针对你星型模型下RLS仅生效于Customers和Sales、但Products/Brand仍显示全量数据的问题,直接给这两个维度表添加基于事实表筛选上下文的RLS规则即可,具体操作如下:
给Products表添加RLS筛选器:
输入DAX表达式:=Products[ProductID] IN VALUES(Sales[ProductID])该规则会让Products表仅保留当前角色能看到的Sales数据中出现过的产品,借助Sales表已生效的RLS筛选上下文,把过滤逻辑传递到Products维度表。
给Brand表添加RLS筛选器:
由于Brand和Sales是通过Products间接关联的,不要直接关联Sales,而是基于已过滤的Products表做筛选,输入DAX表达式:=Brand[ID] IN VALUES(Products[BrandID])这样Brand表会自动继承Products表的RLS过滤结果,只显示当前客户对应的品牌。
为什么之前的Brand筛选器没生效?
你之前用=Brand['ID'] IN VALUES(Sales['BrandID'])无效,大概率是因为Sales表和Brand表没有直接的物理关联,导致筛选上下文无法从Sales传递到Brand。而通过Products中间表做关联,就能利用Products已有的RLS过滤结果,确保Brand只显示关联记录。
验证方法
在Power BI Desktop中点击「建模」选项卡的「查看为角色」,选择Walmart角色后检查Products和Brand表,应该只显示该客户下单过的产品及对应品牌;发布到Power BI服务后,对应角色的用户新建报表时,也只能看到过滤后的维度数据。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

