> Tech > Ordre d’évaluation et Itérations multiples

Ordre d’évaluation et Itérations multiples

Tech - Par iTPro - Publié le 24 juin 2010
email

Comme nous venons de le voir, MS Analysis Services dispose d’un grand nombre d’outils permettant de modéliser les problématiques métiers les plus complexes.

De fait, un cube en production peut donc contenir plusieurs membres calculés, des « custom members », des « Custom Rollups » et des cellules

Ordre d’évaluation et Itérations multiples

calculées. Ces différents calculs MDX peuvent se croiser, dépendre les uns des autres. Aussi est-il nécessaire de bien comprendre les 2 principes fondamentaux que sont : la notion d’ordre d’évaluation (Solve Order) et de Passe de calcul (Calculation pass ou Itération Multiple) pour éviter d’obtenir des résultats incohérents.

Par ailleurs, la bonne compréhension de ces notions et notamment celle de Passe de calcul permettent également de tirer parti au maximum des cellules calculées.

Calculation pass et la notion d’itération multiple La première des choses à comprendre est la notion de passe de calcul. Lors de la première passe de calcul (Itération 0 / Calculation Pass 0), MS Analysis Services récupère les données du cube puis applique les calculs MDX des membres calculés et des « customs members ».

Lors de la seconde passe de calcul (Itération 1 / Calculation Pass 1), MS Analysis Services applique les « customs Rollups » (Fomulas et Opérators) et les cellules calculées. Les membres calculés et les « custom members » sont eux aussi appliqués à nouveau. (Les cellules calculées ne sont quant à elle jamais appliquées avant l’itération 1).

Vous pouvez avoir défini des itérations supplémentaires, en renseignant dans l’éditeur de cube les propriétés Calculation Pass Number et Calculation Pass Depth des cellules calculées. Calculation Pass Number définit à partir de quelle itération la cellule calculée est appliquée et Calculation Pass Depth permet de définir le nombre de fois que le calcul MDX de la cellule calculée va être appliqué. Cette propriété est utile pour définir des calculs itératifs. Par exemple, une cellule calculée – ayant un Calculation Pass Number = 2 et un Calculation Pass Depth = 2 – sera appliquée à l’itération numéro 2 puis à l’itération 3. L’intérêt fondamental des cellules calculées réside dans le fait qu’il est possible au sein du calcul MDX :

– de tester le numéro de l’itération en cours. (Fonction MDX CalculationCurrentPass)
– de récupérer pour l’itération en cours la valeur d’une cellule lors d’une itération précédente. (Fonction MDX CalculationPassValue(«Numeric Expression», «Pass Value»[, «Access Flag»]))

Nous illustrerons cette fonctionnalité dans le prochain exemple.

Si cette fonctionnalité d’itération multiple est intéressante, il est tout de même facile l’imaginer qu’elle vient grever les performances globales du cube.

Maîtriser l’ordre d’exécution et d’évaluation avec Solve Order Comme vous le savez sans doute déjà la propriété Solve Order des membres calculés permet de définir l’ordre d’exécution des membres calculés lorsqu’ils se croisent.

La notion de Solve Order existe de manière implicite ou explicite pour les “Custom Rollup”s et les cellules calculées. La notion de « solve order » doit être prise en compte pour chaque itération. Au sein d’une itération particulière, l’élément ayant le « solve order » le plus grand sera évalué en premier mais calculé en dernier. Ainsi pour une itération spécifique, si un membre calculé à un « solve order » supérieur au « solve order » d’une cellule calculé il sera calculé en dernier. La propriété « solve order » peut contenir une valeur comprise entre -8181 to 65535.

S’il est possible de définir un « solve order » de manière explicite pour les membres calculés, les custom members et les cellules calculées, les « Custom Rollups » ont un "solve order" par défaut spécifique comme le stipule le tableau 1. Par ailleurs, pour bien comprendre le comportement des calculs au sein d’un cube, il est important d’ajouter que :

– Les mesures du cube ont le "solve order" le plus petit possible et sont donc toujours calculées en premier.
– si des “Custom Rollups” sont définis sur des dimensions différentes pour le même cube, c’est le “Custom Rollup” de la dimension apparaissant en premier dans l’éditeur de cube qui sera calculé en dernier.
– Si pour une itération spécifique, deux calculs du même type (par exemple de membres calculés ou deux cellules calculées) ont la même valeur de Solve Order, la précédence du calcul sera déterminé par l’ordre de création.
– Si pour une itération spécifique des éléments de type différents ont le même Solve Order, la priorité des calculs est défini comme dans le tableau 2.

