Utilizzo delle funzioni sugli insiemi

Una funzione sugli insiemi recupera un set da una dimensione, da una gerarchia, da un livello o attraversando i percorsi assoluti e relativi dei membri di tali oggetti, costruendo i set in vari modi.

Le funzioni sugli insiemi, come le funzioni membro e le funzioni di tupla, sono essenziali per la negoziazione delle strutture multidimensionali utilizzate in Analysis Services. Le funzioni sugli insiemi sono essenziali anche per ottenere risultati dalle query MDX, perché le espressioni set definiscono gli assi di una query MDX.

Una delle funzioni sugli insiemi più comune è la funzione Members (Set) (MDX), che recupera un set contenente tutti i membri di una dimensione, una gerarchia o un livello. Nell'esempio seguente viene illustrato l'utilizzo di questa funzione all'interno di una query:

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]

Un'altra funzione di uso comune è la funzione Crossjoin (MDX). Questa funzione restituisce un set di tuple che rappresenta il prodotto cartesiano dei set passati come parametri. In termini pratici, consente di creare assi "nidificati" o "con campi incrociati" nelle query:

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]

La funzione Descendants (MDX) è simile alla funzione Children, ma è più efficace. Restituisce i discendenti di qualsiasi membro a uno o più livelli in una gerarchia:

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

//Restituisce un set contenente tutte le date comprese nel calendario

//2004 nella gerarchia Calendar della dimensione Date

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004]

, [Date].[Calendar].[Date])

ON Rows

FROM [Adventure Works]

La funzione Order (MDX) consente di ordinare il contenuto di un set in ordine ascendente o discendente in base a una particolare espressione numerica. La query seguente restituisce gli stessi membri nelle righe della query precedente, ma in questo caso i membri vengono ordinati in base alla misura 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]

Questa query illustra anche come passare come parametro il set restituito da una funzione sugli insiemi (Descendants) a un'altra funzione sugli insiemi (Order).

Applicare un filtro a un set in base a determinati criteri si rivela molto utile durante la scrittura di query. A questo scopo è possibile utilizzare la funzione Filter (MDX) come illustrato nell'esempio seguente:

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]

Esistono altre funzioni più sofisticate che consentono di applicare filtri a un set con modalità diverse. Ad esempio, nella query seguente viene illustrata la funzione TopCount (MDX) che restituisce i primi n elementi di un set:

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]

È inoltre possibile eseguire una serie di operazioni logiche sugli insiemi utilizzando funzioni quali Intersect (MDX), Union (MDX) e Except (MDX). La query seguente illustra l’utilizzo delle ultime due funzioni:

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]