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

How do I write a DAX expression in Power BI for row-level security?

我正在尝试根据单独的用户 table 在一个 table 上实施行级安全性。我已经在 this 等地方看到过这个话题,但我的情况还没有成功。

用户table:

交易table:

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

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

我创建了一个 DAX 表达式来过滤用户 table,具有以下内容:

[UserEmail] = USERPRINCIPALNAME()

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

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

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

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

来自文档:

By default, row-level security filtering uses single-directional filters, whether the relationships are set to single direction or bi-directional. You can manually enable bi-directional cross-filtering with row-level security by selecting the relationship and checking the Apply security filter in both directions checkbox. Select this option when you've also implemented dynamic row-level security at the server level, where row-level security is based on username or login ID.

https://docs.microsoft.com/en-us/power-bi/admin/service-admin-rls