具有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-V7EE3MD9yeacer)有权访问两个配置文件,并且基于该配置文件,这三个国家/地区被过滤掉了。
小结一下
以上操作就是如何连接表以及如何使用适当的DAX过滤器在最佳模型上工作以获得所需的内容输出;以及和大家介绍了排除值的常见动态RLS模式。
推荐阅读
Power BI + Azure Synapse,打造出色分析体验!
技术交流
1.Power BI免费下载:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下载地址
2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。
Power Data技术交流群:702966126 (验证注明:博客园Power BI)
更多精彩内容请关注微信公众号:悦策PowerBI
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载。