Freigeben über


Verwalten von Gültigkeitsbereich und Kontext (MDX)

Gilt für: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

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

Hinweis

Weitere Informationen dazu, wie sich Berechnungsdurchläufe auf Berechnungen auswirken können, finden Sie unter Grundlegendes zu Passreihenfolge 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)..

Hinweis

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.

Hinweis

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 MDX-Skriptbefehlsbeispiel wird die This-Funktion verwendet, um den Wert des Measures Amount in der Measuregruppe Finance des Adventure Works DW Multidimensional 2012-Beispielwürfels 2012 auf 10 % höher für die untergeordneten Elemente des Redmond-Members in der Customer-Dimension 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 dieser 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]

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

[ExistingMeasure] [NewMeasure]
[Customer].[All] 2 2

Anhand des zurückgegebenen Cellsets 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 verwendet, um den Wert des Measures Amount in der Measuregruppe Finance des Adventure Works DW Multidimensional 2012-Beispielwürfels auf 10 % höher für die untergeordneten Elemente des Redmond-Members in der Customer-Dimension festzu legen. 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).

Weitere Informationen

MDX-Sprachreferenz (MDX)
Grundlegendes MDX-Skript (MDX)
Grundlegendes zu MDX-Abfragen (Analysis Services)