Angeben des Inhalts einer Abfrageachse (MDX)
Abfrageachsen geben die Kanten eines Cellsets an, die von einer SELECT-Anweisung von MDX (Multidimensional Expressions) zurückgegeben wird. Durch Angeben der Kanten eines Cellsets können Sie die zurückgegebenen Daten einschränken, die für den Client sichtbar sind.
Sie geben Abfrageachsen an, indem Sie einer Menge mithilfe eines <SELECT query axis clause>-Wertes eine bestimmte Abfrageachse zuweisen. Jeder <SELECT query axis clause>-Wert definiert eine Abfrageachse. Die Anzahl der Achsen im Dataset entspricht der Anzahl von <SELECT query axis clause>-Werten in der SELECT-Anweisung.
Abfrageachse (Syntax)
Nachstehend ist die Syntax von <SELECT query axis clause> definiert:
<SELECT query axis clause> ::=
[ NON EMPTY ] Set_Expression [ <SELECT dimension property list clause> ] [<HAVING clause>]
ON {
Integer_Expression |
AXIS( Integer_Expression ) |
{COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS}
}
Jede Abfrageachse hat eine Nummer: 0 für die x-Achse, 1 für die y-Achse, 2 für die z-Achse usw. In der Syntax für <SELECT query axis clause> gibt der Integer_Expression-Wert die Achsennummer an. Eine MDX-Abfrage unterstützt maximal 128 angegebene Achsen, jedoch werden nur selten mehr als 5 Achsen verwendet. Anstelle der ersten 5 Achsen können die Aliase COLUMNS, ROWS, PAGES, SECTIONS und CHAPTERS verwendet werden.
In einer MDX-Abfrage können keine Abfrageachsen ausgelassen werden. In einer Abfrage, die mindestens eine Abfrageachse enthält, dürfen also keine Achsen mit niedrigeren Nummern oder dazwischen liegenden Achsen fehlen. Beispielsweise kann eine Abfrage keine ROWS-Achse ohne eine COLUMNS-Achse enthalten, und sie kann nicht die Achsen COLUMNS und PAGES ohne eine ROWS-Achse enthalten.
Sie können jedoch eine SELECT-Klausel ohne Achsen (d. h. eine leere SELECT-Klausel) angeben. In diesem Fall sind alle Dimensionen Slicerdimensionen, und die MDX-Abfrage wählt eine Zelle aus.
In der obigen Syntax für Abfrageachsen gibt jeder Set_Expression-Wert die Menge an, die den Inhalt der Abfrageachse definiert. Weitere Informationen zu Mengen finden Sie unter Verwenden von Elementen, Tupeln und Mengen (MDX).
Beispiele
Die folgende einfache SELECT-Anweisung gibt das Measure für den Betrag der Internetverkäufe auf der Spaltenachse zurück und verwendet die MDX-MEMBERS-Funktion, um alle Elemente der Kalenderhierarchie in der Datumsdimension auf der Zeilenachse zurückzugeben:
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]
Die zwei folgenden Abfragen geben die gleichen Ergebnisse zurück, aber veranschaulichen die Verwendung von Achsennummern anstelle von Aliasen:
SELECT {[Measures].[Internet Sales Amount]} ON 0,
{[Date].[Calendar].MEMBERS} ON 1
FROM [Adventure Works]
SELECT {[Measures].[Internet Sales Amount]} ON AXIS(0),
{[Date].[Calendar].MEMBERS} ON AXIS(1)
FROM [Adventure Works]
Das vor der festgelegten Definition verwendete Schlüsselwort "NON EMPTY" bietet eine einfache Möglichkeit, alle leeren Tupel von einer Achse zu entfernen. Den Beispielen ist zu entnehmen, dass keine Daten ab August 2004 im Cube vorhanden sind. Um alle Zeilen vom Cellset zu entfernen, die keine Daten in Spalten aufweisen, fügen Sie "NON EMPTY" vor dem Satz in der Zeilenachsendefinition wie folgt hinzu:
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]
"NON EMPTY" kann auf allen Achsen in einer Abfrage verwendet werden. Vergleichen Sie die Ergebnisse der folgenden zwei Abfragen. Bei der ersten wird "NON EMPTY" nicht verwendet, bei der zweiten wird "NON EMPTY" auf beiden Achsen verwendet:
SELECT {[Measures].[Internet Sales Amount]}
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])
SELECT NON EMPTY {[Measures].[Internet Sales Amount]}
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])
Die HAVING-Klausel kann verwendet werden, um den Inhalt einer Achse auf Grundlage bestimmter Kriterien zu filtern. Sie ist weniger flexibel als andere Methoden, mit denen sich dieselben Ergebnisse erzielen lassen (z. B. die FILTER-Funktion). Die Verwendung ist jedoch einfacher. Im Folgenden erhalten Sie ein Beispiel, bei dem nur Datumsangaben mit einem größeren Betrag der Internetverkäufe als 15.000 US-Dollar zurückgegeben werden:
SELECT {[Measures].[Internet Sales Amount]}
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Date].MEMBERS}
HAVING [Measures].[Internet Sales Amount]>15000
ON ROWS
FROM [Adventure Works]