2009-04-14 3 views
0

Я использую функцию CurrentMember в выражении CellData роли, чтобы ограничить доступ к кубу с помощью определенного измерения. Это работает как ожидалось, за одним исключением. Даже если для изменения данных, которые эта роль не имеет права для просмотра, используется для иммерсии, то строка «# N/A» отображается во всех ячейках.CurrentMember (MDX) Игнорирует размер Slicer

Только после включения измерения, к которому роль ограничивает доступ на оси, значения ячейки отображаются как ожидалось.

Мне кажется, что функция CurrentMember игнорирует измерение slicer. Это так? Как мне подойти к этой проблеме?

+0

Я разместил этот вопрос в управляемых группах новостей MSDN и получил ответ от представителя Microsoft ... http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft .public.sqlserver.olap & tid = b4fcb648-3d05-4310-9676-f40c2f7b839c & cat = & lang = & cr = & sloc = & p = 1 –

+0

Я не уверен, что случилось с сообщением в форумах msdn, но ссылка в моем комментарии выше не работает больше , SQL Monster, похоже, кэшировал его здесь ... http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-olap/13948/CurrentMember-Function-Ignores-Slicer-Dimension –

ответ

0

Мой совет, со всей серьезностью, заключается в том, чтобы убежать от кубов, требующих от вас ограничения доступа с использованием значений куба. Был там, сделал это, потратил слишком много времени и все еще закончил с нестабильным решением.

ОПРЕДЕЛЕННО НЕ используйте «Роли» в OLAP.

+0

В конце концов я сделал ваши советы и удаленные роли из моего решения. –

1

Это зависит от того, как вы делаете свой запрос с фильтрами. Если вы создаете подзапрос (используя верхнюю область фильтра в SSMS или BIDS), то currentMember вернет член All - это способ, которым были созданы подзапросы. Если вы используете нижний запрос в SSMS или BIDS, он будет использовать предложение WHERE, и вы должны увидеть ожидаемые результаты.

Возможно, вам лучше использовать вкладку данных измерений вместо данных ячейки, если вы просто фильтруете элементы измерения.

+0

Я не уверен, что полностью понимаю ваше решение, но я думаю, что это будет означать, что моя «безопасность» вступит в силу только в том случае, если я включу измерение в запрос. –

+1

Нет, роли безопасности всегда действуют, хотя повторное чтение исходного сообщения, использование .CurrentMember является немного необычным и может вызвать проблемы. Я бы не сказал, чтобы не использовать роли, но я стараюсь избегать использования безопасности на базе сотовой сети. Если вы прочитали документацию, она предназначена для отображения # N/A, если значение ограничено. Если вы хотите, чтобы пользователи не увидели определенный набор участников, вы должны быть защищены с помощью вкладки DimensionData, а не CellData. –