2017-07-23 4 views
1

Il est donc possible de filtrer par un groupe de mesures et de prendre les membres/personnes distincts de ce groupe de mesures et de les utiliser comme filtre d'une autre requête d'un groupe de mesures différent.MDX - Filtre issu du groupe de mesures indépendant

requête SQL équivalent

SELECT 
    sum(spend) 
FROM 
    (SELECT distinct person_id FROM enrollment_fact WHERE program = 'blah') AS a 
    JOIN 
    (SELECT person_id, sum(spend) AS spend FROM sales_fact GROUP BY person_id) AS b 
    ON a.person_id = b.person_id 

Supposons que j'ai deux groupes de mesures différentes dans SSAS, l'une pour les dépenses et l'un d'inscription qui ne sont pas liés à l'exception du temps et person_id

Supposons également il y a deux nombreux programmes (milliers) pour créer des colonnes/attributs pour chaque personne pour que chaque programme joue le rôle de filtre de membre.

Répondre

0

Est-ce la même chose que:

SELECT sum(spend) AS spend 
FROM sales_fact 
WHERE person_id IN 
(
    SELECT person_id 
    FROM enrollment_fact 
    WHERE program = 'blah' 
    GROUP BY person_id 
) 

Si ces deux groupes de mesures sont dans le même cube et la dimension person_id est partagée alors il semble possible mdx.

La sous-requête pourrait être fait avec la fonction NonEmpty:

NONEMPTY( 
    [person].[person_id].[person_id].MEMBERS 
, ( 
    [program].[program].[blah] 
    , [measures].[someEnrollmentMeaure] 
) 
) 

donc d'ajouter ceci à une mdx clause WHERE tranche du cube par ces person_ids:

SELECT 
    [measures].[someEnrollmentMeaure] ON 0 
FROM [youCube] 
WHERE 
    NONEMPTY( 
     [person].[person_id].[person_id].MEMBERS 
    ,( 
     [program].[program].[blah] 
     ,[measures].[someEnrollmentMeaure] 
    ) 
    ); 
+0

Merci! J'ai l'impression d'avoir essayé presque toutes les variantes, mais j'ai donné la bonne réponse. –

+0

@KevinGrossman ne s'inquiète pas Kevin - content que cela a aidé (j'ai augmenté votre question) – whytheq