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 meistverwendeten Mengenfunktionen ist die Members (Menge) (MDX)-Funktion die eine Menge liefert, die alle Elemente der angegebenen 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 andere 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 Descendants (MDX)-Funktion ähnelt der Children-Funktion, ist jedoch 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(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
ON Rows
FROM [Adventure Works]
Mit der Order (MDX)-Funktion können Sie den Inhalt einer Menge gemäß einem bestimmten numerischen Ausdruck aufsteigend oder absteigend 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.
Beim Erstellen von Abfragen ist es sehr nützlich, eine Menge nach bestimmten Kriterien zu filtern. Sie können dazu die Filter (MDX)-Funktion verwenden, wie das folgende Beispiel zeigt:
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. Zum Beispiel zeigt die folgende Abfrage, wie die TopCount (MDX)-Funktion die obersten n-Elemente einer Menge 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 gibt es noch die Möglichkeit einer Reihe logischer Mengenoperationen, die z. B. die Intersect (MDX)-Funktion, die Union (MDX)-Funktion und die Except (MDX)-Funktion verwenden. 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]
Siehe auch