Optimisation de formule Essbase

Pour optimiser le traitement des formules en mode "block storage" Essbase pour le calcul et la requête, vous pouvez éviter les formules en utilisant la consolidation au lieu du calcul, utiliser des formules plus simples lorsque cela est possible, prendre des mesures pour régler les performances des formules complexes ou passer en mode hybride.

Vous pouvez améliorer considérablement les performances des calculs en utilisant soigneusement les formules de l'outline du cube. Par exemple, vous pouvez améliorer les performances des calculs en plaçant des formules sur des membres dans l'outline de la base de données au lieu de les placer dans un script de calcul. Reportez-vous à Développement de formules pour les cubes de stockage de blocs.

Les sections qui suivent expliquent comment gérer les problèmes de formule qui affectent les performances de calcul en mode non hybride, cubes en mode "block storage".

Pour l'optimisation en mode hybride, voir Mode hybride pour le traitement analytique rapide.

Consolidation des membres Essbase

L'utilisation de l'outline de cube pour consolider les valeurs de données Essbase est plus efficace que l'utilisation d'une formule pour les calculer.

Par exemple, la consolidation des membres 100-10, 100-20 et 100-30 dans le membre 100, comme illustré ci-dessous, est plus efficace que l'application de la formule suivante au membre 100 :

100-10 + 100-20 + 100-30

Figure 34-1 Exemple de consolidation


Cette image présente un profil dans lequel les membres 100-10, 100-20 et 100-30 sont consolidés dans le membre 100.

Voir Exemples de consolidation de membres.

Formules simples de membre Essbase

Si une formule Essbase est simple, elle affecte les performances de calcul en mode "block storage" moins que les formules complexes. La taille des blocs est également un facteur de performance. Les formules plus simples sont celles qui n'utilisent pas de références interdimensionnelles, de fonctions de plage, de fonctions financières ou de fonctions relationnelles.

Si vous utilisez une formule simple et que la taille de bloc n'est pas exceptionnellement grande, vous pouvez placer la formule sur un membre d'une dimension dispersée ou dense sans affecter significativement les performances de calcul. Plus la taille du bloc est importante, plus les formules simples ont d'impact sur les performances de calcul.

Une formule simple est, par exemple, un ratio ou un pourcentage et répond aux exigences suivantes :

  • Ne référence pas les valeurs d'une autre dimension (sparse ou dense). Par exemple, une formule simple ne peut pas faire référence à Product -> Jan.

  • N'utilise pas de fonctions de plage. Par exemple, une formule simple ne peut pas utiliser @AVGRANGE, @MAXRANGE, @MINRANGE ou @SUMRANGE.

  • N'utilise pas de fonctions relationnelles ou financières. Par exemple, une formule simple ne peut pas utiliser @ANCESTVAL, @NEXT, @PARENTVAL, @SHIFT, @ACCUM ou @GROWTH.

Références

Pour plus d'informations sur la relation entre la taille des blocs et les performances de calcul, reportez-vous à Taille des blocs et densité des blocs.

Pour plus d'informations sur l'impact des formules sur les performances de calcul, voir Calcul ascendant et descendant.

Fourchette et fonctions financières

Fonctions de relation

Opérateur inter-dimensionnel

Formules de membre Essbase complexes

Si une formule Essbase est complexe, elle affecte plus que les formules plus simples les performances de calcul en mode "block storage". Pour optimiser les formules complexes, appliquez-les dans des dimensions denses, augmentez la densité et utilisez FIX pour restreindre la portée.

Si vous utilisez une formule complexe, vous pouvez améliorer les performances en appliquant les instructions suivantes :

  • Si possible, appliquez la formule à un membre d'une dimension dense. Si cela n'est pas possible, déterminez si vous pouvez modifier les calculs de haut en bas (voir Formules sur les dimensions dispersées dans les grands plans).

  • Utilisez la commande FIX dans un script de calcul pour calculer uniquement les blocs de données requis.

  • Augmentez la densité de la base de données (rapport entre les blocs de données existants et les blocs de données possibles).

Une formule complexe répond à l'une des exigences suivantes :

  • Référence un ou plusieurs membres d'une autre dimension (sparse ou dense), par exemple Product -> Jan.

  • Utilise des fonctions de plage, par exemple, @AVGRANGE, @MAXRANGE, @MINRANGE ou @SUMRANGE.

  • Utilise des fonctions relationnelles ou financières, par exemple, @ANCESTVAL, @NEXT, @PARENTVAL, @SHIFT, @ACCUM ou @GROWTH.

Lorsqu'elles sont appliquées à des membres de dimension dispersée, les formules complexes créent davantage de surcharge de calcul et ralentissent donc les performances. Ce problème survient car la présence de formules complexes nécessite qu'Essbase effectue des calculs sur tous les blocs de données possibles ainsi que sur tous les blocs de données existants associés au membre avec la formule complexe. La présence d'une relation ou d'une fonction financière sur un membre de dimension dispersée amène Essbase à effectuer des calculs sur tous les blocs, qu'ils soient possibles ou existants, ce qui augmente encore la surcharge.

