0

我正在将动态安全性应用于教育环境中的 SQL Server 表格模型。我有一个安全表,其中包含用户 ID 和用户应该有权访问的相关学校。如果用户有一所学校,我的 DAX 过滤器可以正常工作,但是对于拥有不止一所学校的用户,我收到一个多值错误(“提供了一个包含多个值的表,其中需要一个值。”)。我的LOOKUPVALUE()函数导致了这个问题,我基本上是在尝试确定如何创建一个循环来比较每个用户的Enrollment[SchoolKey]每个SecurityTable[SchoolKey]值。任何想法都非常感谢!

=
CONTAINS (
    'Enrollment',
    'Enrollment'[StudentKey], Student[StudentKey],
    'Enrollment'[SchoolKey], LOOKUPVALUE (
        SecurityTable[SchoolKey],
        SecurityTable[UserId], USERNAME ()
    )
)
4

1 回答 1

0

我知道这个答案很晚,但你可以在 Enrollment 表上尝试这个 DAX 过滤器:

='Enrollment'[SchoolKey]
    = LOOKUPVALUE (
        SecurityTable[SchoolKey],
        SecurityTable[UserId], USERNAME(),
        SecurityTable[SchoolKey], 'Enrollment'[SchoolKey]
    )

在这里,LOOKUPVALUE 中的第一个搜索条件会导致用户可以访问的所有行(学校),而第二个搜索条件会进一步将结果集缩减为单行。

您可以参考 MSDN 的详细示例,网址为https://msdn.microsoft.com/en-us/library/hh479759.aspx

于 2017-01-18T10:24:25.907 回答