Gestion de la portée 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 de l’exécution du script. Le script MDX peut opter pour approche par couche des calculs au sein d'un cube à l'aide de tests de calcul.
Notes
Pour plus d’informations sur la façon dont les passes de calcul peuvent affecter les calculs, consultez Présentation de l’ordre de passage et de l’ordre de résolution (MDX).
Pour contrôler le test de calcul, la portée et le contexte au sein d'un script MDX, vous devez utiliser en particulier l'instruction CACULATE, la fonction This
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, une instruction CALCULATE unique se situe au début du script MDX par défaut.
Pour plus d’informations sur la syntaxe de l’instruction CALCULATE, consultez INSTRUCTION CALCULATE (MDX).
Notes
Si le script contient une instruction SCOPE comprenant une instruction CALCULATE, la syntaxe MDX évalue cette dernière au sein du contexte du sous-cube défini par l'instruction SCOPE, et non sur l'intégralité du cube.
Utilisation de la fonction This
La fonction This
permet de récupérer le sous-cube actuel au sein d'un script MDX. Vous pouvez utiliser la fonction This
pour affecter rapidement une expression MDX comme valeur aux cellules du sous-cube actuel. La plupart du temps, la fonction This
est utilisée conjointement avec l'instruction SCOPE pour modifier le contenu d'un sous-cube particulier pendant un test de calcul spécifique.
Notes
Si le script contient une instruction SCOPE comprenant une fonction This
, la syntaxe MDX évalue la fonction This
au sein du contexte du sous-cube défini par l'instruction SCOPE, et non sur l'intégralité du cube.
Exemple de fonction This
L’exemple de commande de script MDX suivant utilise la This
fonction pour augmenter la valeur de la mesure Amount, dans le groupe de mesures Finance du cube d’exemple Adventure Works DW Multidimensional 2012, à 10 % plus élevée pour les enfants 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 This (MDX) .
Utilisation de l'instruction SCOPE
L'instruction SCOPE définit le sous-cube actuel qui contient (et spécifie la portée) d'autres expressions et instructions MDX au sein d'un script MDX. MDX évalue ces autres expressions et instructions MDX, notamment la fonction This
et l'instruction CALCULATE, dans le contexte du sous-cube.
Une instruction SCOPE est dynamique, mais pas itérative de nature. Les instructions contenues dans une instruction SCOPE s'exécutent à une seule reprise, mais le sous-cube proprement dit peut être déterminé de manière dynamique. Vous pouvez, par exemple, posséder un cube appelé SampleCube et appliquer à ce dernier l'instruction SCOPE suivante pour définir un sous-cube définissant le contexte en tant que ALLMEMBERS dans la dimension Measures :
SCOPE([Measures].ALLMEMBERS);
THIS = [Measures].ALLMEMBERS.COUNT;
END SCOPE;
Les instructions et expressions contenues dans cette instruction SCOPE s'exécutent à une seule reprise.
À présent, un utilisateur de l'entreprise exécute la requête suivante contenant une mesure, appelée ExistingMeasure, sur le cube SampleCube :
WITH MEMBER [Measures].[NewMeasure] AS '1'
SELECT
[Measures].ALLMEMBERS ON COLUMNS,
[Customer].DEFAULTMEMBER ON ROWS
FROM
[SampleCube]
Le jeu de cellules retourné par la requête ressemble au résultat affiché dans le tableau suivant.
[ExistingMeasure] | [NewMeasure] | |
---|---|---|
[Customer].[All] | 2 | 2 |
Si vous observez le jeu de cellules retourné, vous pouvez constater que la valeur ExistingMeasure, comprise dans l'instruction SCOPE du 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. Cependant, comme l'instruction SCOPE n'est pas itérative, l'objectif principal de l'imbrication d'instructions SCOPE consiste à sous-diviser davantage un sous-cube en vue d'un traitement spécial.
Exemple d'instruction SCOPE
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 du cube d’exemple Adventure Works DW Multidimensional 2012, à 10 % plus élevée pour les enfants du membre Redmond dans la dimension Client. Cependant, une autre instruction SCOPE modifie le sous-cube pour inclure la mesure Amount des enfants de l'année civile 2002. Pour terminer, la mesure Amount n'est agrégée que pour ce sous-cube, en laissant inchangées les valeurs agrégées de la mesure Amount pour les autres années civiles.
/* 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 INSTRUCTION SCOPE (MDX).
Voir aussi
Guide de référence du langage MDX (MDX)
Script MDX de base (MDX)
Principes de base des requêtes MDX (Analysis Services)