Ainsi, une formule complexe qui inclut une relation ou une fonction financière crée une augmentation de frais généraux supérieure à celle d'une formule complexe qui n'inclut pas de relation ou de fonction financière.

Deux exemples illustrent la surcharge complexe liée aux formules :

  • Si le cube comporte 90 blocs de données existants et 100 blocs de données potentiels, la surcharge pour les formules complexes n'est pas importante, pas plus de 10 blocs supplémentaires pour lire et éventuellement écrire des valeurs.

  • Si le cube comporte 10 blocs de données existants et 100 blocs de données potentiels, la surcharge est jusqu'à dix fois supérieure à ce qu'elle serait sans la formule complexe (selon la structure de l'outline et d'autres facteurs), jusqu'à 90 blocs supplémentaires à lire et éventuellement à écrire.

Dans tous les cas, plus le rapport entre les blocs de données existants et les blocs de données possibles est faible, plus la surcharge liée aux performances de calcul est élevée et plus les performances sont lentes.

Références

Pour plus d'informations sur la relation entre la taille des blocs et les performances de calcul, reportez-vous à Taille des blocs et densité des blocs.

Pour plus d'informations sur l'impact des formules sur les performances de calcul, voir Calcul ascendant et descendant.

Fourchette et fonctions financières

Fonctions de relation

Formules sur les dimensions dispersées dans les grands plans

Pour optimiser le calcul des formules complexes sur les dimensions dispersées dans les grandes outlines de cube en mode "block storage" Essbase, vous pouvez forcer un calcul ascendant des formules.

Vous pouvez utiliser la commande de calcul SET FRMLBOTTOMUP pour optimiser le calcul des formules dans les dimensions dispersées dans les outlines de base de données volumineuses. Avec cette commande, vous pouvez forcer un calcul ascendant sur des formules de membre dispersées qui, autrement, seraient calculées de haut en bas. Voir Calcul ascendant et descendant.

Le fait de forcer un calcul ascendant sur une formule descendante permet une utilisation plus efficace des commandes CALC ALL et CALC DIM. Consultez les discussions relatives à la commande de calcul SET FRMLBOTTOMUP et au paramètre de configuration CALCOPTFRMLBOTTOMUP.

Valeurs constantes affectées aux membres d'une dimension dispersée

Si vous affectez une constante à un membre d'une dimension dispersée, Essbase crée automatiquement un bloc de données pour chaque combinaison de membres de dimension dispersée contenant le membre. Pour limiter la création de blocs, vous pouvez utiliser FIX.

Par exemple, supposons qu'un membre ou une formule de script de calcul contient l'expression suivante :

California = 120;

Dans cette formule, California est un membre d'une dimension dispersée et 120 est une valeur constante. Essbase crée automatiquement tous les blocs de données possibles pour la Californie et affecte la valeur 120 à toutes les cellules de données. Des milliers de blocs de données peuvent être créés. Pour améliorer les performances, créez une formule qui ne crée pas de valeurs inutiles.

Pour affecter des constantes dans une dimension dispersée uniquement aux croisements nécessitant une valeur, utilisez FIX d'une manière similaire à l'exemple suivant :

FIX(Colas,Misc,Actual)
   California = 120;
ENDFIX

Dans cet exemple, Colas est un membre de la dimension dispersée Product, Actual est un membre de la dimension dense Scenario et Misc est un membre de la dimension dense Measures. La valeur 120 est affectée à n'importe quel croisement de California (dans la dimension Market), Actual (dans la dimension Scenario), Misc (dans la dimension Measures), Colas (dans la dimension Product) et n'importe quel membre de la dimension Year, car aucun membre spécifique de Year n'est spécifié dans le script.

Etant donné que Sample Basic ne comprend que deux dimensions dispersées, cet exemple n'affecte qu'un seul bloc. S'il existe d'autres dimensions dispersées, Essbase garantit les blocs de données pour toutes les combinaisons de dimensions dispersées avec California et Colas, en créant des blocs si nécessaire. Dans les nouveaux blocs, Essbase définit les valeurs Mesures et Scénario (autres que celles auxquelles la valeur 120 est affectée) sur #MISSING.

Valeurs non constantes affectées aux membres d'une dimension dispersée

Pour empêcher temporairement la création non souhaitée de blocs lorsque vous affectez des valeurs non constantes aux membres d'une dimension dispersée, vous pouvez utiliser la commande SET CREATEBLOCKONEQ OFF dans un script de calcul Essbase.

Si vous affectez des valeurs non constantes aux membres d'une dimension dispersée, les blocs sont créés en fonction du paramètre Créer des blocs sur les équations. Le paramètre Créer des blocs sur les équations est défini au niveau de la base de données, en tant que propriété de base de données. Reportez-vous à Valeurs non constantes.

