Condividi tramite


Impostazione del contenuto di un asse della query (MDX)

Gli assi della query specificano i bordi di un set di celle restituito dall'istruzione SELECT di MDX (Multidimensional Expression). L'impostazione dei bordi di un set di celle consente di limitare i dati restituiti visibili al client.

Per specificare gli assi della query è necessario assegnare un set a un asse particolare utilizzando <SELECT query axis clause>. Ogni valore <SELECT query axis clause> definisce un asse della query. Il numero di assi nel set di dati è pari al numero di valori <SELECT query axis clause> nell'istruzione SELECT.

Sintassi degli assi della query

Di seguito è illustrata la sintassi per <SELECT query axis clause>:

<SELECT query axis clause> ::=
   [ NON EMPTY ] Set_Expression [ <SELECT dimension property list clause> ] [<HAVING clause>]
   ON {
      Integer_Expression | 
      AXIS( Integer_Expression ) | 
      {COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS}   
      }
      

Ogni asse della query è associato a un numero: zero (0) per l'asse X, 1 per l'asse Y, 2 per l'asse Z e così via. Nella sintassi per <SELECT query axis clause>, il valore Integer_Expression specifica il numero dell'asse. Una query MDX può supportare fino a 128 assi specificati ma pochissime query MDX utilizzano più di cinque assi. Per i primi cinque assi è possibile utilizzare gli alias COLUMNS, ROWS, PAGES, SECTIONS e CHAPTERS.

Una query MDX non può ignorare gli assi della query. In altre parole, una query che include almeno un asse della query non deve escludere gli assi con una numerazione più bassa o intermedia. Ad esempio, una query non può includere un asse ROWS senza un asse COLUMNS oppure gli assi COLUMNS e PAGES senza un asse ROWS.

È tuttavia possibile specificare una clausola SELECT senza assi, ovvero una clausola SELECT vuota. In questo caso, tutte le dimensioni sono dimensioni di sezionamento e la query MDX seleziona una cella.

Nella sintassi dell'asse della query riportata in precedenza, ogni valore Set_Expression specifica il set che definisce il contenuto dell'asse della query. Per ulteriori informazioni sui set, vedere Utilizzo di membri, tuple e set (MDX).

Esempi

La seguente istruzione SELECT semplice restituisce la misura di Internet Sales Amount nell'asse delle colonne e utilizza la funzione MDX MEMBERS per restituire tutti i membri della gerarchia del calendario nella dimensione della data nell'asse delle righe:

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]

Le due query seguenti restituiscono esattamente gli stessi risultati ma illustrano l'utilizzo dei numeri di asse anziché gli alias:

SELECT {[Measures].[Internet Sales Amount]} ON 0,
{[Date].[Calendar].MEMBERS} ON 1
FROM [Adventure Works]

SELECT {[Measures].[Internet Sales Amount]} ON AXIS(0),
{[Date].[Calendar].MEMBERS} ON AXIS(1)
FROM [Adventure Works]

La parola chiave NON EMPTY, utilizzata prima della definizione del set, costituisce un modo facile per rimuovere tutte le tuple vuote da un asse. Negli esempi illustrati finora non sono presenti dati nel cubo a partire dall'agosto 2004. Per rimuovere dal set di celle tutte le righe che non contengono dati in alcuna colonna, aggiungere semplicemente NON EMPTY prima del set nella definizione dell'asse delle righe come segue:

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]

NON EMPTY può essere utilizzato in tutti gli assi di una query. Confrontare i risultati delle due query seguenti, di cui la prima non utilizza NON EMPTY e la seconda l'utilizza in entrambi gli assi:

SELECT {[Measures].[Internet Sales Amount]} 
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])

SELECT NON EMPTY {[Measures].[Internet Sales Amount]} 
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])

La clausola HAVING può essere usata per filtrare il contenuto di un asse in base a criteri specifici. È meno flessibile degli altri metodi che possono ottenere gli stessi risultati, ad esempio la funzione FILTER, ma è più semplice da utilizzare. Di seguito è riportato un esempio che restituisce solamente le date in cui l'Importo vendite Internet è maggiore di $15.000:

SELECT {[Measures].[Internet Sales Amount]} 
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Date].MEMBERS} 
HAVING [Measures].[Internet Sales Amount]>15000
ON ROWS
FROM [Adventure Works]