Formules dans les scripts de calcul

Les formules Essbase calculent les relations mathématiques et positionnelles entre les membres d'une outline de base de données. Vous pouvez les appliquer aux membres de l'outline et/ou les utiliser dans des scripts de calcul pour un contrôle strict de vos calculs.

Lorsque vous définissez des formules Essbase dans des scripts de calcul, elles sont prioritaires sur toutes les formules appliquées aux membres de l'outline du cube. L'utilisation de formules de cette manière offre à vos calculs par lots une flexibilité supplémentaire au-delà des relations codées dans l'outline du cube.

Vous pouvez écrire des formules à calculer à l'aide d'équations de base, d'équations conditionnelles et de formules interdépendantes.

Dans un script de calcul Essbase, vous pouvez effectuer les deux opérations suivantes :

  • Calculer une formule de membre existante sur l'outline du cube

  • Définir une nouvelle formule qui dure pendant toute la durée de l'exécution du script de calcul

Pour calculer une formule existante appliquée à un membre de l'outline, utilisez le nom de membre suivi d'un point-virgule ( ;). Par exemple, dans un script de calcul, la commande suivante calcule la formule appliquée au membre Variance de l'outline :

Variance;

Pour remplacer les valeurs résultant du calcul de l'outline, vous pouvez appliquer manuellement une formule dans le script de calcul. Par exemple, la formule suivante d'un script de calcul parcourt le cube, en ajoutant les valeurs des membres Payroll, Marketing et Misc, puis en plaçant le résultat dans le membre Expenses. Cette formule remplace toute formule placée sur le membre Expenses de l'outline :

Expenses = Payroll + Marketing + Misc;

Remarques :

Vous ne pouvez pas appliquer de formules à des membres partagés ou à des membres de type libellé uniquement.

Reportez-vous également à Développement de formules pour les cubes de stockage de blocs.

Equations de base dans les scripts de calcul Essbase

Dans les scripts de calcul Essbase, vous utilisez des équations pour affecter des valeurs aux membres de l'outline du cube. L'affectation dure toute la durée de l'exécution du script de calcul.

La syntaxe pour une équation dans un script de calcul Essbase est la suivante :

member = mathematical_expression;

member est un nom de membre de l'outline, et mathematical_expression est une expression mathématique valide.

Essbase évalue l'expression et affecte la valeur au membre indiqué.

Dans l'exemple suivant, Essbase parcourt la base de données, soustrait les valeurs du CMV des valeurs de Sales et place le résultat dans Margin :

Margin = Sales - COGS;

Dans cet exemple, Essbase parcourt la base de données, en soustrayant les valeurs de Coût des valeurs de Retail, en calculant les valeurs obtenues sous forme de pourcentage des valeurs de Retail et en plaçant les résultats dans Markup :

Markup = (Retail - Cost) % Retail;

Vous pouvez également utiliser les opérateurs logiques > (supérieur à) et < (inférieur à) dans les équations.

Dans l'exemple suivant, si les ventes de février sont supérieures aux ventes de janvier, l'indicateur d'augmentation des ventes donne la valeur 1 ; si la valeur est False, le résultat est 0 :

Sales Increase Flag = Sales -> Feb > Sales -> Jan;

Equations conditionnelles dans les scripts de calcul Essbase

Vous pouvez utiliser des équations conditionnelles dans les formules de script de calcul Essbase pour définir la logique if/else et contrôler le flux des événements au cours du calcul.

Lorsque vous utilisez une instruction IF dans le cadre d'une formule de membre dans un script de calcul, vous devez :

  • Associer l'instruction IF à un seul membre

  • Placez l'instruction IF entre parenthèses

Dans l'exemple suivant, l'instruction IF…ENDIF entière est placée entre parenthèses et associée au membre Profit, Profit (IF(...)...) :

Profit
(IF (Sales > 100)
   Profit = (Sales - COGS) * 2;
ELSE
   Profit = (Sales - COGS) * 1.5;
ENDIF;)

