Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Microsoft SQL Server Analysis Services kann ein MDX-Skript (Multidimensional Expressions) auf den gesamten Cube oder auf bestimmte Teile des Cubes an bestimmten Stellen innerhalb der Ausführung des Skripts angewendet werden. Das MDX-Skript kann einen mehrschichtigen Ansatz für Berechnungen innerhalb eines Cubes mithilfe von Berechnungsdurchläufen verwenden.
Hinweis
Weitere Informationen dazu, wie sich Berechnungsdurchläufe auf Berechnungen auswirken können, finden Sie unter Verständnis von Durchlaufordnung und Lösungsreihenfolge (MDX).
Um den Berechnungsdurchlauf, den Bereich 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. Das Standardmäßige MDX-Skript verfügt z. B. über eine einzelne CALCULATE-Anweisung am Anfang des Skripts.
Weitere Informationen zur Syntax der CALCULATE-Anweisung finden Sie unter CALCULATE-Anweisung (MDX).
Hinweis
Wenn das Skript eine SCOPE-Anweisung enthält, die eine CALCULATE-Anweisung enthält, wird die CALCULATE-Anweisung von MDX im Kontext des durch die SCOPE-Anweisung definierten Untercubes ausgeführt, nicht gegenüber dem gesamten Cube.
Verwenden dieser Funktion
Mit der This Funktion können Sie den aktuellen Untercube in einem MDX-Skript abrufen. Sie können die This Funktion verwenden, um den Wert von Zellen innerhalb des aktuellen Teilwürfels schnell auf einen MDX-Ausdruck festzulegen. Sie verwenden häufig die This Funktion in Verbindung mit der SCOPE-Anweisung, um während eines bestimmten Berechnungsdurchgangs den Inhalt eines bestimmten Untercubes zu ändern.
Hinweis
Wenn das Skript eine SCOPE-Anweisung mit einer This Funktion enthält, wertet MDX die This Funktion im Kontext des durch die SCOPE-Anweisung definierten Subcubes aus, anstatt für den gesamten Cube.
Dieses Funktionsbeispiel
Im folgenden Beispiel für MDX-Skriptbefehle wird die This-Funktion verwendet, um den Wert der Maßeinheit "Amount" in der "Finance"-Maßgruppe des Beispielwürfels "Adventure Works DW Multidimensional 2012" um 10% für die Kinder des Mitglieds "Redmond" in der Dimension "Customer" 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 Funktion finden Sie unter This (MDX).For more information on the syntax of the This function, see This (MDX).
Verwenden der SCOPE-Anweisung
Die SCOPE-Anweisung definiert den aktuellen Untercube, der den Gültigkeitsbereich anderer MDX-Ausdrücke und -Anweisungen in einem MDX-Skript enthält. MDX wertet diese anderen MDX-Ausdrücke und -Anweisungen aus, einschließlich der This Funktion und der CALCULATE-Anweisung im Kontext des Teilwürfels.
Eine SCOPE-Anweisung ist dynamisch, aber ihrer Natur nach nicht iterativ. Die Anweisungen innerhalb einer SCOPE-Anweisung werden jeweils einmal ausgeführt, aber der Untercube selbst kann dynamisch bestimmt werden. Sie haben beispielsweise einen Würfel mit dem Namen SampleCube. Für den SampleCube-Würfel verwenden Sie die folgende SCOPE-Anweisung, um einen Unterwürfel zu definieren, der den Kontext als ALLMEMBERS innerhalb der Maßdimension festlegt.
SCOPE([Measures].ALLMEMBERS);
THIS = [Measures].ALLMEMBERS.COUNT;
END SCOPE;
Die Anweisungen und Ausdrücke in dieser SCOPE-Anweisung werden ein einziges Mal ausgeführt.
Nun führt ein Geschäftsbenutzer die folgende MDX-Abfrage aus, die einen Messwert mit dem Namen "ExistingMeasure" gegen den SampleCube-Würfel enthält.
WITH MEMBER [Measures].[NewMeasure] AS '1'
SELECT
[Measures].ALLMEMBERS ON COLUMNS,
[Customer].DEFAULTMEMBER ON ROWS
FROM
[SampleCube]
Das von der Abfrage zurückgegebene Zellset ähnelt der ausgabe in der folgenden Tabelle.
| [ExistingMeasure] | [NeueMaßnahme] | |
|---|---|---|
| [Kunde]. [Alle] | 2 | 2 |
Wenn Sie sich das zurückgegebene Cellset ansehen, beachten Sie, wie der in der SCOPE-Anweisung im MDX-Skript enthaltene Wert "ExistingMeasure" dynamisch aktualisiert wird, nachdem das Measure NewMeasure definiert wurde.
Eine SCOPE-Anweisung kann in einer anderen SCOPE-Anweisung geschachtelt werden. Da die SCOPE-Anweisung jedoch nicht iterativ ist, besteht der Hauptzweck für das Schachteln von SCOPE-Anweisungen darin, einen Untercube für eine spezielle Behandlung weiter zu unterteilen.
SCOPE-Erklärung (Beispiel)
Im folgenden MDX-Skriptbeispiel wird eine SCOPE-Anweisung verwendet, um den Wert des Measures Amount in der Measuregruppe "Finance" des Beispielwürfels "Adventure Works DW Multidimensional 2012" um 10% für die untergeordneten Mitglieder des Mitglieds "Redmond" in der Dimension "Customer" höher festzulegen. Eine andere SCOPE-Anweisung ändert jedoch den Untercube so, dass es das Measure Amount für die untergeordneten Elemente des Kalenderjahres 2002 enthält. Schließlich wird die Maßnahme "Amount" nur für diesen Teilwürfel aggregiert, sodass die aggregierten Werte für die Maßnahme "Amount" in anderen Kalenderjahren unverändert bleiben.
/* 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).For more information on the syntax of the SCOPE statement, see SCOPE Statement (MDX).
Siehe auch
MDX-Sprachreferenz (MDX)
Das Grundlegende MDX-Skript (MDX)
MDX Query Fundamentals (Analysis Services)