Verwenden von Mengenfunktionen
Eine Mengenfunktion ruft eine Menge aus einer Dimension, einer Hierarchie oder einer Ebene ab oder indem sie die absoluten und relativen Speicherorte von Elementen im jeweiligen Objekt traversiert, wobei die jeweilige Menge auf verschiedene Arten erstellt werden kann.
Mengenfunktionen sind, wie Elementfunktionen und Tupelfunktionen, wesentlich für das Aushandeln mehrdimensionaler Strukturen, die in Analysis Services zu finden sind. Mengenfunktionen sind außerdem unverzichtbar zum Erzielen von Ergebnissen aus MDX-Abfragen (Multidimensional Expressions), weil Mengenausdrücke die Achsen einer MDX-Abfrage definieren.
Eine der am häufigsten verwendeten Satzfunktionen ist die Funktion Members (Set) (MDX), die einen Satz abruft, der alle Elemente aus einer Dimension, Hierarchie oder Ebene enthält. Das folgende Beispiel veranschaulicht ihre Verwendung in einer Abfrage:
SELECT
//Returns all of the members on the Measures dimension
[Measures].MEMBERS
ON Columns,
//Returns all of the members on the Calendar Year level of the Calendar Year Hierarchy
//on the Date dimension
[Date].[Calendar Year].[Calendar Year].MEMBERS
ON Rows
FROM [Adventure Works]
Eine weitere häufig verwendete Funktion ist die Crossjoin(MDX) -Funktion. Sie gibt eine Menge von Tupeln zurück, die dem kartesischen Produkt der Mengen entspricht, die ihr als Parameter übergeben werden. Mit dieser Funktion können Sie in Abfragen Achsen geschachtelt oder in Kreuztabellen erstellen:
SELECT
//Returns all of the members on the Measures dimension
[Measures].MEMBERS
ON Columns,
//Returns a set containing every combination of all of the members
//on the Calendar Year level of the Calendar Year Hierarchy
//on the Date dimension and all of the members on the Category level
//of the Category hierarchy on the Product dimension
Crossjoin(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Product].[Category].[Category].MEMBERS)
ON Rows
FROM [Adventure Works]
Die Funktion "Nachfolger" (MDX) ähnelt der Funktion "Untergeordnete Elemente ", ist aber leistungsfähiger. Es gibt die Nachfolger eines beliebigen Elements auf einer oder mehreren Ebenen in einer Hierarchie zurück:
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Gibt eine Menge zurück, die alle Datumsangaben enthält, die unter Kalenderjahr
//2004 in der Kalenderhierarchie der Date-Dimension liegen
DESCENDANTS(
[Datum]. [Kalender]. [Kalenderjahr].&[2004]
, [Date].[Calendar].[Date])
ON Rows
FROM [Adventure Works]
Mit der Funktion Reihenfolge (MDX) können Sie den Inhalt eines Satzes in aufsteigender oder absteigender Reihenfolge nach einem bestimmten numerischen Ausdruck sortieren. Die folgende Abfrage gibt dieselben Elemente in Zeilen zurück wie die vorherige Abfrage, ordnet diese aber nach dem Internet Sales Amount-Measure:
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Returns a set containing all of the Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension
//ordered by Internet Sales Amount
ORDER(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
, [Measures].[Internet Sales Amount], BDESC)
ON Rows
FROM [Adventure Works]
Diese Abfrage veranschaulicht, wie die von einer Mengenfunktion (DESCENDANTS) zurückgegebene Menge als Parameter an eine andere Mengenfunktion, (ORDER) übergeben wird.
Das Filtern eines Satzes nach bestimmten Kriterien ist sehr hilfreich beim Schreiben von Abfragen, und zu diesem Zweck können Sie die Filter-Funktion (MDX) verwenden, wie im folgenden Beispiel gezeigt:
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Returns a set containing all of the Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension
//where Internet Sales Amount is greater than $70000
FILTER(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
, [Measures].[Internet Sales Amount]>70000)
ON Rows
FROM [Adventure Works]
Es gibt weitere verfeinerte Funktionen, mit denen Sie eine Menge auf andere Weise filtern können. Die folgende Abfrage zeigt beispielsweise, dass die Funktion TopCount (MDX) die obersten n Elemente in einem Satz zurückgibt:
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Returns a set containing the top 10 Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension by Internet Sales Amount
TOPCOUNT(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
,10, [Measures].[Internet Sales Amount])
ON Rows
FROM [Adventure Works]
Schließlich ist es möglich, eine Reihe von logischen Satzvorgängen mithilfe von Funktionen wie Intersect (MDX), Union (MDX) und Except (MDX)- Funktionen auszuführen. Die folgende Abfrage enthält Beispiele für die letzten beiden Funktionen:
SELECT
//Returns a set containing the Measures Internet Sales Amount, Internet Tax Amount and
//Internet Total Product Cost
UNION(
{[Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount]}
, {[Measures].[Internet Total Product Cost]}
)
ON Columns,
//Returns a set containing all of the Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension
//except the January 1st 2004
EXCEPT(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
,{[Date].[Calendar].[Date].&[915]})
ON Rows
FROM [Adventure Works]
Weitere Informationen
Functions (MDX Syntax) (Funktionen (MDX-Syntax))
Using Member Functions (Verwenden von Elementfunktionen)
Using Tuple Functions (Verwenden von Tupelfunktionen)