Динамические роли в разрешениях схемы

вариант использования

Все наши роли в icCube дают доступ только к одной клиентской схеме. Пользователь может иметь только одну роль. Однако некоторым пользователям я бы хотел предоставить доступ и к ДЕМО-домену, в зависимости от их электронной почты.

моя попытка

Учитывая, что ДЕМО-домен называется «Продажи (Демо)», я пытаюсь добавить в каждую роль пользователя следующий код:

      -- Give access to the client domain
+ <specific client domain> 


+schema [Sales (Demo)]
:schema [Sales (Demo)]

create function isAbc(username_) as instr(username_,'@') > 0 and mid(username_,instr(username_,'@'),100)= '@abc.com'

#IF isAbc(username())

+cube R Sales

#ELSE

-all

#ENDIF

в результате возникает ошибка, почему?

Этот код прерывается из-за ошибки в загруженных схемах:

      [ROLES_UNEXPECTED_ERROR] isAbc() : [OLAP_MDX_FUNCTION_UNRESOLVED] isAbc() : the function (isAbc) does not exist location: 

отладка в MDX IDE

Когда я тестирую функцию в MDX IDE, кажется, она работает:

      with
   function isAbc(username_) as instr(username_,'@') > 0 and mid(username_,instr(username_,'@'),100)= '@abc.com'
   member measures.a as isAbc('aturing@abc.com')
   member measures.b as isAbc('pstolk@google.com')
   member measures.c as isAbc('admin')
select {a,b,c} on 0
from sales

Результат:

Что мне не хватает?

1 ответ

Похоже на функциюisAbc()не может использоваться в операторах предварительной обработки. Более вероятно, что эти операторы предварительной обработки сначала оцениваются, чтобы извлечь фактический список операторов, которые необходимо выполнить для определения разрешений.

В качестве обходного пути вам нужно будет написать код функции внутри#IFзаявление:

      #IF instr(username(),'@') > 0 and mid(username(),instr(username(),'@'),100)= '@abc.com'
...
#ENDIF
Другие вопросы по тегам