Правильно, извинения за то, что вы не заметили, что размер вашей ветви является родительским, хотя это и было в вопросе названия!
Я установил тестовый куб, отражающий вашу настройку (насколько я могу это понять). Я игнорирую эту тупую ошибку «Пользователь измерения не может быть найден» Я получаю, когда устанавливаю пользовательскую безопасность роли 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.
Но, возможно, вы можете определить, как ваша установка отличается от моей?
Я ограничил иерархии Dimenion в кубе в Dimension Data с помощью следующего сценария MDX 'непустых ( [Dim филиал Иерархии]. [Иерархия] Отделение .members, ([Measures]. [Конечно], StrToMember (» [Dim Users]. [Имя учетной записи]. & ["+ UserName() +"] ")) )' и Enable Visual Totals отключены для всех атрибутов –
Я только что понял, что ваше измерение Branch является родительским, который, я думаю, имеет значение. Я попытался воспроизвести структуру куба, но когда я пытаюсь защитить данные измерения с помощью сценария MDX, я получаю эту неприятную ошибку [link] (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ c4e67315-4d2e-441d-b68a-1580aff1673b/ошибки произошли-в-MDX-скрипт-для-размер-атрибут-разрешения-разрешенные члены набора? форум = sqlanalysisservices). (Хотя я использую SSAS 2014). Не удается найти решение, которое работает ... – SebTHU