gpt4 book ai didi

powerbi - Power BI 中的默认筛选器 - 未通过 LOOKUPVALUE 应用行级安全性

转载 作者:行者123 更新时间:2023-12-03 03:07:44 30 4
gpt4 key购买 nike

TL;DR:使用 LOOKUPVALUE() 时对于具有行级安全性的表,不应用 RLS 并且可以看到所有值

我需要根据用户在 Power BI 报表中选择“默认”值(位置)。

我正在针对 Azure Analysis Services(表格模型 1400)进行报告

在 Power BI 中实现默认值的方法似乎是将值动态重命名为静态值,并选择该静态值作为筛选器。

所以

  • 用户 Bob 有默认位置 Location1,因此当他登录时,他应该可以看到自己的位置
  • 用户Joe具有默认位置Location2,因此应在此位置过滤他

诀窍是,他们可以选择另一个位置,看看他们是否喜欢

我尝试的第一件事是使用 USERPRINCIPALNAME()直接在行级表达式上,但我得到

...USERNAME and USERPRINCIPALNAME functions are not supported in calculated tables/columns. These functions may only be used in measures or in the AllowedRowsExpression

接下来我想将 RLS 应用于不同的表并进行查找,如下所示:

我有一个从数据库加载的表,名为 Location列出了所有位置。

我有一个名为 MyLocation 的独立表,这是 Location 的副本。 MyLocation使用此 DAX 生成:

=SUMMARIZE(Location,Location[LocationKey],Location[Location Name])

(注意我也尝试过基于数据的表格,而不是基于 DAX 的表格)

MyLocation还应用了动态行级安全性,如下所示:

=(
[LocationKey]
=
LOOKUPVALUE(
'Employee[LocationKey],
'Employee'[UserPrincipalName],
USERPRINCIPALNAME())
)

当我查看MyLocation时在 Power BI 中,我可以看到应用了 RLS - 只能看到一个位置。这与Location形成鲜明对比。 ,我可以在其中看到所有位置(未定义 RLS)

接下来我在 Location 中添加了一列(行级表达式)去挑选使用行级安全性评估的这个“单一”位置:

=LOOKUPVALUE(
'MyLocation'[Location Name],
'MyLocation'[LocationKey],
'Location'[LocationKey]
)

它在 LocationKey 上匹配,但对于已通过 RLS 删除的记录,应该不匹配。

但是,当我测试最后一列时,RLS 被忽略,所有位置都会通过。

我可以在 Power BI 中看到我面前的两个表:

MyLocation 如下所示:(应用 RLS)

Location       
==========================
Location 3 Location 3

位置如下所示:(没有应用 RLS,但为什么其他位置不为空?)

Location       LookupValue            
==========================
Location 1 Location 1
Location 2 Location 2
Location 3 Location 3
Location 4 Location 4
Location 5 Location 5
...........
....

我希望位置看起来像这样:

Location       LookupValue            
==========================
Location 1 blank
Location 2 blank
Location 3 Location 3
Location 4 blank
Location 5 blank
...........
....

所以看来无论你使用什么技巧,你都不能连续使用 USERPRINCIPALNAME() 。

我也尝试过定义 USERPRINCIPALNAME()作为一种措施并使用它,但也失败了(现在不记得错误,但我也会重试)

我还尝试使用“独立参数”表来打开和关闭 RLS,使用 SELECTEDVALUE但参数表中过滤后的值永远不会出现。 ISFILTERED尽管该表已被过滤,但始终返回 false。

最佳答案

我现在明白你的意思了。 LOOKUPVALUE 似乎可以绕过 RLS,对您的表进行未经过滤的访问。我建议将此作为错误报告给 Microsoft。

在您的报告中,我建议使用这种形式的措施:

Measure =
VAR EmployeeLocation =
LOOKUPVALUE(Employee[LocationKey],
Employee[UserPrincipalName],
USERPRINCIPALNAME())
RETURN IF(ISFILTERED(Location[Location]),
<expression>,
CALCULATE(<expression>,
FILTER(Location, Location[LocationKey] = EmployeeLocation)))

这样,当 Location 未过滤时,它应该默认计算 EmployeeLocation 的值,否则会正常运行。

关于powerbi - Power BI 中的默认筛选器 - 未通过 LOOKUPVALUE 应用行级安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091456/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com