Calcul à deux passes
Le calcul à deux passes peut s'appliquer aux formules de membre qui doivent être calculées deux fois pour produire la valeur correcte. Vous pouvez baliser un membre de dimension Comptes en tant que membre à deux passes pour améliorer les performances de certaines applications Essbase en mode "block storage".
Remarques :
N'utilisez pas le calcul à deux passes avec les cubes en mode hybride. Utilisez uniquement solve order.
Pour certaines applications, vous pouvez améliorer les performances en balisant un membre de dimension Comptes en tant que membre à deux passes dans l'outline. Toutefois, la combinaison de données et de besoins de calcul peut nécessiter l'utilisation d'un script de calcul pour calculer une formule deux fois, au lieu d'un balisage à deux passes, afin de préserver la précision.
Dans la mesure du possible, Essbase calcule les formules à deux passes au niveau du bloc, en même temps que le calcul principal. Dans certains cas, cependant, une passe de calcul supplémentaire est nécessaire.
La façon dont Essbase doit calculer les formules à deux passes dépend de la configuration dense-sparse des dimensions Temps et Comptes.
Exemple de calcul à deux passages
Considérons le calcul requis pour Profit% :
Profit % = Profit % SalesSupposons que le tableau ci-dessous présente un sous-ensemble d'un bloc de données avec les dimensions Mesures et Année comme dimensions denses. Measures est marqué en tant que comptes et Year en tant que time. Le paramètre de configuration AGGMISSG est désactivé (valeur par défaut).
Les valeurs de données ont été chargées dans les cellules d'entrée. Essbase calcule les cellules dans lesquelles les nombres 1 à 7 apparaissent, dans cet ordre. Par exemple, Profit % -> Jan est calculé en premier ; Profit% -> Qtr1 a plusieurs chemins de consolidation.
Tableau 34-5 Exemple de calcul à deux passes : ordre des données et ordre des calculs
| Mesures -> Année | Jan | Feb | Mar | Qtr1 |
|---|---|---|---|---|
|
Profit |
75 |
50 |
120 |
5 |
|
Sales |
150 |
200 |
240 |
6 |
|
% de profit |
1 |
2 |
3 |
4, 7 |
Remarques :
Pour plus d'informations sur la façon dont l'ordre de calcul des cellules dépend de la configuration du cube, voir Ordre de calcul des cellules.
Essbase utilise l'ordre de calcul suivant :
-
Essbase calcule la formule
Profit % Salespour Profit % -> Jan, Profit % -> Feb, Profit % -> Mar et Profit % -> Qtr1 (1, 2, 3, 4 ci-dessus). -
Essbase calcule Profit -> Qtr1 et Sales -> Qtr1 en ajoutant les valeurs Jan, Feb et Mar (5, 6 ci-dessus).
-
Essbase calcule Profit % -> Qtr1 en ajoutant les valeurs Profit % -> Jan, Profit % -> Feb et Profit % -> Mar (7 ci-dessus). Cette addition de pourcentages produit la valeur 125%, ce qui n'est pas le résultat correct.
Tableau 34-6 Exemple de calcul à deux passes : résultats incorrects
Mesures/Année Jan Feb Mar Qtr1 Profit 75 50 120 245 (5) Sales 150 200 240 590 (6) % de profit
50% (1)
25% (2)
50% (3)
0% (4)
125% (7)
-
Si vous marquez Profit% comme deux passes dans l'outline, Essbase utilise la formule
Profit % Salespour recalculer les valeurs Profit% et produire les résultats corrects.Tableau 34-7 Exemple de calcul à deux passes : Résultats corrects
Mesures/Année Jan Feb Mar Qtr1 Profit 75 50 120 245 (5) Sales 150 200 240 590 (6) % de profit
50% (1)
25% (2)
50% (3)
0% (4)
125% (7)
42% (8)
Pour plus d'informations sur les réussites de calcul multiples, voir Réussites de calcul.
Interaction entre deux passes et calcul intelligent
Si vous utilisez le calcul intelligent et le calcul à deux passes dans une application en mode "block storage", utilisez le scénario correspondant à la configuration du cube pour vous assurer qu'Essbase calcule correctement les formules à deux passes.
Remarques :
N'utilisez pas le calcul à deux passes avec les cubes en mode hybride. Utilisez uniquement solve order.
Scénario A : Balise à deux passes
Dans ce scénario, vous placez des formules dans l'outline et, le cas échéant, marquez des formules spécifiques comme deux passes pour des performances optimales.
Pas de réussite de calcul supplémentaire pour les formules à deux passes
Etant donné qu'Essbase calcule les formules à deux passes pendant le calcul du bloc de données, Essbase n'a pas besoin d'effectuer une passe de calcul supplémentaire.
Tous les blocs de données marqués comme propres
Après le calcul, tous les blocs de données sont marqués comme propres aux fins du calcul intelligent.
Lorsque vous marquez une formule de membre à deux passes dans l'outline, Essbase effectue le calcul à deux passes pendant que chaque bloc de données est calculé. Toutefois, lorsque vous répétez une formule dans un script de calcul, Essbase doit lire les blocs de données et les écrire en mémoire pour recalculer la formule.
Scénario B : Script de calcul
Dans ce scénario, vous créez un script de calcul pour effectuer le calcul de la formule afin d'obtenir les meilleures performances.
Succès de calcul supplémentaire pour les formules à deux passes
Essbase calcule le cube, puis effectue un calcul supplémentaire pour calculer les formules à deux passes. Même si tous les blocs de données sont marqués comme propres après le premier calcul, Essbase ignore le statut de nettoyage des blocs qui sont pertinents pour la formule à deux passes et recalcule ces blocs.
Blocs de données pour les formules à deux passes non marquées comme propres
Après le premier calcul, Essbase a marqué tous les blocs de données comme propres. Lors d'une seconde passe de calcul, Essbase recalcule les blocs de données requis pour les formules à deux passes. Cependant, comme le deuxième calcul est partiel, Essbase ne marque pas les blocs recalculés comme propres. Lorsque vous recalculez avec l'option Calcul intelligent activée, ces blocs de données peuvent être recalculés inutilement.
Si la configuration du cube permet à Essbase d'utiliser le scénario B, envisagez d'utiliser un script de calcul pour effectuer des calculs de formule à deux passes. Si vous utilisez un script de calcul, Essbase effectue toujours un calcul supplémentaire via la base de données. Toutefois, vous pouvez vous assurer qu'Essbase a marqué tous les blocs de données comme propres après le calcul. Reportez-vous à Scripts de calcul pour le calcul à deux passes et intelligent.
Choisir une balise de calcul à deux passes ou une méthode de script de calcul
Bien que le balisage d'un membre de compte en tant que membre à deux passes puisse apporter des avantages en termes de performances, certaines applications ne peuvent pas utiliser cette méthode. Vérifiez les points suivants pour savoir si vous devez appliquer une balise à deux passes ou créer un script de calcul qui effectue un calcul deux fois pour des performances et une précision optimales :
-
Vous pouvez baliser un membre en tant que membre à deux passes s'il se trouve dans une dimension marquée en tant que compte. Lorsque vous effectuez un calcul par défaut sur la base de données, Essbase recalcule automatiquement toutes les formules marquées comme deux passes si elles figurent dans la dimension marquée comme comptes.
-
Vous pouvez baliser un membre en tant que membre à deux passes s'il s'agit d'un membre Calcul dynamique de n'importe quelle dimension.
-
Vous devrez peut-être utiliser un script de calcul pour calculer une formule à deux passes afin d'obtenir des résultats précis, même si la balise à deux passes présente des avantages en termes de performances. Reportez-vous à Scripts de calcul pour le calcul à deux passes et intelligent.
-
Vous devez utiliser un script de calcul pour calculer une formule deux fois si la configuration de la base de données signifie qu'Essbase utilise le scénario A et si la formule référence des valeurs d'un autre bloc de données.
-
Vous pouvez utiliser un script de calcul pour calculer des formules à deux passes si la configuration de la base de données signifie qu'Essbase utilise le scénario B.
Calculs par défaut à deux passes
Un paramètre de cube est disponible pour activer le double passage pour les calculs par défaut. Lorsque vous effectuez un calcul par défaut sur un cube avec deux passes activées, Essbase tente automatiquement de calculer les formules marquées comme deux passes dans la dimension marquée comme comptes.
Remarques :
N'utilisez pas le calcul à deux passes avec les cubes en mode hybride. Utilisez uniquement solve order.
Reportez-vous à ces sections :
Pour effectuer un calcul par défaut, vous pouvez utiliser l'instruction Exécuter le calcul MaxL.
Pour activer le calcul à deux passes, vous pouvez utiliser l'instruction Alter database MaxL.
Scripts de calcul à deux passes et calcul intelligent
Lorsque vous concevez des scripts de calcul Essbase pour effectuer des calculs à deux passes avec le calcul intelligent, vous apprendrez à utiliser SET UPDATECALC, SET CLEARUPDATESTATUS et CALC TWOPASS pour optimiser les calculs.
Remarques :
N'utilisez pas le calcul à deux passes avec les cubes en mode hybride. Utilisez uniquement solve order.
Si l'outline utilise des formules à deux passes, suivez les instructions ci-après pour que le calcul soit aussi précis et rapide que possible :
-
Avant une commande qui recalcule une formule à deux passes, ajoutez la commande SET UPDATECALC OFF pour désactiver le calcul intelligent. Si l'option Calcul intelligent est activée (valeur par défaut), Essbase calcule uniquement les blocs de données qui ne sont pas marqués comme propres, mais lorsque vous effectuez un calcul par défaut avec l'option Calcul intelligent activée, tous les blocs de données sont marqués comme propres. Par conséquent, Essbase n'effectue pas le recalcul de la formule à deux passes.
-
Essbase ne recalcule pas automatiquement les formules à deux passes dans les scripts de calcul. Vous devez donc utiliser la commande CALC TWOPASS.
-
Si vous avez modifié le calcul par défaut CALC ALL et que l'option Calcul intelligent est activée, les blocs de données peuvent ne pas être marqués comme propres après le premier calcul. Voir Calcul intelligent pour les cubes en mode "block storage".
Pour obtenir les avantages de calcul intelligent en termes de performances lors du premier calcul complet de la base de données, utilisez l'une des méthodes présentées dans la série d'exemples suivante. La meilleure méthode dépend des besoins de calcul et de la structure de l'outline du cube.
Dans les exemples qui suivent, supposons que l'outline comporte une dimension marquée en tant que comptes et qu'il s'agit d'une dimension dense. Vous souhaitez calculer les ventes de chaque produit en pourcentage des ventes de tous les produits. Supposons que la formule suivante calcule la dimension :
Sales % Sales -> ProductLorsque Essbase calcule le bloc de données pour chaque produit, il n'a pas encore calculé la valeur Ventes -> Produit, de sorte que les résultats pour les ventes de chaque produit en pourcentage du total des ventes sont incorrects.
Calcul intelligent avec un index volumineux
Si l'index du cube est volumineux et que vous souhaitez utiliser le calcul intelligent, vous pouvez utiliser l'une des options suivantes pour obtenir les meilleures performances.
Option de script de calcul
Utilisez ce modèle pour créer un script de calcul qui effectue un calcul complet avec l'option Calcul intelligent activée :
SET UPDATECALC ON;
CALC ALL;
SET UPDATECALC OFF;
SET CLEARUPDATESTATUS AFTER;
"Share of Sales" = Sales % Sales -> Product;Script de calcul et option à deux passes
Pour baliser un membre en tant que membre à deux passes et utiliser un script de calcul pour calculer d'abord le cube complet, puis le membre à deux passes :
-
Placez une formule dans l'outline et marquez-la comme une formule à deux passes.
-
Placez la formule sur le membre approprié dans la dimension marquée Accounts (dans notre exemple, Share of Sales).
-
Créez un script de calcul qui effectue un calcul complet, puis un calcul à deux passes :
SET UPDATECALC ON; CALC ALL; SET UPDATECALC OFF; SET CLEARUPDATESTATUS AFTER; CALC TWOPASS;
Option Client et Script de calcul
Pour effectuer un calcul par défaut à partir d'un client, puis utiliser un script de calcul pour effectuer le calcul de la formule :
-
Activez Calcul intelligent, si cette valeur par défaut a été modifiée.
-
Effectuez un calcul complet.
-
Utilisez un script de calcul similaire à cet exemple pour désactiver le calcul intelligent et calculer la formule :
SET UPDATECALC OFF; SET CLEARUPDATESTATUS AFTER; "Share of Sales" = Sales % Sales -> Product;ou
SET UPDATECALC OFF; SET CLEARUPDATESTATUS AFTER; CALC TWOPASS;
Toutes les options d'exemple ci-dessus effectuent les tâches suivantes :
-
Activez Calcul intelligent.
-
Calculez l'intégralité du cube et marquez les blocs de données comme propres.
-
Désactivez Calcul intelligent.
-
Marquez les blocs recalculés comme propres, même si ce calcul est un calcul partiel du cube. Si vous n'utilisez pas la commande SET CLEARUPDATESTATUS APRÈS, Essbase marque les blocs de données comme propres uniquement après un calcul complet.
-
Essbase parcourt le cube en calculant uniquement la formule du membre concerné (Part de ventes dans notre exemple) ou toutes les formules marquées comme deux passes dans l'outline.
Exemple : Calcul intelligent avec un petit index
Pour utiliser le calcul intelligent lorsque l'index du cube est petit, procédez comme suit :
-
Créez un script de calcul pour calculer le cube, mais demandez à Essbase de ne pas marquer les blocs de données calculés comme propres.
-
Marquer tous les blocs de données comme propres et ne pas recalculer les blocs de données.
SET CLEARUPDATESTATUS OFF; CALC ALL; CALC TWOPASS; SET CLEARUPDATESTATUS ONLY; CALC ALL;-
SET CLEARUPDATESTATUS OFF indique à Essbase de ne pas marquer les blocs de données calculés comme propres.
-
Le premier CALC ALL entraîne le cycle d'Essbase dans le cube, en calculant tous les blocs de données modifiés. Essbase ne marque pas les blocs calculés comme propres.
Essbase ne recalcule pas automatiquement les formules marquées comme deux passes.
-
CALC TWOPASS oblige Essbase à parcourir le cube en recalculant les formules à deux passes dans la dimension Comptes. Essbase recalcule les formules car les blocs de données requis n'ont pas été marqués comme propres par le précédent CALC ALL. Essbase ne marque pas les blocs de données recalculés comme propres.
-
SET CLEARUPDATESTATUS ONLY indique à Essbase de marquer les blocs de données comme propres, mais pas de les calculer (cette commande désactive le calcul).
-
Avec le dernier CALC ALL, Essbase parcourt le cube et marque tous les blocs de données comme propres. Essbase ne calcule pas les blocs de données.
-
Exemple : Calcul intelligent désactivé pour une formule à deux passes
Pour désactiver le calcul intelligent pour une formule à deux passes, créez un script de calcul qui effectue les tâches suivantes :
-
Désactive le calcul intelligent.
-
Effectue un calcul complet.
-
Répète la formule à deux passes suivante :
SET UPDATECALC OFF; CALC ALL; "Share of Sales" = Sales % Sales -> Product;