如何根据应用于另一个维度的 RLS 来过滤维度?

问题描述 投票:0回答:1

假设我有 3 个维度表和 1 个事实表。

暗淡用户

暗淡的客户

暗淡公司

事实销售

所有调光与从 1 -> M 侧流出的滤波器都具有 1:M 关系。

假设我在 DimUser 上配置了 RLS 过滤器(

[Username] = USERNAME()
),以便报表的用户可以根据电子邮件地址看到自己的数据,这样用户就可以在 DimUser 中看到自己的记录条目。因此,它也会自动过滤 FactSales,有效地用户将只能看到他的销售额。

但是用户可以在切片器中看到所有客户和公司。我想在 DimClients 和 DimCompany 上设置过滤器,以便用户只能看到他已进行销售的客户和公司。我怎样才能实现这个目标?

例如:

  1. 如何将 RLS 应用于 DimClients 和 DimCompany,以便它根据应用于 DimUsers 表的动态过滤器

    [Username] = USERNAME()
    仅过滤销售表中出现的 ClientId?

  2. 另一个选项是启用双向过滤,但这对于多个表是不允许的。

powerbi dax row-level-security
1个回答
1
投票

您可以创建一个如下所示的度量:

UserFlag =
CONTAINSSTRING (
    CONCATENATEX ( FactSales, RELATED ( DimUsers[UserEmail] ), "," ),
    USERNAME()
)

创建您的 RLS 角色并将此过滤器添加到每个维度。

[UserFlag] = True()

结果:如果维度中的一行与事实行相关,而事实行又与电子邮件与 USERNAME() 匹配的 DimUser 行相关,则度量返回“True”。因此 RLS 仅过滤这些行。

© www.soinside.com 2019 - 2024. All rights reserved.