2013-09-01 1 views
1

J'ai un ensemble de tuples que je veux AGRÉGER.Comment agréger un ensemble de jointures croisées avec MDX

Par exemple: J'ai cette requête:

Select {[Sales Territory].[Sales Territory].DEFAULTMEMBER.children} on 0, 
{[Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children} on 1 
From [Adventure Works] 

Quand je veux ajouter un TOTAL pour l'un de l'axe que je fais ceci:

WITH MEMBER [Sales Territory].[Sales Territory].[Total X] as 'AGGREGATE(AXIS(0))' 
Select {[Sales Territory].[Sales Territory].[Total X],[Sales Territory].[Sales Territory].DEFAULTMEMBER.children} on 0 
,{[Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children} on 1 From [Adventure Works] 

Maintenant, pour l'instant il est tout bon. Mais lorsque j'essaie d'agréger un ensemble de jointures croisées, il échoue. S'il vous plaît prendre cette requête à titre d'exemple:..

Select {[Sales Territory].[Sales Territory].DEFAULTMEMBER.children} on 0 
,{[Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children}*{[Sales Channel].[Sales Channel].DEFAULTMEMBER.children} on 1 
From [Adventure Works] 

S'il vous plaît noter que j'ai fait une jointure croisée entre [Raison de vente] [Ventes Type Raison] à [Channel Sales] [canal de vente]

Existe-t-il un moyen de faire un total sur l'axe lorsqu'il y a plus d'un membre?

Merci!

P.S: Je suis un débutant avec MDX requêtes

+0

Votre membre par défaut à tous pour vos dimensions? Si oui, pouvez-vous essayer ce qui suit sur 1 au lieu de votre crosjoin actuel? "{[Reason Sales]. [Sales Reason Type] .members * [Canal de vente]. [Canal de vente] .members} on 1" Lorsque vous effectuez les membres comme ceci, il inclut tous les membres. – mmarie

Répondre

0

Vous faites des choses plus complexes que nécessaire. Votre deuxième requête doit être simplifiée:

Select [Sales Territory].[Sales Territory].Members on 0, 
     [Sales Reason].[Sales Reason Type].DEFAULTMEMBER.children on 1 
    From [Adventure Works] 

S'il vous plaît noter que le membre All est déjà membre de (presque) toutes les hiérarchies dans MDX. Ainsi, pour inclure les All membres pour la troisième requête, vous pouvez soit écrire

Select {[Sales Territory].[Sales Territory].Members} 
     on 0, 
     {[Sales Reason].[Sales Reason Type].Members} 
     * 
     {[Sales Channel].[Sales Channel].Members} 
     on 1 
    From [Adventure Works] 

ou, si vous voulez vraiment avoir le total de l'Axe seulement sans les combinaisons des totaux de l'une des hiérarchies avec le les autres membres de l'autre, union deux ensembles - un avec le tuple contenant de tous les membres, et un avec la jointure croisée des deux autres hiérarchies. J'utilise la forme courte de Union ici - qui est l'opérateur + pour les jeux:

Select {[Sales Territory].[Sales Territory].Members} 
     on 0, 
     { ([Sales Reason].[Sales Reason Type].All, [Sales Channel].[Sales Channel].All) } 
     + 
     (
      {[Sales Reason].[Sales Reason Type].[Sales Reason Type].Members} 
      * 
      {[Sales Channel].[Sales Channel].[Sales Reason Type].Members} 
     ) 
     on 1 
    From [Adventure Works] 
Questions connexes