2015-08-06 2 views
0

Я хотел бы построить такую ​​ситуацию SSAS безопасности: enter image description hereAggregation - SSAS Dynamic Security над родитель-потомок иерархии

я создал роль для фильтрации данных соответственно и user1 могут видеть только Лондон 100 и отсюда агрегирования в UK также 100. У меня также есть беспристрастная связь, которая связывает DimUsers и DimBranch с отношением «многие ко многим».

Запрос состоит в том, что user1, может видеть только Лондон 100 (как и раньше) и вместо UK-100 ему нужно увидеть всю Великобританию (150). Возможно ли это реализовать в SSAS?

ответ

1

Правильно, извинения за то, что вы не заметили, что размер вашей ветви является родительским, хотя это и было в вопросе названия!

Я установил тестовый куб, отражающий вашу настройку (насколько я могу это понять). Я игнорирую эту тупую ошибку «Пользователь измерения не может быть найден» Я получаю, когда устанавливаю пользовательскую безопасность роли MDX; и игнорируя тот факт, что в браузере Cube SSDT (aka Visual Studio) эта настраиваемая безопасность не работает. Давайте просто поместим это в пользовательский интерфейс SSDT, являющийся POS, потому что в запросе SSMS MDX я получаю то, что ожидаю.

Вот мой Ветви стол:

BranchID ParentID BranchName 
1   NULL  Scotland 
2   NULL  England 
3   1   Glasgow 
4   1   Edinburgh 
5   2   Bristol 
6   2   London 

Есть две иерархии по размеру филиала: один называется BranchID (просто на атрибут BranchID), и один называется ParentChild, который иерархию родитель-потомок, используя ParentID ,

ограничить доступ к иерархии Branch.ParentChild для «ограниченного» пользователя с помощью этого выражения в Allowed Set члена коробки:

NONEMPTY(Branches.[ParentChild].members, 
(Measures.UserBranchAccess,StrToMember("[Users].[" + UserName + "]"))) 

Так что теперь я даю доступ ко всем ветвям к «ограниченному доступу «пользователь, заполнив таблицу, я вызываю UserBranchAccess. (Результирующая мера COUNT я вызываю UserBranchAccess). Затем я удаляю доступ к Bristol, удаляя соответствующую строку.

Выполнение этого запроса в SSMS с EffectiveUserName установлен в положение «ограниченного пользователя», я получаю именно тот результат, который вы искали:

SELECT 
NONEMPTY(Branches.[ParentChild].members, 
(Measures.UserBranchAccess,StrToMember("[Users].[" + UserName + "]"))) 
ON 0 
FROM [Test Dimensions] 

Результат:

All England London Scotland Edinburgh Glasgow 
700 550  50  150   50   100 

(моя по умолчанию мера называется Здесь отображается раздел «Итоговая сумма» - обратите внимание, что 500 «Бристоль» не отображается, но входит в общую сумму в Англии).

Я тогда попытался удалить доступ к как Бристоль и Англия для «ограниченного» пользователя. Я получаю точно такой же результат.

Давайте посмотрим, что происходит с "безопасности" меры UserBranchAccess:

SELECT 
Branches.[ParentChild].members ON 0 
FROM [Test Dimensions] 
WHERE 
(UserBranchAccess,Users.[User ID].[RestrictedUser]) 

результат:

All England Bristol London 
4 1  (null) 1 

(Шотландия не показан для ясности).

Англия разрешена, поскольку разрешен хотя бы один из ее детей.

Просто чтобы убедиться, что я не пропустить какой-либо обработки, я сделал тот же запрос, но на (не родитель-ребенок) иерархии размерности Branch:

SELECT Branches.[BranchID].Members ON 0 
FROM [Test Dimensions] 
WHERE 
(UserBranchAccess,Users.[User ID].[EMEA\martinhe]) 

Результат такой, как ожидалось: Англия это явно не разрешено в обычной иерархии BranchID, но допускается (см предыдущий результат) в иерархии родитель-потомок:

All Bristol England London 
4 (null) (null) 1 

(опять же, Шотландия не показан для ясности).

Таким образом, нижняя линия является то, что я не могу воспроизвести проблему вы имеете, в результате чего (используя мои рисунки) Лондон покажет 50 и Англия также показывают только 50.

Но, возможно, вы можете определить, как ваша установка отличается от моей?

1

Вы установили флажок «Включить визуальные итоговые значения» при настройке безопасности измерений?

http://bidn.com/blogs/jamserra/ssas/1881/show-correct-totals-when-using-ssas-role-security

Это звучит так, как будто вы каким-то образом получил этот параметр включен, что делает Великобританию общий 100. Значение по умолчанию для того, чтобы быть отключена, что даст желаемый результат в Лондоне = 100, Великобритания = 150.

+0

Я ограничил иерархии Dimenion в кубе в Dimension Data с помощью следующего сценария MDX 'непустых ( [Dim филиал Иерархии]. [Иерархия] Отделение .members, ([Measures]. [Конечно], StrToMember (» [Dim Users]. [Имя учетной записи]. & ["+ UserName() +"] ")) )' и Enable Visual Totals отключены для всех атрибутов –

+0

Я только что понял, что ваше измерение Branch является родительским, который, я думаю, имеет значение. Я попытался воспроизвести структуру куба, но когда я пытаюсь защитить данные измерения с помощью сценария MDX, я получаю эту неприятную ошибку [link] (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ c4e67315-4d2e-441d-b68a-1580aff1673b/ошибки произошли-в-MDX-скрипт-для-размер-атрибут-разрешения-разрешенные члены набора? форум = sqlanalysisservices). (Хотя я использую SSAS 2014). Не удается найти решение, которое работает ... – SebTHU

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