Как получить элементы данных первого уровня после применения фильтра на третьем уровне (Mondrian MDX) - PullRequest
2 голосов
/ 03 августа 2011

У меня есть измерение с именем PERIOD с тремя уровнями YEAR, QUARTER и MONTH.

Я отфильтровал данные третьего уровня следующим образом:

With SET [*BASE_MEMBERS_Period.Period] AS ' Filter ( [Period.Period].[Month].Members , (NOT( [Period.Period].CurrentMember In { [Period].[All Periods].[FY 2008-2009].[Q4 2008-09].[Mar 2009 ] } ) ) ) ' 

Это означает, что нам нужны все данные, кроме [Mar 2009 ].

Теперь я должен написать запрос для следующих требований:

  1. , чтобы получить данные для всех членов уровня YEAR ..., применив фильтр выше. Это означает, что ... значение для элемента [FY 2008-2009] должно следовать после исключения значения [Mar 2009].

  2. , чтобы получить данные для всех членов уровня QUARTER ..., применив фильтр выше. Это означает, что ... значение для элемента [Q4 2008-09] должно следовать после исключения значения [Mar 2009].

Заранее спасибо.

1 Ответ

0 голосов
/ 03 августа 2011

Не уверен насчет Мондриана, но если он совместим с MDX:

Сначала вы можете написать свой набор с помощью оператора -:

With SET [*BASE_MEMBERS_Period.Period] AS '[Period.Period].[Month].Members - [Period].[All Periods].[Mar 2009 ]'

Чтобы получить требуемое поведение, вы можете использовать subselect :

Select
 [Period.Period].[Year] on 0
From
  (Select 
    [Period.Period].[Month].Members - [Period].[All Periods].[Mar 2009 ] on 0 
    from [MyCube] )

Как видно из результатов, данные за март 2009 года удалены. Подвыбор применяется не только к фактическим данным (см. Флаг VISUAL), но и к функциям MDX. Вы можете проверить следующую инструкцию, где месяц фильтруется также из функции членов:

Select
 [Period.Period].[Month].members on 0 // -> March 2009 is not there
From
  (Select 
    [Period.Period].[Month].Members - [Period].[All Periods].[Mar 2009 ] on 0 
    from [MyCube] )
...