Dans les scripts de calcul, vous pouvez remplacer temporairement le paramètre Créer des blocs sur les équations. Tenez compte des effets du calcul suivant lorsque West n'a pas de valeur et que l'option Créer des blocs sur les équations est activée :

West = California + 120;

Des blocs inutiles peuvent être créés pour toutes les intersections de membres dispersés avec West, même si la valeur de bloc correspondante est #MISSING pour tous les enfants de West. En particulier dans une base de données volumineuse, la création et le traitement des blocs inutiles nécessitent un temps de traitement supplémentaire.

Pour contrôler la création de blocs lorsque vous affectez des valeurs non constantes aux membres d'une dimension dispersée, utilisez la commande de calcul SET CREATEBLOCKONEQ ON | OFF, comme indiqué dans le script suivant :

FIX (Colas);
   SET CREATEBLOCKONEQ OFF
   West = California + 120;
   SET CREATEBLOCKONEQ ON
   East = “New York” + 100;
ENDFIX

Etant donné que le paramètre Create Block on Equation est désactivé au début du script, les blocs West ne sont créés que lorsque des valeurs existent pour les enfants de West. Par la suite, étant donné que le paramètre Créer un bloc sur l'équation est activé, tous les blocs pour East sont créés.

Remarques :

L'utilisation de SET CREATEBLOCKONEQ affecte uniquement la création de blocs lors de l'exécution du script de calcul qui contient cette commande. Cette commande ne modifie pas le paramètre global de la base de données pour Créer des blocs sur les équations.

Opérateurs multidimensionnels dans les formules de membre

Lors de la conception de formules de membre en mode "block storage" Essbase, soyez prudent lorsque vous utilisez un opérateur inter-dimensionnel ( -> ) sur le côté gauche d'une équation ou dans des équations sur des dimensions denses.

Le côté gauche d'une équation

Pour des performances de script de calcul plus rapides, utilisez FIX dans le script de calcul pour qualifier l'utilisation d'une formule plutôt que d'une formule qui inclut un opérateur inter-dimensionnel à gauche d'une équation.

Par exemple, supposons que vous voulez augmenter les valeurs Jan -> Sales dans Sample.Basic de 5 %. Pour améliorer les performances en calculant uniquement les combinaisons de membres pertinentes, utilisez la commande FIX :

FIX(Jan)
   Sales = Sales * .05;
ENDFIX

Avec la commande FIX, Essbase calcule la formule uniquement pour les combinaisons de membres spécifiées, dans cet exemple, pour les combinaisons qui incluent Jan.

Comparez cette technique à l'utilisation d'une approche d'opérateur interdimensionnelle plus lente. Dans l'exemple précédent, placez la formule suivante sur le membre Sales dans l'outline de la base de données :

Sales(Sales -> Jan = Sales -> Jan * .05;)

Au fur et à mesure que Essbase parcourt la base de données, il calcule la formule pour chaque combinaison de membres qui inclut un membre de la dimension marquée comme temps (Jan, Fév, Mar, etc.), bien que seules les combinaisons de janvier doivent être calculées.

Reportez-vous à Utiliser la commande FIX.

Equations dans une dimension dense

Lorsque vous utilisez un opérateur interdimensionnel dans une équation d'une dimension dense, Essbase ne crée pas automatiquement les blocs requis si les deux conditions suivantes s'appliquent :

  • Les valeurs résultantes proviennent d'une dimension dense.

  • L'opérande ou les opérandes proviennent d'une dimension dispersée.

Vous pouvez utiliser les techniques suivantes pour créer les blocs et éviter les problèmes de performances.

  • Assurez-vous que les membres de résultats proviennent d'une dimension dispersée et non d'une dimension dense. Dans cet exemple, le membre de résultats Budget provient d'une dimension dispersée :

    FIX(Sales)
        Budget = Actual * 1.1;
    ENDFIX
    FIX(Expenses)
        Budget = Actual *  .95;
    ENDFIX
  • Utilisez la commande de calcul DATACOPY pour créer et calculer les blocs requis. Reportez-vous à Copier des blocs existants avec DATACOPY.

  • Utilisez une formule de membre contenant les équations de membre dense :

    FIX(Sales, Expenses)
    Budget (Sales = Sales -> Actual * 1.1;
    Expenses = Expenses -> Actual * .95;)
    ENDFIX

Gérer les niveaux d'exécution des formules

Vous pouvez éviter les boucles excessives de formules Essbase en configurant CALCLIMITFORMULARECURSION.

Les formules d'une outline en mode "block storage" peuvent avoir des dépendances entre elles de sorte qu'elles entraînent l'exécution imbriquée de formules dans un ou plusieurs blocs. Ces formules sont appelées formules récursives. Parfois, les formules récursives entraînent des boucles volumineuses ou sans fin qui entraînent une interruption anormale du serveur.

Pour éviter toute interruption anormale, vous pouvez utiliser le paramètre de configuration CALCLIMITFORMULARECURSION pour arrêter une exécution de formule qui dépasse un nombre par défaut de niveaux d'exécution.