具有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模式。

 

 

推荐阅读

 

Power BI + Azure Synapse,打造出色分析体验!

利用好这3个隐藏技巧,Power BI 开发体验更丝滑

Power BI数据流——新图表视图

Power BI 11月功能更新 —— 视频上线

如何自动播放 Power BI 移动应用的幻灯片

 

技术交流

1.Power BI免费下载:http://www.yeacer.com/

    Microsoft Power BI Desktop中文最新版:下载地址

2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。 

   Power Data技术交流群:702966126 (验证注明:博客园Power BI) 

   更多精彩内容请关注微信公众号:悦策PowerBI          


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载。
posted @ 2020-12-02 11:55  PowerBI365  阅读(909)  评论(0编辑  收藏  举报