Spécification du contenu d'un axe de requête (MDX)
Les axes de requête spécifient les bords d'un ensemble de cellules retourné par une instruction SELECT MDX (Multidimensional Expressions). La spécification des bords d'un ensemble de cellules vous permet de restreindre les données retournées qui sont visibles par le client.
Pour spécifier des axes de requête, utilisez la clause <SELECT query axis clause> pour attribuer un jeu à un axe de requête particulier. Chaque valeur <SELECT query axis clause> définit un axe de requête. Le nombre d'axes du dataset est égal au nombre de valeurs <SELECT query axis clause> de l'instruction SELECT.
Syntaxe de l'axe de requête
L'exemple suivant indique la syntaxe de <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}
}
Chaque axe de requête possède un numéro : 0 pour l'axe x, 1 pour l'axe y, 2 pour l'axe z, etc. Dans la syntaxe de <SELECT query axis clause>, la valeur Integer_Expression spécifie le numéro de l'axe. Une requête MDX peut prendre en charge jusqu'à 128 axes spécifiés, mais très peu de requêtes MDX en utilisent plus de 5. Pour les cinq premiers axes, les alias COLUMNS, ROWS, PAGES, SECTIONS et CHAPTERS peuvent remplacer les numéros.
Une requête MDX ne peut pas omettre les axes de requête. C'est-à-dire qu'une requête qui comporte un ou plusieurs axes de requête ne doit pas exclure les axes dotés de numéros inférieurs ou intermédiaires. Par exemple, une requête ne peut pas avoir un axe ROWS sans un axe COLUMNS, ni des axes COLUMNS et PAGES sans un axe ROWS.
Toutefois, vous pouvez spécifier une clause SELECT sans axes (c'est-à-dire une clause SELECT vide). Dans ce cas, toutes les dimensions sont des dimensions de découpage, et la requête MDX sélectionne une cellule.
Dans la syntaxe d'axe de requête ci-dessus, chaque valeur Set_Expression spécifie le jeu définissant le contenu de l'axe de requête. Pour plus d'informations sur les jeux, consultez Utilisation de membres, de tuples et de jeux (MDX).
Exemples
L'instruction SELECT suivante retourne la mesure Internet Sales Amount sur l'axe des colonnes et utilise la fonction MDX MEMBERS pour retourner tous les membres de la hiérarchie Calendar de la dimension Date sur l'axe des lignes :
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]
Les deux requêtes suivantes retournent exactement les mêmes résultats, mais montrent l'utilisation des numéros d'axe plutôt que des 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]
Le mot clé NON EMPTY, utilisé avant la définition de l'ensemble, permet de supprimer facilement tous les tuples vides d'un axe. Par exemple, dans les exemples que nous avons vus jusqu'à maintenant, il n'y a aucune donnée dans le cube à partir d'août 2004. Pour supprimer toutes les lignes de l'ensemble de cellules dans lesquelles ne se trouve aucune donnée, ajoutez simplement NON EMPTY avant l'ensemble sur la définition de l'axe des lignes, de la façon suivante :
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]
NON EMPTY peut être utilisé sur tous les axes d'une requête. Comparez les résultats des deux requêtes suivantes, la première n'utilisant pas NON EMPTY et la seconde utilisant NON EMPTY sur les deux axes :
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 clause HAVING peut être utilisée pour filtrer le contenu d'un axe selon des critères spécifiques. Cette méthode est moins souple que d'autres pouvant obtenir les mêmes résultats, telles que la fonction FILTER, mais elle est plus simple à utiliser. Voici un exemple qui retourne uniquement les dates auxquelles le montant des ventes sur Internet a dépassé 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]