2016-12-16 8 views
0

Куб (sql Server 2016) содержит размеры [Unit].[Unit].&[1] и [Unit].[Unit].&[2]. Я создал вычисленный размер:Настройка роли для расчетного измерения (SSAS Cube)

CREATE MEMBER CURRENTCUBE.[Unit].[Unit].[All].[1/2] AS [Unit].[Unit].&[1]/[Unit].[Unit].&[2] 

Чтобы ограничить доступ к измерению [Unit].[Unit].[All].[1/2] Я создал роль. Но я не могу выбрать [Unit].[Unit].[All].[1/2] в вкладке DimensionData-Basic, потому что этот атрибут не отображается в списке атрибутов. Если я укажу атрибут [Unit].[Unit].[All].[1/2] на вкладке DimensionData-Advanced в MDX-скрипте Denied member set: {[Unit].[Unit].[All].[1/2]}, пользователь увидит этот атрибут. Как ограничить доступ к вычисленному измерению?

ответ

1

Если вы изменили таблицу SQL DimUnit, чтобы включить строку «1/2», замените оператор CREATE MEMBER следующим образом, он должен работать так же, и вы сможете увидеть этого участника в безопасности данных размеров после развертывания и обработать куб:

([Unit].[Unit].[1/2]) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 

Тогда после того, как вы создали роль, которая делает 1/2 член исчезает, вы получите сообщение об ошибке при просмотре куба с пользователем. Измените эту строку следующим:

(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 

BTW, DIVIDE делает безопасный разрыв так деление на ноль не вызовет проблем.

Сверху моей головы Я не могу вспомнить, нужна ли StrToMember против ссылки только для членов, поэтому я играл в нее безопасно. Не стесняйтесь попробовать это без StrToMember.

Чтобы быть ясно, что весь сценарий должен сказать:

CALCULATE; 

(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 
+0

я заменил старый «создать элемент», и я имею ошибку при просмотре куба с пользователем. Я не понимаю, где я должен вставить '(IIf (IsError (StrToMember (" [Unit]. [Unit]. [1/2] ", CONSTRAINED)), Head ([Unit]. [Unit] .Members , 0), StrToMember ("[Unit]. [Unit]. [1/2]", CONSTRAINED)) = DIVIDE ([Unit]. [Unit]. & [1], [Unit]. [Unit]. & [2]) ' В разделе« Расчет »в кубе или вкладке« DimensionData-Advanced »в роли (« Запрещенный набор элементов »)? – Natalya

+0

Перейдите на вкладку« Расчеты »и перейдите к представлению сценария. ! 'CALCULATE' – GregGalloway

+0

Спасибо за вашу помощь Я пишу сценарий:... ' CALCULATE; CREATE ЧЛЕН CURRENTCUBE [Unit] [Unit] [1/2] AS (IIF (ISERROR (StrToMember ('[ Unit]. [Unit]. [1/2] ', CONSTRAINED)), HEAD ([U nit]. [Unit] .Members, 0), StrToMember ('[Unit]. [Unit]. [1/2]', CONSTRAINED)) = DIVIDE ([Unit]. [Unit]. & [1] , [Единица]. [Единица]. &[2])); ' Но я получаю сообщение об ошибке:« объект не был найден в кубе, когда строка [Unit]. [Unit]. & [1/2] разобрана ». – Natalya

 Смежные вопросы

  • Нет связанных вопросов^_^