如何在 Power BI 中编写 DAX 表达式以实现行级安全?

问题描述

我正在尝试基于单独的用户表在一个表上实现行级安全。我在 this 之类的地方看到过这方面的讨论,但一直无法解决我的问题。

用户表:

enter image description here

交易表:

enter image description here

我想要保护的表称为交易。每行中的一个字段是 CompanyID。用户表包含三列:AccountIDUserEmailCompanyID。我希望只有分配给给定 CompanyID 的用户才能使用这些 CompanyID 查看 Transactions 表中的行。

由于不止一个用户可以查看给定的行,我在 CompanyID 字段上建立了从交易到用户的一对多关系。

我创建了一个 DAX 表达式,它使用以下内容过滤用户表:

[UserEmail] = USERPRINCIPALNAME()

当我在 Power BI Desktop 中选择“查看为 -> 其他用户”并输入随机电子邮件时,我仍然可以看到整个报告。知道我要遗漏什么吗?

编辑: 我遗漏了一个重要的规定:任何与 CompanyID 为 1 相关联的用户都可以查看 Transaction 表的所有记录。我尝试过类似的方法

  [UserEmail] = USERPRINCIPALNAME() || 
COUNTROWS(FILTER('Users',[UserEmail] = USERPRINCIPALNAME() && [CompanyId] = 1)) = 1

但它们不起作用。即使 CompanyId 为 1 的用户也被禁止查看表格。

解决方法

来自文档:

默认情况下,行级安全过滤使用单向 过滤器,无论是将关系设置为单向还是 双向。您可以手动启用双向交叉过滤 通过选择关系并检查行级安全性 双向应用安全过滤器复选框。选择这个选项 当您还在服务器上实现了动态行级安全性时 级别,其中行级安全性基于用户名或登录 ID。

enter image description here https://docs.microsoft.com/en-us/power-bi/admin/service-admin-rls