假设我有 3 个维度表和 1 个事实表。
暗淡用户
暗淡的客户
暗淡公司
事实销售
所有调光与从 1 -> M 侧流出的滤波器都具有 1:M 关系。
假设我在 DimUser 上配置了 RLS 过滤器(
[Username] = USERNAME()
),以便报表的用户可以根据电子邮件地址看到自己的数据,这样用户就可以在 DimUser 中看到自己的记录条目。因此,它也会自动过滤 FactSales,有效地用户将只能看到他的销售额。
但是用户可以在切片器中看到所有客户和公司。我想在 DimClients 和 DimCompany 上设置过滤器,以便用户只能看到他已进行销售的客户和公司。我怎样才能实现这个目标?
例如:
如何将 RLS 应用于 DimClients 和 DimCompany,以便它根据应用于 DimUsers 表的动态过滤器
[Username] = USERNAME()
仅过滤销售表中出现的 ClientId?
另一个选项是启用双向过滤,但这对于多个表是不允许的。
您可以创建一个如下所示的度量:
UserFlag =
CONTAINSSTRING (
CONCATENATEX ( FactSales, RELATED ( DimUsers[UserEmail] ), "," ),
USERNAME()
)
创建您的 RLS 角色并将此过滤器添加到每个维度。
[UserFlag] = True()
结果:如果维度中的一行与事实行相关,而事实行又与电子邮件与 USERNAME() 匹配的 DimUser 行相关,则度量返回“True”。因此 RLS 仅过滤这些行。