首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有NOT IN或NOT EQUAL规则的Power BI中的动态行级安全性

具有NOT IN或NOT EQUAL规则的Power BI中的动态行级安全性当你应用动态行级安全性时,希望将条件设置为NOT EQUAL和NOT IN。在RLS的动态实现中,这可能会有些棘手,因为关系行为通常是相反的。在本文中,我们将讲解如何做到这一点。

本文重点介绍一种不基于关系的模式。

示例说明

我们这里的示例模型包括两个表,一个表用于销售交易,另一个表用于销售地区国家。基于国家的模型设计如下:

这将导致如下所示的可视化,每个可视化都有每个国家/地区的销售额:

在此示例模型中,我们要应用行级安全角色,继续下面内容。

行级安全要求

我们有一个用户表,一个配置文件表,并且用户和配置文件表之间的关系是多对多的。我们还有一个名为SalesTerritoryCountry Except的表,其中包含角色不应该包含的国家/地区列表。这是该表中的示例数据,如下:

用户,配置文件和用户配置文件表通过以下模型连接到该表,如下:

User和Profile表的多对多关系意味着我们需要在Profile表和User表下应用RLS规则。但是,此要求还有一件事,继续下面内容。

(NOT equal or Not in)规则

在动态RLS模式中实现Except规则与正常情况有些不同。原因是Power BI中该关系的行为。Power BI中的关系意味着过滤,通过在RLS表和销售模式中的表之间创建关系,我们创建了一种过滤方式,因为我只希望包含这些值。

如果要通过从表中选择一个值来使EXCLUE发生在另一个表中,则不应创建该关系。

这就是为什么我们不应该在SalesTerritoryCountry Except表和DimSalesTerritory表之间创建关系,这也是此模式的不同部分。

DAX过滤器代替关系

如果我们不使用关系来应用过滤器,则意味着我们需要使用DAX来过滤值。标准将是过滤所有内容,但要过滤来自RLS表的值。如下Power BI中的角色定义将包括以下三个过滤器:

User表上的过滤器,用于获取当前用户的数据,如下:

Profile表上的另一个过滤器,因为该表没有被多对多方案的单向关系过滤,如下:

DimSalesTerritory表上的最后一个过滤器,以实现EXCEPT规则,如下:

上面的DAX表达式是实现过滤器的方法之一。概括地说,这描述了最后一个表达式中发生的事情:

vProfileIds:这是一个表变量,包括该用户有权访问的所有配置文件ID。

vCountryExcept:这是一个表变量,其中包含所有国家/地区的列表,该列表由上一个变量的配置文件过滤。这些国家不包括在内。

返回值是所有不在上一个变量中的国家。

用角色身份查看报表

操作如下:

查看结果如下:

以上图中所看到的,我的用户(LAPTOP-V7EE3MD9\yeacer)有权访问两个配置文件,并且基于该配置文件,这三个国家/地区被过滤掉了。

小结一下

以上操作就是如何连接表以及如何使用适当的DAX过滤器在最佳模型上工作以获得所需的内容输出;以及和大家介绍了排除值的常见动态RLS模式。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201202A04OP700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券