При работе с SQL Server Analysis Services могут возникать ситуации, когда нам необходимо реализовать динамическую безопасность измерений и отображать разрешенные элементы в фильтре PerformancePoint. Это может быть особенно полезно при работе с многоуровневыми иерархиями и когда безопасность должна применяться на нескольких уровнях.
По умолчанию PerformancePoint будет отображать полный путь от разрешенного элемента до корневого элемента измерения. Например, если у нас есть иерархия “Бизнес-юнит” с доступом к Франции, PerformancePoint будет отображать следующий путь: Все бизнес-юниты – Европа – Франция. Хотя пользователь увидит только данные по Франции при выборе “Все бизнес-юниты” или “Европа”, это все равно может быть запутывающим.
Чтобы убрать отображение верхних уровней в PerformancePoint, нам нужно изменить способ создания нашего фильтра. Один из подходов – использовать фильтр MDX-запроса. Это позволяет нам указать пользовательский MDX-запрос для фильтрации элементов.
Вместо запроса всех элементов измерения с помощью простого выражения, например:
DESCENDANTS([Business].[Business Hierarchy].Members,, SELF_AND_AFTER)
Мы можем написать более конкретный MDX-запрос, который фильтрует элементы на основе определенных условий. Например, мы можем использовать следующий код MDX:
DESCENDANTS( FILTER([Business].[Business Hierarchy].Members AS a, ((FILTER(ASCENDANTS(a.CurrentMember) AS a_asc, a_asc.CurrentMember.CHILDREN.Count > 1).Count = 1) And a.CurrentMember.Children.Count > 1) Or ((FILTER(ASCENDANTS(a.CurrentMember) AS a_asc, a_asc.CurrentMember.CHILDREN.Count > 1).Count = 0) And a.CurrentMember.Children.Count = 0) ), SELF_AND_AFTER )
Этот MDX-запрос фильтрует элементы, выбирая потомков всех элементов измерения, у которых предки (исключая самих себя) имеют не более одного потомка. В результате в выпадающем списке PerformancePoint будет отображаться только разрешенный элемент, в данном случае Франция.
Если есть несколько разрешенных элементов, MDX-запрос покажет верхнего общего родителя этих элементов. Например, если Франция и Канада являются разрешенными элементами, выпадающий список будет состоять из следующей иерархии: Все бизнес-юниты – Европа – Франция – Северная Америка – Канада.
Используя динамическую безопасность измерений и пользовательские MDX-запросы в PerformancePoint, мы можем эффективно контролировать отображение разрешенных элементов и обеспечить более интуитивный пользовательский опыт.