Afin de bien comprendre les notions de « Solve Order » et de « Calculation pass », nous allons prendre un exemple.

Revenez sur le cube utilisé pour les points précédents et supprimez la cellule calculée « Chiffres1998 ». Nous allons à la place, ajouter une nouvelle cellule calculée nommée CouleurUnitSales qui se contentera de colorer le fond des cellules référençant les unités vendues (UnitSales). Nous ne voulons pas changer la valeur pour UnitSales mais uniquement changer sa couleur de fond.

Comme illustré précédemment :

1) commencez par définir la tranche du cube : en sélectionnant uniquement Single Measure puis le membre Measures.[Unit Sales]
Puis précisez la formule de calcul :
(Measures.[Unit Sales])
Enfin dans les propriétés avancées de la cellule calculée spécifiez la valeur :

Rgb(100,100,100) pour la propriété Back Color. Afin de colorer Unit Sales en Gris.

Enregistrez le cube, vous devriez obtenir l’écran suivant (Voir Figure 12).

Comme vous pouvez le constater nous n’obtenons pas la valeur souhaitée. Je vous rappelle qu’il y a un “Custom Rollup” défini sur l’axe Produit. Il y a donc un problème de croisement entre ces deux éléments.

Pour trouver la solution, il faut se souvenir que le “Custom Rollup” sera évalué à l’itération 1.

Or ce que nous voulons faire, c’est obtenir de la cellule calculée :

– qu’elle renvoie la valeur de la cellule telle qu’elle était après le calcul du “Custom Rollup”
– qu’ensuite elle change simplement la couleur de fond en gris.

Nous allons donc :

1) faire exécuter la cellule calculée lors de la deuxième itération (la propriété Calculation Passnumber de la cellule calculée sera positionnée à 2 et la propriété CalculationPass Depth=1 pour n’exécuter la cellule calculée qu’une seule fois)

2) faire en sorte que la formule de calcul référence la valeur de la cellule (Measures.[ Unit Sales]) telle qu’elle était à la fin de l’itération 1. (pour ce second point nous changerons la formule de calcul de la façon suivante : CalculationPassValue(( Measures.[ unit Sales]),1,ABSOLUTE)

Pour que vous puissiez vérifier par vous-même, j’ai effectué après correction une copie d’écran des propriétés standard et avancées de la cellule calculée.
Voir Figures 13 et 14.

Vous devriez obtenir le résultat suivant (Voir Figure 15).

Nb: si pour la formule de calcul vous aviez spécifié CalculationPassValue((Measures.[ Unit Sales]),0,ABSOLUTE) vous auriez obtenus les valeurs d’Unit Sales telles qu’elles sont calculées avant la prise en compte du "custom Member".

Pour conclure cet exemple, nous allons simplement ajouter un membre calculé nommé Test sur l’axe Customer. Placez ce membre calculé sous All Customers et spécifiez « Bonjour ! » comme valeur de calcul. Vous devriez obtenir l’écran suivant (Voir Figure 16).

Nous obtenons un résultat cohérent qui prouve que les choix par défaut de Ms Analysis Services concernant les précédences de calculs sont en général les bons. En effet, ici – bien que le membre Calculé Test et la cellule Calculée CouleurUnitSales ont le même numéro de Solve Order (0) – les règles de précédences font que c’est la cellule calculée qui sera appliquée en dernier. (cf Tableau 2).

Changez la valeur de la propriété Solve Order du membre calculé Test et donnez lui une valeur supérieur à 0 (nous utiliserons 10 par exemple). Dans ce cas, c’est le membre calculé qui sera appliqué en dernier et qui écrasera par la même la couleur de fond défini par la cellule calculée, comme le prouve la figure 17.

Téléchargez gratuitement cette ressource

Comment sécuriser la Digital Workplace ?

Comment sécuriser la Digital Workplace ?

Avec le recours généralisé au télétravail, les entreprises ont ouvert davantage leur SI. En dépit des précautions prises, elles ont mécaniquement élargi leur surface d’exposition aux risques. Découvrez 5 axes à ne pas négliger dans ce Top 5 Sécurité du Télétravail.

Tech - Par iTPro - Publié le 24 juin 2010