Essbase parcourt la base de données et effectue les calculs suivants :

  1. L'instruction IF vérifie si la valeur de Sales pour la combinaison de membres actuelle est supérieure à 100.

  2. Si Sales est supérieur à 100, Essbase soustrait la valeur du CMV de la valeur de Sales, multiplie la différence par 2 et place le résultat dans Profit.

  3. Si Sales est inférieur ou égal à 100, Essbase soustrait la valeur du CMV de la valeur de Sales, multiplie la différence par 1,5 et place le résultat dans Profit.

Pour plus d'informations sur les commandes conditionnelles et le contrôle du flux des scripts de calcul, voir Groupes de commandes de calcul.

Formules interdépendantes dans les scripts de calcul Essbase

Comme pour les formules de l'outline, une formule d'un script de calcul calcule les relations mathématiques entre les membres de l'outline du cube Essbase.

Les formules sont considérées comme interdépendantes si leurs évaluations dépendent de la valeur d'autres membres de la même dimension.

Un bon exemple de formule interdépendante dans Essbase est une évaluation des flux de trésorerie, dans laquelle l'inventaire d'ouverture dépend de l'inventaire de clôture du mois précédent.

Lorsque vous utilisez une formule interdépendante dans un script de calcul, gardez à l'esprit que les mêmes règles s'appliquent à l'instruction IF. Vous devez :

  • Associer la formule à un seul membre

  • Placer la formule entre parenthèses

Dans l'exemple suivant, la formule interdépendante entière est placée entre parenthèses et associée au membre Opening Inventory :

"Opening Inventory"
(IF(NOT @ISMBR (Jan))
   "Opening Inventory" = @PRIOR("Ending Inventory");
ENDIF;)
"Ending Inventory" = "Opening Inventory" - Sales + Additions;

Formules de script de calcul et statut du calcul intelligent

Les formules des membres de dimension dispersée qui contiennent des fonctions relationnelles ou financières entraînent toujours un recalcul, même si le calcul intelligent Essbase marque les blocs comme propres.

Supposons que vous disposez d'une formule sur un membre de dimension dispersée et que la formule contient l'un des types de fonction suivants :

  • Relation (par exemple, @PRIOR ou @NEXT)

  • Financier (par exemple, @NPV ou @INTEREST)

Essbase recalcule toujours le bloc de données qui contient la formule, même si le bloc est marqué comme propre aux fins du calcul intelligent.

Voir Calcul intelligent des blocs de données et Calcul intelligent pour les cubes en mode "block storage".

Regrouper les formules et les dimensions dans le script

Vous pouvez améliorer considérablement les performances des calculs en regroupant soigneusement les formules et dimensions de membre Essbase dans un script de calcul.

Calculer une série de formules de membre

Lorsque vous calculez des formules, veillez à utiliser les parenthèses correctement.

Dans l'exemple suivant, les parenthèses mal placées entraînent l'exécution par Essbase de deux calculs dans le cube : une fois les formules calculées sur les membres Qtr1 et Qtr2, et une fois la formule calculée sur Qtr3 :

(Qtr1;
Qtr2;)
Qtr3;

En revanche, les configurations suivantes font qu'Essbase ne parcourt le cube qu'une seule fois, en calculant les formules sur les membres Qtr1, Qtr2 et Qtr3 :

Qtr1;
Qtr2;
Qtr3;

ou

(Qtr1;
Qtr2;
Qtr3;)

De même, les formules suivantes font qu'Essbase parcourt le cube une fois, en calculant les deux formules en une seule passe :

Profit = (Sales - COGS) * 1.5;
Market = East + West;

Calculer une série de dimensions

Lors du calcul d'une série de dimensions, vous pouvez optimiser les performances en regroupant les dimensions dans la mesure du possible.

Par exemple, la formule suivante fait qu'Essbase ne parcourt le cube qu'une seule fois :

CALC DIM(Year, Measures);

En revanche, la syntaxe suivante fait qu'Essbase parcourt le cube deux fois, une fois pour chaque commande CALC DIM :

CALC DIM(Year);
CALC DIM(Measures);