none
MDX - Element ausblenden RRS feed

  • Frage

  • Hallo zusammen,

    für Berechnungen innerhalb des Cubes ist es notwendig, dass ich die Werte hinter zwei Elementen miteinander verrechne. Diese müssen zur Laufzeit berechnet werden und können nicht bereits im Data Warehouse berechnet werden.

    Basis ist eine Parent-Child Dimension. Ich habe eine Kostenart einmal mit Soll und einmal mit Haben Buchungen. Diese sollen nicht summiert sondern unter verschiedenen Bedingungen subtrahiert werden. Das funktioniert auch super. 

    Jetzt habe ich nur das Problem, dass ich die Haben Buchungen, die in einem anderen Knoten in der Hierarchie hängen, gar nicht mehr sehen will. Wenn ich jetzt den Wert nach der Berechnung auf NULL setze verschwindet er komplett, also auch aus der Berechnung.

    Mein MDX-Script (ich bin blutiger Anfänger) sieht derzeit folgendermaßen aus:

    SCOPE([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]);
    THIS =         iif(abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]) > 
                   abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]),
    
                   abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]) - 
                   abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]),
    
                   abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]) - 
                   abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]));
    END SCOPE;
    
    FREEZE ([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]);
    
    SCOPE ([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]);
    THIS = NULL;
    END SCOPE;

    Der erste Teil funktioniert wie gewünscht und gibt auch das korrekte Ergebnis auf dem angegeben Knoten aus. Wenn ich allerdings die weiteren Befehle aktiviere verschwinden die Haben Buchungen... 

    Hat jemand eine Idee wie ich das geschickt lösen könnte?

    Beste Grüße

    MuenchM

    Montag, 24. Juli 2017 08:12

Antworten

  • Hallo MuenchM,

    Wende die FREEZE-Anweisung nicht auf die Haben-Buchungen an, sondern innerhalb der bereichsbezogenen Zuweisung (scoped assignment):

    SCOPE([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]);
    THIS =     iif(abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]) > 
               abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]),
    
               abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]) - 
               abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]),
    
               abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]) - 
               abs([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000S]));
               FREEZE(THIS);
    END SCOPE;
    
    SCOPE ([BAB-Hierarchie].[BAB-Hierarchie].&[000001650000901000H]);
    THIS = NULL;
    END SCOPE;

    Ich verweise Dich auf das Beispiel in folgendem Blogeintrag:
    The Use And Abuse Of The MDX Freeze Statement

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert MuenchM Dienstag, 25. Juli 2017 08:11
    Dienstag, 25. Juli 2017 08:03
    Administrator