#dax #mdx
Вопрос:
Я собираюсь внедрить безопасность на уровне динамических строк в свою модель.
Если зарегистрированный пользователь существует в моем измерении, он может видеть только свои данные, если пользователь не выходит из моего измерения, то он может видеть все.
Идеально работает в табличной форме SSAS.
Код DAX из моей табличной модели SSAS, которая реализована в ролях -> Фильтр строк по измерению DimBrugerRettigheder ->> DAX :
=ЕСЛИ(СОДЕРЖИТ(DimBrugerRettigheder, [original_login], ИМЯ ПОЛЬЗОВАТЕЛЯ()), DimBrugerRettigheder[original_login] = ИМЯ ПОЛЬЗОВАТЕЛЯ(), TRUE())
Многомерная модель данных почти идентична моей табличной модели.
Просто нужно перевести код в многомерные выражения
Код многомерных выражений будет реализован в роли -> данные измерений ->> dimension DimBrugerRettigheder ->>> Дополнительно ->>>> Разрешенный набор элементов: ->>>>> Редактировать многомерные выражения
Ответ №1:
Я понимаю, что смысл вашего кода таков: «если имя текущего пользователя не содержится в столбце (в DAX, в многомерных выражениях это был бы атрибут) «original_login», затем предоставьте доступ ко всем строкам, в противном случае предоставьте доступ только к строкам, в которых столбец/атрибут содержит имя пользователя в качестве содержимого.
Я бы перевел это в многомерные выражения следующим образом:
IIf(IsError(StrToMember('[DimBrugerRettigheder].[original_login].[' UserName ']')),
[DimBrugerRettigheder].[original_login].[original_login].Members,
{StrToMember('[DimBrugerRettigheder].[original_login].[' UserName ']')}
)
По сути, если для атрибута current in нет допустимого члена Username
[DimBrugerRettigheder].[original_login]
, то все члены являются разрешенным набором членов, в противном случае только этот единственный член является единственным членом набора разрешенных членов.