Använda Set Functions

En mängdfunktion hämtar en mängd från en dimension, hierarki, nivå eller genom att gå genom de absoluta och relativa positionerna för medlemmar inom dessa objekt, och konstruerar mängder på olika sätt.

Mängdfunktioner, liksom medlemsfunktioner och tuplefunktioner, är avgörande för att kunna hantera de multidimensionella strukturer som finns i analystjänster. Mängdfunktioner är också avgörande för att få resultat från Multidimensional Expressions (MDX)-frågor eftersom mängduttryck definierar axlarna i en MDX-fråga.

En av de vanligaste mängdfunktionerna är Members (Set) (MDX)- funktionen, som hämtar en mängd som innehåller alla medlemmar från en dimension, hierarki eller nivå. Följande är ett exempel på dess användning inom en fråga:

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]  

En annan vanligt använd funktion är Crossjoin (MDX)- funktionen. Den returnerar en mängd tupler som representerar den kartesiska produkten av de mängder som passerats in som parametrar. I praktiken gör denna funktion det möjligt att skapa 'nästlade' eller 'korstabberade' axlar i frågor:

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]  

Descendants (MDX)-funktionen liknar Children-funktionen, men är kraftfullare. Den återlämnar ättlingarna till varje medlem på en eller flera nivåer i en hierarki:

SELECT

[Mått]. [Internet Sales Amount]

OM kolumner,

Returnerar en uppsättning som innehåller alla datum under kalenderår

2004 i kalenderhierarkin för datumdimensionen

ÄTTLINGAR(

[Datum]. [Kalender]. [Kalenderår].&[2004]

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

ON Rows

FRÅN [Adventure Works]

Order (MDX)-funktionen gör det möjligt att ordna innehållet i en mängd i stigande eller fallande ordning enligt ett visst numeriskt uttryck. Följande fråga returnerar samma medlemmar på rader som föregående fråga, men ordnar dem nu enligt Internet Sales Amount-måttet:

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]  

Denna fråga illustrerar också hur mängden som returnerades från en mängdfunktion, Descendants, kan skickas som en parameter till en annan mängdfunktion, Order.

Att filtrera en mängd enligt vissa kriterier är mycket användbart när du skriver frågor, och för detta ändamål kan du använda funktionen Filter (MDX), som visas i följande exempel:

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]  

Andra, mer sofistikerade funktioner finns som låter dig filtrera en mängd på andra sätt. Till exempel visar följande fråga att TopCount (MDX)- funktionen returnerar de översta n objekten i en mängd:

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]  

Slutligen är det möjligt att utföra ett antal logiska mängdoperationer med funktioner som Intersect (MDX),Union (MDX) och Except (MDX) funktioner. Följande fråga visar exempel på de två senare funktionerna:

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]