如何在 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 包含三列:AccountID
、UserEmail
和 CompanyID
。我想要的是只有分配给给定 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
我正在尝试根据单独的用户 table 在一个 table 上实施行级安全性。我已经在 this 等地方看到过这个话题,但我的情况还没有成功。
用户table:
交易table:
我想要保护的 table 称为交易。每行中的一个字段是 CompanyID。用户 table 包含三列:AccountID
、UserEmail
和 CompanyID
。我想要的是只有分配给给定 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.