Partager via


Création de jeux nommés à l'aide d'expressions MDX (MDX)

Une expression d'ensemble peut être une déclaration assez longue, complexe et donc difficile à assimiler. Ou bien, il est possible que vous l'utilisiez si souvent qu'il devient pénible de la redéfinir à chaque fois. Pour faciliter l'utilisation d'une expression longue, complexe ou fréquemment utilisée, la syntaxe MDX (Multidimensional Expressions) vous permet de définir une telle expression sous forme de jeu nommé.

Un jeu nommé est essentiellement une expression d'ensemble à laquelle un alias a été attribué. Il peut comprendre les membres ou les fonctions pouvant être normalement intégrées dans un jeu. MDX traitant l'alias du jeu nommé comme une expression d'ensemble, vous pouvez utiliser cet alias où une telle expression est acceptée.

Vous pouvez définir pour un jeu nommé l'un des contextes suivants :

  • Étendue de requête   Pour créer un jeu nommé défini en tant que partie d'une requête MDX, et dont l'étendue est donc limitée à la requête, utilisez le mot clé WITH. Vous pouvez ensuite utiliser le jeu nommé au sein d'une instruction MDX SELECT. De la sorte, vous pouvez modifier le jeu nommé créé à l'aide du mot clé WITH sans porter atteinte à l'instruction SELECT.

    Pour plus d'informations sur l'utilisation du mot clé WITH pour la création de jeux nommés, consultez Création de jeux nommés d'étendue de requête (MDX).

  • **Étendue de session  **Pour créer un jeu nommé dont l'étendue est plus vaste que le contexte de la requête, c'est-à-dire dont l'étendue soit la durée de la session MDX, utilisez l'instruction CREATE SET. Un jeu nommé défini à l'aide de l'instruction CREATE SET est disponible pour toutes les requêtes MDX de cette session. L'instruction CREATE SET est appropriée par exemple dans le cas d'une application cliente qui réutilise le même jeu dans différentes requêtes.

    Pour plus d'informations sur l'utilisation de l'instruction CREATE SET pour la création de jeux nommés dans une session, consultez Création de jeux nommés dans l'étendue de session (MDX).

  • Étendue globale Pour créer un jeu nommé dont l'étendue est plus importante que le contexte de la session de l'utilisateur, c'est-à-dire dont l'étendue représente la durée de vie de l'instance en cours d'exécution, utilisez l'instruction CREATE SET dans le script MDX par défaut. Pour plus d'informations, consultez Script MDX de base (MDX). Un jeu nommé défini à l'aide de CREATE SET dans le script MDX par défaut est accessible à tous les utilisateurs dans toutes leurs requêtes MDX, pour toutes les sessions.

Le contenu des jeux nommés peut être évalué au moment de la création (statique) ou chaque fois qu'il est utilisé dans une requête (dynamique). La syntaxe CREATE SET [STATIC|DYNAMIC] définit le moment où le jeu est évalué ; pour plus d'informations, consultez Instruction CREATE SET (MDX)Instruction CREATE SET (MDX). Par défaut, les jeux sont créés en tant que STATIC si aucun mot clé n'est spécifié dans l'instruction de création.

Les jeux nommés avec un comportement dynamique peuvent être définis de manière globale (dans le script MDX par défaut) ou dans l'étendue d'une session. Toutefois, ces jeux nommés sont uniquement évalués lorsqu'une requête est en cours de résolution (étendue de requête). Une erreur est générée à chaque tentative d'évaluation d'un jeu dynamique dans une étendue de session ou une étendue globale ; cela s'applique également aux références indirectes des jeux dynamiques. Voici une liste de calculs, définis de manière globale ou dans une étendue de session, qui peuvent référencer des jeux nommés dynamiques.

  • Membres calculés

  • Jeux nommés dynamiques

  • Indicateurs de performance clés (KPI)

  • Expressions dans la partie droite d'une expression d'assignation

  • Expression de condition d'un calcul de cellule

  • Expression de valeur d'un calcul de cellule

Dans une requête MDX, il est possible de référencer un jeu dynamique, car ce dernier est évalué dans l'étendue de requête.

AttentionAttention

Dans la mesure où les jeux dynamiques ne sont pas évalués durant l'exécution de la commande CREATE SET, un lien vers tous les objets (statiques ou dynamiques) dont dépend le jeu dynamique est créé. Par conséquent, il est impossible de supprimer une partie ou l'ensemble des objets référencés tant que le jeu dynamique n'est pas supprimé. Par exemple, si un jeu nommé dynamique est créé dans la session qui référence un membre calculé de session, ce membre calculé ne peut pas être supprimé tant que le jeu nommé dynamique existe.

Résolution des jeux nommés dynamiques

À tout moment, il peut exister jusqu'à trois versions d'un jeu dynamique :

  • une version dans l'étendue globale utilisée dans le script du cube ;

  • une version dans l'étendue de session utilisée dans les calculs de session ;

  • une version dans l'étendue de requête utilisée dans les calculs de requête.

La version utilisée dans votre calcul dépend entièrement du contexte de votre expression et de la façon dont le jeu nommé dynamique est référencé ; cela s'applique principalement aux références indirectes.

Par exemple, si vous disposez d'un membre calculé de session qui utilise un jeu nommé dynamique de session et si vous utilisez ce membre calculé dans une requête, le jeu nommé est évalué dans l'étendue de session ; par ailleurs, la clause WHERE de la requête n'a aucun effet sur le jeu nommé. Toutefois, si vous utilisez le même jeu nommé dynamique directement dans votre requête, ce jeu nommé est évalué dans l'étendue de requête ; par ailleurs, la clause WHERE peut affecter les résultats du jeu nommé.