2011-07-27 4 views
1

J'ai besoin de SUM les résultats de plusieurs requêtes.Résumer plusieurs requêtes MDX dans SSAS

le défi que j'ai est que chaque requête a défini les membres (pour calculer une plage de dates)

je dois être en mesure de combiner/somme des membres à travers plusieurs requêtes MDX

WITH Member [M1] AS Sum(DateRange, Measure) 

SELECT [M1] 

FROM [Cube] 

WHERE {[x].&[y]} 



WITH Member [M1] AS Sum(Different DateRange, Measure) 

SELECT [M1] 

FROM [Cube] 

WHERE {[z].&[q]} 

chaque La requête sélectionne les mêmes membres en fonction de différents critères.

la seule façon que je peux penser à le faire est un syndicat et que SUM ([M1]) mais aucune idée de comment cela est possible dans MDX

MISE À JOUR - en réponse à la question icCube, voici pourquoi j'ai besoin Pour avoir une clause WHERE séparée pour chaque requête:

J'ai besoin de sections WHERE séparées pour chaque requête car j'ai besoin d'agréger les résultats des différentes tranches. et mes tranches sont définies par n nombre de dimensions. J'émets la requête mdx pour chaque tranche de façon dynamique en fonction de l'entrée de configuration de l'utilisateur (et construis ma clause WHERE dynamiquement pour filtrer selon les préférences de l'utilisateur). Les utilisateurs sont autorisés à configurer des tranches qui se chevauchent (ce sont celles dont j'ai besoin pour résumer ensemble). alors j'ai besoin de combiner ces comptes de lignes de tranche dans un rapport. La façon dont je le fais est en passant une chaîne avec une requête MDX à un rapport. mais comme je ne peux pas trouver un moyen d'obtenir plusieurs requêtes dans une chaîne exécutable (et je ne sais pas combien de requêtes il y aura), cette approche n'est plus possible (à moins qu'il y ait un moyen d'union/additionner)

La seule façon que je pourrais penser à y parvenir pour l'instant, est avec plus étape batching qui itérer toutes les requêtes, les processus (en utilisant Adomd.net) dans une mise en scène table, puis je peux les agréger dans un rapport utilisant la somme de SQL (..). Le plus grand désavantage à cette approche étant le système supplémentaire à maintenir et plus de possibilités que les données dans le rapport seront périmées

Répondre

3

Vous ne savez pas si c'est ce que vous regardez ing

WITH Member [M1] AS Sum(Different DateRange, ([z].&[q],Measure)) + 
        Sum(DateRange, ([x].&[y],Measure)) 

SELECT [M1] 

FROM [Cube] 

ou

WITH Member [M1] AS Sum(Different DateRange * {[z].&[q]}, Measure) + 
        Sum(DateRange * {[x].&[y]}, Measure) 

SELECT [M1] 

FROM [Cube] 

Je ne sais pas comment ajouter le résultat de deux sélections dans MDX ...

+0

merci, mais je dois avoir différentes sections pour chaque WHERE requête –

+0

ok - Pouvez-vous expliquer pourquoi? - Si vous trouvez une solution, faites-le nous savoir. – ic3

+0

sûr, j'ai mis à jour ma question avec une explication et ma meilleure estimation actuelle sur la façon de le résoudre. J'espère que cela a du sens .. –

0

Je crois que vous avez besoin Aggregate() pas Sum.

0

Vous pouvez mettre en œuvre le comportement de l'Union dans MDX à l'aide de sous-cubes de cette façon:

Select 
{...} On Columns, 
{...} On Rows 
From (
    Select 
      { 
       {Dimension1.Level.Members * Dimension2.&[1] * Dimension3.&[2]}, 
       {Dimension1.&[X] * Dimension2.Members * Dimension3.&[5]} 
      } On Columns 
    From [Cube] 
    )