После установки куба мне было предложено добавить динамическую безопасность с использованием таблицы пользователей и данных, которые они могут видеть.SSAS OLAP Cube Динамическая безопасность. Множество измерений в одной роли
Проблема в том, что я должен учитывать 3 разных измерения. Я решил использовать таблицу фактов с функцией noneEmpty для подсчета.
NonEmpty([Dimension].[Hierarchy].members,
([Measures].[Allowed Count],
[Users].[User].&[UserName]
)
)
После установки роли я получил результат, как:
Dim1 | Dim2 | Dim3
1 | A | 300
1 | A | 320
1 | A | 340
1 | B | 300
1 | B | 320
1 | B | 340
Где это должно быть:
Dim1 | Dim2 | Dim3
1 | A | 300
1 | A | 320
1 | B | 340
Данные для разрешенного доступа пользователей хранятся в таблице как
UserName | Dim1Key | Dim2Key | Dim3Key
Иерархия подобна Каждый Dim1 содержит каждый тип Dim2, который содержит каждый тип Dim3.
И пользователь может получить доступ только к данному элементу Dim3 в Dim2 в Dim1.
Есть ли способ соединить эти размеры в MDX так каждый Dim в конце концов имеет только свои соответствующие значения
UPDATE:
После некоторых исследований я получил этот запрос:
SELECT [Measures].[CC Count] ON 0,
NonEmpty(
(
NonEmpty((Dim1.children),
([Measures].[CC Count],
[Users].[User].&[userName]
))
,
NonEmpty((Dim2.children),
([Measures].[CC Count],
[Users].[User].&[userName]
)),
NonEmpty((Dim3.children),
([Measures].[CC Count],
[Users].[User].&[userName]
))
)
,([Measures].[CC Count],
[Users].[User].&[userName]
))
ON 1
FROM [Cost Center]
Это дает мне желаемые результаты, но я не могу поместить его в Dimensiom Data in Role. Есть ли способ изменить его?
благодарит за ответ. Я реализую вашу идею только сейчас и задаюсь вопросом. Это новое измерение должно основываться на базе таблицы безопасности или главной таблицы фактов? – Zergister
@Zergister hmm. Если бы он был построен на перекрестном соединении всех 3 ключей, это было бы слишком большим? Если нет, тогда сделайте это. Если это так, вам понадобится любая комбинация, которая существует в любой таблице фактов как минимум. – GregGalloway
Ну, я просто дошел до того же вывода: D – Zergister