Bewältigung subtiler zeitdimensionaler Herausforderungen in MDX: Eine Fallstudie mit mehreren Hierarchien

Nathalie Leroy
Nathalie Leroy
March 21, 2025

Dies ist ein sehr fortschrittliches MDX-Beispiel, das bei einem unserer Kunden angetroffen wurde. Beachten Sie, dass es eine Funktion von ICCube verwendet, die es ermöglicht, dass für ein Tupel dieselbe Hierarchie mehrfach definiert wird.

INHALTSVERZEICHNIS
Von Grok AI generierte rosa Würfel
OLAP
Analytik

Wir präsentieren hier ein Beispiel für sehr fortgeschrittenes MDX, auf das wir bei einem unserer Kunden gestoßen sind. Beachten Sie, dass es eine Funktion von ICCube verwendet, die es ermöglicht, dass für ein Tupel dieselbe Hierarchie mehrfach definiert wird.

Der Anwendungsfall

Der Anwendungsfall beinhaltet mehrere Zeithierarchien innerhalb einer einzigen Zeitdimension auf eine nicht standardmäßige Weise.

Die vereinfachte Struktur lautet wie folgt:

  • Dimension: Kalender
    • Hierarchie: Jahr
      • Stufe: Jahr
    • Hierarchie: Zeitraum
      • Ebene: Periodenwert (PV)
      • Stufe: Zeitraum (P)

Beispiel für eine Periodenhierarchie (PV- und P-Kinder):

  • 1
    • P1 2024
    • P1 2025
    • P1 2026
  • 2
    • P2 2024
    • P2 2025
    • P2 2026
  • ...

Ziel ist es, den Umsatz für das Vorjahr zu berechnen und gleichzeitig Jahr, PV und P anzuzeigen. Hier ist die erste Abfrage:

MIT

MITGLIED [Maßnahmen]. [Umsatz im Vorjahr] AS ([Kalender]. [Jahr] .CurrentMember.prevMember, [Maßnahmen]. [Umsatz])

WÄHLEN

{[Maßnahmen]. [Umsatz], [Maßnahmen]. [Umsatz im Vorjahr]} auf 0

[Kalender]. [Jahr]. [Jahr] *

[Kalender]. [Zeitraum]. [PV] *

[Kalender]. [Zeitraum]. [P] auf 1

[Produkt]. [Produkt]. [Produkt] auf 2

VON [Cube]

In unserem Beispiel suchen wir nach etwas wie:

2024 2025
P1 2024 P1 2025
Sales Sales Prev-Year Sales Sales Prev-Year
Product 1 8 5 10 8

Aber was wir haben:

2024 2025
P1 2024 P1 2025
Sales Sales Prev-Year Sales Sales Prev-Year
Product 1 8 <empty> 10 <empty>

Was ist hier passiert?

Da Jahr und Periode separate Hierarchien sind, ist der Ausdruck

([Calendar].[Year].currentMember.prevMember,  [Measures].[Sales])

wird (nach Fertigstellung aus dem aus den Achsen definierten Kontext):

([Calendar].[Year].currentMember.prevMember, [Calendar].[Period].[PV].[1], [Calendar].[Period].[P].[P1 2025], [Measures].[Sales])

Warum?

MDX hat den aktuellen Kontext von [P1 2025] von der Achse beibehalten und ihn mit dem Vorjahr [2024] kombiniert. Da [P1 2025] unter [Year].[2024] im Cube nicht existiert, war das Ergebnis statt 8.

Wir haben:

  • Aktuel: ([Calendar].[Year].[2024], [Calendar].[Period].[PV].[1], [Calendar].[Period].[P].[P1 2025], [Measures].[Sales])
  • Erwartet: ([Calendar].[Year].[2024], [Calendar].[Period].[PV].[1], [Measures].[Sales])

Optisch:

  • Aktuel: prevMember von [2025] * [1] * [P1 2025] wurde zu [2024] * [1] * [P1 2025]
  • Erwartet: prevMember von [2025] * [1] * [P1 2025] sollte [2024] * [1] sein (was [2024] * [1] * [P1 2024] entspricht, da es für jedes Jahr nur ein Kind [P] von [PV] gibt. Dies liegt an der Konstruktion der Hierarchie).

Was wir tun müssen

Behalte [Calendar].[Period].[PV].[1] und zurücksetzen [Calendar].[Period].[P].[P1 2025]

Lösung

Geben Sie das CurrentMember der Periode an, um die Standardeinstellung zu überschreiben:

WITH
 MEMBER [Measures].[Sales Prev Year] AS ([Calendar].[Year].currentMember.prevMember, [Calendar].[Period].currentMember(0), [Measures].[Sales])‍

SELECT
 { [Measures].[Sales], [Measures].[Sales Prev Year] } on 0
 [Calendar].[Year].[Year] * [Calendar].[Period].[PV] * [Calendar].[Period].[P] on 1
 [Product].[Product].[Product] on 2
FROM [Cube]

Wie gelesen in der Dokument „Aktuelles Mitglied“:

Seit ICCube 4.8 gibt diese Funktion eine Menge von Elementen zurück, wenn das Tupel zwei Mitglieder derselben Hierarchie enthält. Für diese Funktion muss die ICCube-Eigenschaft 'DimensionalityCheck' auf False gesetzt sein.

Deshalb müssen wir [Calendar].[Period].currentMember(0) abrufen

Daher entspricht (0) dem ersten Element, nämlich [Calendar].[Period].[PV].[1]. Dadurch werden alle anderen Mitglieder der Hierarchie überschrieben und [Calendar].[Period].[P].[P1 2025] wird zurückgesetzt.

Dinge, die es zu berücksichtigen gilt:

  • Sie können dieselbe Hierarchie in einer oder mehreren Achsen verwenden, dies kann jedoch Ihre Berechnungen erschweren.
  • In diesem Szenario gibt CurrentMember eine Menge zurück.

Dieses subtile, fortgeschrittene Szenario zeigt, wie Hierarchie-Interaktionen unbemerkt Ergebnisse verzerren können. Tools wie ein MDX-Debugger sind von unschätzbarem Wert, um solche Berechnungen Schritt für Schritt nachvollziehen zu können.

Sie finden unsere Artikel hilfreich?
Abonniere unseren Newsletter, um nie einen zu verpassen!