Verwenden von Set-Funktionen

Eine Mengenfunktion holt eine Menge aus einer Dimension, Hierarchie, Ebene oder durch das Durchlaufen der absoluten und relativen Positionen der Mitglieder innerhalb dieser Objekte ab und konstruiert Mengen auf verschiedene Weise.

Mengenfunktionen, wie Mitgliederfunktionen und Tupelfunktionen, sind wesentlich für die Aushandlung der multidimensionalen Strukturen in Analysis Services. Mengenfunktionen sind auch essenziell, um Ergebnisse aus Multidimensional Expressions (MDX)-Abfragen zu erhalten, da Mengenausdrücke die Achsen einer MDX-Abfrage definieren.

Eine der gebräuchlichsten Mengenfunktionen ist die Members (Set) (MDX)- Funktion, die eine Menge mit allen Mitgliedern aus einer Dimension, Hierarchie oder Ebene abruft. Im Folgenden ist ein Beispiel für seine Verwendung innerhalb 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. Es liefert eine Menge von Tupeln, die das kartesische Produkt der ihm als Parameter zugeführten Mengen repräsentieren. Praktisch gesehen ermöglicht diese Funktion, in Abfragen 'verschachtelte' oder 'kreuztabbede' Achsen zu 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 Nachfolgerfunktion (MDX) ähnelt der Kinderfunktion , ist aber leistungsstärker. Es gibt die Nachkommen eines beliebigen Mitglieds auf einer oder mehreren Ebenen einer Hierarchie zurück:

SELECT

[Maßnahmen]. [Internet Sales Amount]

AUF Säulen,

Gibt eine Menge zurück, die alle Daten unter dem Kalenderjahr enthält

2004 in der Kalenderhierarchie der Datumsdimension

NACHKOMMEN(

[Date]. [Kalender]. [Kalenderjahr].&[2004]

, [Datum]. [Kalender]. [Datum])

ON Rows

VON [Adventure Works]

Die Order-(MDX)- Funktion ermöglicht es Ihnen, den Inhalt einer Menge in aufsteigender oder absteigender Reihenfolge nach einem bestimmten numerischen Ausdruck zu ordnen. Die folgende Abfrage liefert dieselben Mitglieder in Zeilen wie die vorherige Abfrage, ordnet sie aber nun nach dem Maß Internet Sales Amount:

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 auch, wie die von einer Mengenfunktion, Descendants, zurückgegebene Menge als Parameter an eine andere Mengenfunktion, Order, weitergegeben werden kann.

Das Filtern einer Menge nach bestimmten Kriterien ist beim Schreiben von Abfragen sehr nützlich, und zu diesem Zweck können Sie die Funktion Filter (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 andere, ausgefeiltere Funktionen, die es ermöglichen, eine Menge auf andere Weise zu filtern. Zum Beispiel zeigt die folgende Abfrage, dass die TopCount (MDX)- Funktion die obersten n Elemente in 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 ist es möglich, eine Reihe logischer Mengenoperationen mit Funktionen wie Intersect (MDX),Union (MDX) und Except (MDX) Funktionen durchzuführen. Die folgende Abfrage zeigt Beispiele für die beiden letztgenannten 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]