2017-08-31 4 views
0

Je ne peux pas me débarrasser des lignes vides dans la requête de sortie MDX suivante. J'affiche les 12 derniers mois de revenus pour une certaine dimension avec 4 niveaux dans sa hiérarchie. Je filtre cette sortie en fonction d'une autre dimension de l'instruction where.MDX ne peut pas filtrer les lignes vides

J'ai essayé NON EMPTY, NonEmpty(), FILTER et etc, mais je ne peux pas le faire fonctionner.

Please look at this image.

WITH 
    MEMBER [Measures].[Member Full Path] AS 
    [Revenuedim].CurrentMember.UniqueName 
    MEMBER [Measures].[Member Ordinal] AS 
    [Revenuedim].CurrentMember.Ordinal 
SELECT 
    NON EMPTY 
    Hierarchize 
    (
     Union 
     (
     CrossJoin 
     (
      [Measures].[BeaconAmount_USD] 
     ,LastPeriods 
      (12 
      ,[Date.YQM].LastChild.LastChild.LastChild 
     ) 
     ) 
     ,CrossJoin 
     (
      { 
      [Measures].[Member Ordinal] 
      ,[Measures].[Member Full Path] 
      } 
     ,[Date.YQM].[2018] 
     ) 
    ) 
    ,POST 
    ) ON COLUMNS 
,NON EMPTY 
    Order 
    (
     ToggleDrillState 
     (
     ToggleDrillState 
     (
      ToggleDrillState 
      (
      ToggleDrillState 
      (
       {[Revenuedim].[All CPs]} 
      ,{} 
      ) 
      ,{} 
     ) 
     ,{} 
     ) 
     ,{} 
    ) 
    ,[Measures].[BeaconAmount_USD] 
    ,DESC 
    ) ON ROWS 
FROM [Revenue_CP] 
WHERE 
    [Revenuedim_SOB].[TCS BPO Chile S.A.]; 
+1

@AliMajedHA S'il vous plaît ne pas ajouter ' Merci à un poste, [il est considéré comme le bruit et doit être évité] (https://meta.stackoverflow.com/a/260778/4244993) – jmattheis

Répondre

1

Vous pouvez essayer d'ajouter une condition dans vos mesures personnalisées:

WITH 
    MEMBER [Measures].[Member Full Path] AS 
    [Revenuedim].CurrentMember.UniqueName 
    MEMBER [Measures].[Member Ordinal] AS 
    [Revenuedim].CurrentMember.Ordinal 
... 
... 

Alors IIF basé sur un tuple par exemple ([Revenuedim] .CurrentMember, [Date.YQM] [2018].) Serait probablement le faire:

WITH 
    MEMBER [Measures].[Member Full Path] AS 
    IIF(
    ([Revenuedim].CurrentMember, [Date.YQM].[2018]) = 0 
    ,NULL 
    ,[Revenuedim].CurrentMember.UniqueName 
    ) 
    MEMBER [Measures].[Member Ordinal] AS 
    IIF(
    ([Revenuedim].CurrentMember, [Date.YQM].[2018]) = 0 
    ,NULL 
    ,[Revenuedim].CurrentMember.Ordinal 
    ) 
... 
... 
+0

Non, malheureusement, cela ne fonctionne pas. Au lieu de cela, il affiche un blanc uniquement au niveau Tous les CP (le niveau Tous du Revenuedim) pour la colonne ordinale, car cette cellule était littéralement 0 (= l'ordinalité était 0 ...) – user1186098

+0

Mais cela a à voir avec le fait que les mesures calculées sont toujours présentes ... parce que les laisser dehors, il ne montre pas les rangées vides. Comment puis-je résoudre ceci: ( – user1186098

0

enfin trouvé ce que je avais besoin ...

WITH 
    MEMBER [Date.YQM].[Last12M] AS 
    Aggregate( 
    Tail([Date.YQM].[Month].Members,12)) 

    MEMBER [Measures].[Member Full Path] AS 
    IIF(
    isEmpty ([Revenuedim].CurrentMember * [Date.YQM].[2017] * [Measures].[BeaconAmount_USD] * [Revenuedim_SOB].[TCS BPO Chile S.A.]) 
     ,NULL 
    ,[Revenuedim].CurrentMember.UniqueName 
    ) 
    MEMBER [Measures].[Member Ordinal] AS 
    IIF(
    isEmpty([Revenuedim].CurrentMember * [Date.YQM].[2017] * [Measures].[BeaconAmount_USD] * [Revenuedim_SOB].[TCS BPO Chile S.A.]) 
    ,NULL 
    ,[Revenuedim].CurrentMember.Ordinal 
    ) 

     SELECT 
     NON EMPTY 
     Hierarchize(

     Union(
       Crossjoin([Measures].[BeaconAmount_USD] ,  
       LastPeriods(12,[Date.YQM].lastChild.lastChild.lastChild) 
       ) 
      , 
      Crossjoin({[Measures].[Member Ordinal], [Measures].[Member Full Path]}, [Date.YQM].[Last12M]) 
     ) 
     ,POST) ON COLUMNS, 

     NON EMPTY 
      ORDER(
      TOGGLEDRILLSTATE(
       TOGGLEDRILLSTATE(
        TOGGLEDRILLSTATE(
         TOGGLEDRILLSTATE(
        {[Revenuedim].[All CPs]}, 
       {[Revenuedim].[All CPs]} 
      ) 
      , {} 
     ), {} 
     ), {} 
    ) 
,[Measures].[BeaconAmount_USD], 
DESC) 
ON ROWS from [Revenue_CP] 
where [Revenuedim_SOB].[TCS BPO Chile S.A.] 
+0

blimey - quelques encouragements de ma tentative auraient été appréciés - ma réponse a certainement aidé? – whytheq

+0

Pourquoi faites-vous des jointures croisées à l'intérieur de la fonction 'IsEmpty'? Les jointures croisées produisent un seul tuple ensembles - donc vous pouvez aussi bien utiliser des tuples? – whytheq