Freigeben über


Verwalten von Gültigkeitsbereich und Kontext (MDX)

In Microsoft SQL Server 2005 Analysis Services (SSAS) kann ein MDX-Skript (Multidimensional Expressions) für den gesamten Cube oder, an bestimmten Stellen in der Ausführung des Skripts, für bestimmte Bereiche des Cubes gelten. Ein MDX-Skript kann, indem Berechnungsdurchläufe verwendet werden, einen mehrstufigen Ansatz für Berechnungen in einem Cube haben.

ms145515.note(de-de,SQL.90).gifHinweis:
Weitere Informationen dazu, wie sich Berechnungsdurchläufe auf Berechnungen auswirken können, finden Sie unter Grundlegendes zu Durchlauf- und Lösungsreihenfolge (MDX).

Um den Berechnungsdurchlauf, den Gültigkeitsbereich und den Kontext in einem MDX-Skript zu steuern, verwenden Sie speziell die CACULATE-Anweisung, die This-Funktion und die SCOPE-Anweisung.

Verwenden der CALCULATE-Anweisung

Die CALCULATE-Anweisung füllt jede Zelle im Cube mit aggregierten Daten auf. Im MDX-Standardskript gibt es z. B. eine einzelne CALCULATE-Anweisung am Anfang des Skripts.

Weitere Informationen zur Syntax der CALCULATE-Anweisung finden Sie unter CALCULATE-Anweisung (MDX).

ms145515.note(de-de,SQL.90).gifHinweis:
Enthält das Skript eine SCOPE-Anweisung, die eine CALCULATE-Anweisung enthält, wertet MDX die CALCULATE-Anweisung nicht für den gesamten Cube, sondern im Kontext des Teilcubes aus, der durch die SCOPE-Anweisung definiert ist.

Verwenden der This-Funktion

Mit der This-Funktion können Sie in einem MDX-Skript den aktuellen Teilcube abrufen. Sie können die This-Funktion dazu verwenden, die Werte von Zellen im aktuellen Teilcube auf einen MDX-Ausdruck festzulegen. Die This-Funktion wird häufig zusammen mit der SCOPE-Anweisung verwendet, um den Inhalt eines bestimmten Teilcubes im Verlauf eines bestimmten Berechnungsdurchlaufs zu ändern.

ms145515.note(de-de,SQL.90).gifHinweis:
Enthält das Skript eine SCOPE-Anweisung, die eine This-Funktion enthält, wertet MDX die This-Funktion nicht für den gesamten Cube, sondern im Kontext des Teilcubes aus, der durch die SCOPE-Anweisung definiert ist.

Beispiel zur This-Funktion

Im folgenden Beispiel eines MDX-Skriptbefehls wird die This-Funktion dazu verwendet, den Wert des Amount-Measures (in der Finance-Measuregruppe des Adventure Works DW-Beispielcubes) für die untergeordneten Elemente des Redmond-Elements in der Customer-Dimension um 10 % zu erhöhen:

/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS, 
    [Measures].[Amount], *);
        /* This expression sets the value of the Amount measure */
        THIS = [Measures].[Amount] * 1.1;
END SCOPE;

Weitere Informationen zur Syntax der This-Funktion finden Sie unter This (MDX).

Verwenden der SCOPE-Anweisung

Die SCOPE-Anweisung definiert in einem MDX-Skript den aktuellen Teilcube, der weitere MDX-Ausdrücke und -Anweisungen enthält sowie deren Gültigkeitsbereich angibt. MDX wertet diese weiteren MDX-Ausdrücke und -Anweisungen einschließlich der This-Funktion und der CALCULATE-Anweisung im Kontext des Teilcubes aus.

Eine SCOPE-Anweisung ist dynamisch, aber nicht iterativ. Die Anweisungen, die in einer SCOPE-Anweisung enthalten sind, werden einmal ausgeführt, der Teilcube selbst kann aber dynamisch festgelegt werden. Angenommen, Sie haben einen Teilcube mit dem Namen SampleCube. Sie führen die folgende SCOPE-Anweisung für den SampleCube-Cube aus, um einen Teilcube zu definieren, der den Kontext als ALLMEMBERS in der Measures-Dimension definiert:

SCOPE([Measures].ALLMEMBERS);

THIS = [Measures].ALLMEMBERS.COUNT;

END SCOPE;

Die Anweisungen und Ausdrücke in dieser SCOPE-Anweisung werden einmal ausgeführt.

Jetzt führt ein Anwender im geschäftlichen Bereich die folgende MDX-Abfrage, die ein Measure mit dem Namen ExistingMeasure enthält, für den SampleCube-Cube aus:

WITH MEMBER [Measures].[NewMeasure] AS '1'

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

Die von der Abfrage zurückgegebene Zellenmenge sieht in etwa so aus, wie die in der folgenden Tabelle gezeigte Ausgabe.

[ExistingMeasure] [NewMeasure]

[Customer].[All]

2

2

Anhand der zurückgegebenen Zellenmenge können Sie sehen, wie der ExistingMeasure-Wert, der im MDX-Skript in der SCOPE-Anweisung enthalten ist, dynamisch aktualisiert wird, nachdem das NewMeasure-Measure definiert wurde.

SCOPE-Anweisungen können ineinander geschachtelt werden. Da die SCOPE-Anweisung aber nicht iterativ ist, besteht der Hauptzweck für das Schachteln von SCOPE-Anweisungen darin, einen Teilcube für eine spezielle Bearbeitung weiter zu unterteilen.

Beispiel für die SCOPE-Anweisung

Im folgenden MDX-Skriptbeispiel wird eine SCOPE-Anweisung dazu verwendet, den Wert des Amount-Measures (in der Finance-Measuregruppe des Adventure Works DW-Beispielcubes) für die untergeordneten Elemente des Redmond-Elements in der Customer-Dimension um 10 % zu erhöhen. Eine weitere SCOPE-Anweisung ändert allerdings den Teilcube so, dass er das Amount-Measure für die untergeordneten Elemente des Kalenderjahres 2002 enthält. Schließlich wird das Amount-Measure nur für diesen Teilcube aggregiert, sodass die aggregierten Werte für das Amount-Measure für andere Kalenderjahre nicht geändert werden.

/* Calculate the entire cube first. */
CALCULATE;
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS, 
    [Measures].[Amount], *);
        /* This expression sets the value of the Amount measure */
        THIS = [Measures].[Amount] * 1.1;
END SCOPE;

Weitere Informationen zur Syntax der SCOPE-Anweisung finden Sie unter SCOPE-Anweisung (MDX).

Siehe auch

Konzepte

MDX-Sprachreferenz (MDX)
Grundlegendes MDX-Skript (MDX)

Andere Ressourcen

Grundlegendes zu MDX-Abfragen (MDX)

Hilfe und Informationen

Informationsquellen für SQL Server 2005