2017-07-31 2 views
0

J'essaie de créer un ensemble personnalisé qui exclut les entrées d'une autre hiérarchie, et je ne peux pas utiliser la fonction except pour cette raison. J'ai essayé ceci, mais j'obtiens un message d'erreur indiquant que la hiérarchie est montrée plus d'une fois dans la requête. Quelqu'un pourrait-il me conseiller sur la façon de le faire de la meilleure façon?MDX: Créer un ensemble excluant les entrées d'une autre hiérarchie

WITH 
SET [Market1] AS { 
    [Market].[Market].[Market].&[103], 
    -([Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]) 
} 

EDIT: Voici ma requête (la plus grande partie est construite à partir d'un générateur de requêtes)

WITH 
SET [Market1] AS SUM((
    [Market].[Market].[Market].&[103], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    )), [Measures].[Price]) 
SELECT NON EMPTY [Market1] ON ROWS 
FROM (SELECT ({ StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]") }) ON COLUMNS 
FROM (SELECT ({ [Travel Type].[Travel Type].&[101], 
        [Travel Type].[Travel Type].&[102], 
        [Travel Type].[Travel Type].&[103] }) ON COLUMNS 
FROM (SELECT ({ [Departure Date].[Year].&[2017] }) ON COLUMNS 
FROM [Booking]))) 
WHERE ([Departure Date].[Year].&[2017], 
     [Travel Type].[Travel Type].CurrentMember, 
     StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]")) 

EDIT2: Réussi à pirater ensemble

WITH 
SET [Market1] AS (
    [Market].[Market].[Market].&[103], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    )) 
MEMBER Agg AS SUM 
    ([Market1], [Measures].[Price] 
    ) 
SELECT NON EMPTY Agg ON COLUMNS 
FROM (SELECT ({ StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]") }) ON COLUMNS 
FROM (SELECT ({ [Travel Type].[Travel Type].&[101], 
        [Travel Type].[Travel Type].&[102], 
        [Travel Type].[Travel Type].&[103] }) ON COLUMNS 
FROM (SELECT ({ [Departure Date].[Year].&[2017] }) ON COLUMNS 
FROM [Booking]))) 
WHERE ([Departure Date].[Year].&[2017], 
     [Travel Type].[Travel Type].CurrentMember, 
     StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]")) 

Répondre

0

Vous ne pouvez pas le faire cette façon. Vous voulez limiter les données de différentes dimensions, donc vous devez utiliser le tuple:

WITH 
SET [Market1] AS (
    [Market].[Market].[Market].&[103], 
    EXCEPT([Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS, 
     {([Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    ) 
+0

Merci, ça marche! Comment puis-je résumer tout? Maintenant, je reçois toutes les lignes pour toutes les agences. J'ai essayé la fonction de somme, mais j'obtiens un message d'erreur disant que la fonction attend un tuple pour l'argument, j'ai mis ma requête dans le message original – joddm

+0

Vous ne pouvez pas SUM dans SET - vous devriez créer le membre calculé (comme vous fait dans Edit2) ou le faire directement dans la requête. Dans le futur, il est préférable de demander une requête séparée quand vous en avez une autre. De cette façon SUM apparaîtra dans le titre afin que plus de gens puissent vous aider –