2013-12-04 3 views
1

В моих измерениях времени у меня есть 2013,2014,2015.Union in MDX query

Как я могу сделать Союз в этом MDX так я получить результаты этого MDX для всех thoose лет и не только в 2014 году, как и в примере ..

select NON EMPTY {[Measures].[Absatz Plan], [Measures].[Umsatz Plan], [Measures].[Absatz Effektiv], [Measures].[Umsatz Effektiv]} ON COLUMNS, 
    NON EMPTY Crossjoin(Hierarchize({([Time].[2014], [Artikel].[All Artikels], [Markt].[All Markts])}), {[Version].[14], [Version].[16], [Version].[18]}) ON ROWS 
from [Budget] 

ответ

2

Просто нанесите CrossJoin дважды:

select NON EMPTY 
     {[Measures].[Absatz Plan], [Measures].[Umsatz Plan], [Measures].[Absatz Effektiv], [Measures].[Umsatz Effektiv]} 
     ON COLUMNS, 

     NON EMPTY 
     CrossJoin(
      Crossjoin(
      {[Time].[2013], [Time].[2014], [Time].[2015]}, 
      {([Artikel].[All Artikels], [Markt].[All Markts])} 
     ), 
      {[Version].[14], [Version].[16], [Version].[18]} 
     ) 
     ON ROWS 
from [Budget] 

Я удалил Hierarchize, так как я думаю, что в этом контексте это не обязательно. Он будет упорядочивать свой аргумент по порядку, определенному для иерархии в кубе. Если порядок результата кажется неправильным, вы можете его повторно добавить.

+0

+1 @frankPI - это выглядит интересно: как это отличается от 'x * y * z'? что делает гнездование? – whytheq

+0

@whytheq 'x * y * z' - это просто аббревиатура' CrossJoin (CrossJoin (x, y), z) '. Они делают то же самое. 'CrossJoin', как' * ', имеет два аргумента. И в префиксной нотации с круглыми скобками вокруг аргументов вложенность более понятна, чем в инфиксной нотации '*', даже если она есть во втором случае, а также хорошо. Так же, как вопрос содержал «CrossJoin», я сохранил это, чтобы решение близко соответствовало ему. – FrankPl

+0

@FrankPI - приветствия - мой комментарий не был какой-то критикой, так как раньше не видел этого синтаксиса и думал, что это новый трюк! как всегда: спасибо за информацию. – whytheq