Partager via


Gestion de l’étendue et du contexte (MDX)

Dans Microsoft SQL Server Analysis Services, un script MDX (Multidimensional Expressions) peut s’appliquer à l’ensemble du cube ou à des parties spécifiques du cube, à des points spécifiques au sein de l’exécution du script. Le script MDX peut adopter une approche en couches des calculs au sein d’un cube à l’aide de passes de calcul.

Remarque

Pour plus d’informations sur la façon dont les passes de calcul peuvent affecter les calculs, consultez Comprendre l'ordre des passes et l'ordre de résolution (MDX).

Pour contrôler la passe de calcul, l’étendue et le contexte dans un script MDX, vous utilisez spécifiquement l’instruction CACULATE, la This fonction et l’instruction SCOPE.

Utilisation de l’instruction CALCULATE

L’instruction CALCULATE remplit chaque cellule du cube avec des données agrégées. Par exemple, le script MDX par défaut a une instruction CALCULATE unique au début du script.

Pour plus d’informations sur la syntaxe de l’instruction CALCULATE, consultez l’instruction CALCULATE (MDX).

Remarque

Si le script contient une instruction SCOPE qui contient une instruction CALCULATE, MDX évalue l’instruction CALCULATE dans le contexte du sous-cube défini par l’instruction SCOPE, et non par rapport au cube entier.

Utilisation de cette fonction

La This fonction vous permet de récupérer le sous-cube actuel dans un script MDX. Vous pouvez utiliser la This fonction pour définir rapidement la valeur des cellules dans le sous-cube actuel sur une expression MDX. Vous utilisez souvent la This fonction conjointement avec l’instruction SCOPE pour modifier le contenu d’un sous-cube spécifique pendant une passe de calcul spécifique.

Remarque

Si le script contient une instruction SCOPE qui contient une This fonction, MDX évalue la This fonction dans le contexte du sous-cube défini par l’instruction SCOPE, et non par rapport au cube entier.

Cet exemple de fonction

L’exemple de commande de script MDX suivant utilise la fonction This pour augmenter la valeur de la mesure Amount, dans le groupe de mesures Finance de l'exemple de cube Multidimensionnel Adventure Works DW 2012, de 10% pour les descendants du membre Redmond dans la dimension Client :

/* This SCOPE statement defines the current subcube */  
SCOPE([Customer].&[Redmond].MEMBERS,   
    [Measures].[Amount], *);  
        /* This expression sets the value of the Amount measure */  
        THIS = [Measures].[Amount] * 1.1;  
END SCOPE;  

Pour plus d’informations sur la syntaxe de la This fonction, consultez Ceci (MDX).

Utilisation de l’instruction SCOPE

L’instruction SCOPE définit le sous-cube actuel qui contient et spécifie l’étendue d’autres expressions et instructions MDX dans un script MDX. MDX évalue ces autres expressions et instructions MDX, notamment la This fonction et l’instruction CALCULATE, dans le contexte du sous-cube.

Une instruction SCOPE est dynamique, mais pas itérative par nature. Les instructions contenues dans une instruction SCOPE s’exécutent une seule fois, mais le sous-cube lui-même peut être déterminé dynamiquement. Par exemple, vous avez un cube nommé SampleCube. Sur le cube SampleCube, vous appliquez l’instruction SCOPE suivante pour définir un sous-cube qui définit le contexte comme ALLMEMBERS dans la dimension Mesures :

SCOPE([Measures].ALLMEMBERS);

THIS = [Measures].ALLMEMBERS.COUNT;

END SCOPE;

Les instructions et les expressions de cette instruction SCOPE s’exécutent une seule fois.

À présent, un utilisateur professionnel exécute la requête MDX suivante qui contient une mesure, nommée ExistingMeasure, sur le cube SampleCube :

WITH MEMBER [Measures].[NewMeasure] AS '1'

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

L’ensemble de cellules retourné par la requête ressemble à la sortie indiquée dans le tableau suivant.

[MesureExistante] [NouvelleMesure]
Client : Tous 2 2

En examinant l’ensemble de cellules retourné, notez comment la valeur ExistingMeasure, incluse dans l’instruction SCOPE dans le script MDX, est mise à jour dynamiquement après la définition de la mesure NewMeasure.

Une instruction SCOPE peut être imbriquée dans une autre instruction SCOPE. Toutefois, étant donné que l’instruction SCOPE n’est pas itérative, l’objectif principal de l’imbrication des instructions SCOPE consiste à subdiviser un sous-cube pour un traitement spécial.

Exemple de déclaration de périmètre

L’exemple de script MDX suivant utilise une instruction SCOPE pour définir la valeur de la mesure Amount, dans le groupe de mesures Finance de l’exemple de cube Multidimensionnel Adventure Works DW 2012, à 10% plus élevé pour les enfants du membre Redmond dans la dimension Customer. Toutefois, une autre instruction SCOPE modifie le sous-cube pour inclure la mesure Amount pour les enfants de l’année civile 2002. Enfin, la mesure Amount est ensuite agrégée uniquement pour ce sous-cube, en laissant les valeurs agrégées pour la mesure Amount dans d’autres années civiles inchangées.

/* Calculate the entire cube first. */  
CALCULATE;  
/* This SCOPE statement defines the current subcube */  
SCOPE([Customer].&[Redmond].MEMBERS,   
    [Measures].[Amount], *);  
        /* This expression sets the value of the Amount measure */  
        THIS = [Measures].[Amount] * 1.1;  
END SCOPE;  

Pour plus d’informations sur la syntaxe de l’instruction SCOPE, consultez l’instruction SCOPE (MDX).

Voir aussi

Référence du langage MDX (MDX)
Script MDX de base (MDX)
Notions de base des requêtes MDX (Analysis Services)