Calcul intelligent des blocs de données
Découvrez comment les calculs denses et dispersés, les calculs simultanés et les calculs à passes multiples sont gérés par le calcul intelligent Essbase.
Essbase crée un bloc de données pour chaque combinaison unique de membres de dimension dispersée, à condition qu'au moins une valeur de données existe pour la combinaison. Chaque bloc de données représente toutes les valeurs de membre de dimension dense pour cette combinaison unique de membres de dimension dispersée.
Par exemple, dans la base de données Sample Basic, les dimensions Market et Product sont dispersées. Par conséquent, le bloc de données New York -> Colas représente toutes les valeurs de membre des dimensions Year, Measures et Scenario pour la combinaison dispersée New York -> Colas.
Les sections suivantes partent du principe que vous êtes familiarisé avec les concepts de niveau supérieur, de niveau 0 et de blocs de données d'entrée, comme indiqué dans Stockage de données dans les blocs de données.
Calcul intelligent des dimensions denses
Lorsque vous calculez une dimension dense et que vous n'utilisez pas de commande FIX, Essbase calcule au moins certaines des valeurs de données de chaque bloc de données de la base. En termes d'état du calcul intelligent, les blocs sont marqués comme propres à partir d'un calcul dense.
Par exemple, le script de calcul suivant calcule la dimension Year, qui est dense.
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);Etant donné que l'année est dense, chaque bloc du cube inclut des membres de l'année. Par conséquent, Essbase calcule chaque bloc.
Ensuite, étant donné que le script utilise la commande SET CLEARUPDATESTATUS AFTER, Essbase marque tous les blocs de données du cube comme propres.
Calcul intelligent des dimensions dispersées
Lorsque vous calculez une dimension dispersée, Essbase n'a peut-être pas besoin de calculer tous les blocs de données de la base. Découvrez comment le statut de mise à jour propre/modifiée du calcul intelligent peut avoir un impact sur le statut des blocs de niveau 0 et de niveau supérieur, et comment éviter les calculs inutiles.
Par exemple, le script de calcul suivant est basé sur la base de données Sample Basic :
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);Ce script calcule la dimension Product, qui est une dimension dispersée. Etant donné que Product est dispersé, un bloc de données existe pour chaque membre de la dimension Product. Par exemple, un bloc de données existe pour New York -> Colas et un autre pour New York -> 100-10.
Effets de niveau 0
Si vous chargez des données dans le cube au niveau 0, les blocs concernés sont marqués comme modifiés. Si vous calculez ensuite uniquement une dimension dispersée, les blocs de niveau 0 ne sont pas calculés et restent modifiés. Lorsque vous recalculez uniquement une ou plusieurs dimensions dispersées, Essbase recalcule les blocs de données de niveau supérieur.
Remarques :
Essbase calcule les blocs de données de niveau 0 si une formule est appliquée à un membre de niveau 0 dispersé correspondant.
Le bloc de données New York -> 100-10 est un bloc de niveau 0 ; il ne représente pas de membre parent sur une dimension dispersée (Market ou Product). Les valeurs de données pour New York -> 100-10 sont des valeurs d'entrée ; elles sont chargées dans la base de données. Par conséquent, Essbase n'a pas besoin de calculer ce bloc de données. Essbase ne marque pas non plus le bloc de données New York -> 100-10 comme propre, même si le script utilise la commande SET CLEARUPDATESTATUS AFTER.
Effets de niveau supérieur
Lorsque Essbase calcule une dimension dispersée, il recalcule un bloc de données de niveau supérieur si ce dernier dépend d'un ou de plusieurs blocs enfant modifiés.
Colas est un membre de niveau parent de la dimension Product. Essbase doit calculer les valeurs pour Colas, de sorte qu'Essbase calcule ce bloc de données. Etant donné que le script utilise la commande SET CLEARUPDATESTATUS AFTER, Essbase marque le bloc de données comme étant propre.
Calcul inutile
Vous pouvez éviter les calculs inutiles en calculant au moins une dimension dense. Lorsque vous calculez une dimension dense sans utiliser la commande FIX, les valeurs de données sont calculées dans chaque bloc, y compris les blocs de niveau 0. Les blocs de niveau 0 sont donc marqués comme propres.
Calcul intelligent et calculs simultanés
Prenez des précautions avec les calculs simultanés lorsque l'option Calcul intelligent est activée. Si plusieurs calculs tentent de calculer les mêmes blocs, Essbase risque de ne pas recalculer les blocs de données, car ils sont déjà marqués comme propres.
Dans l'exemple suivant, basé sur la base de données Sample Basic, Actual et Budget sont membres de la dimension Scenario dense. Etant donné que le scénario est dense, chaque bloc de la base de données contient les valeurs Actual et Budget. Si l'utilisateur 1 exécute le script de calcul suivant, Essbase calcule les valeurs réelles pour tous les blocs de données qui représentent New York.
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Actual)
CALC DIM(Product, Year);
ENDFIXEssbase marque les blocs de données calculés comme propres, bien que toutes les valeurs de chaque bloc calculé n'aient pas été calculées. Par exemple, les valeurs Budget n'ont pas été calculées.
Si l'utilisateur 2 exécute le script de calcul suivant pour calculer les valeurs de budget pour New York, Essbase ne recalcule pas les blocs spécifiés, car ils sont déjà marqués comme propres. Les résultats du calcul pour Budget ne sont pas corrects.
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Budget)
CALC DIM(Product, Year);
ENDFIXPour résoudre ce problème, vous pouvez rendre la dimension Scenario dispersée. Ensuite, les valeurs Actual et Budget se trouvent dans différents blocs, par exemple New York -> Colas -> Actual et New York -> Colas -> Budget. Dans ce cas, le second script de calcul calcule correctement le bloc Budget.
L'exécution de calculs simultanés peut nécessiter une augmentation du cache de données.
Calcul intelligent et calculs à plusieurs passes
Dans certains cas, les scripts de calcul Essbase qui nécessitent plusieurs passes peuvent être incompatibles avec l'utilisation du calcul intelligent.
Lorsque Essbase calcule des blocs de données lors d'une première passe de calcul via une base de données, il marque les blocs de données comme propres. Si vous essayez de calculer les mêmes blocs de données lors d'une passe ultérieure avec l'option Calcul intelligent activée, Essbase ne recalcule pas les blocs de données, car ils sont déjà marqués comme propres.
Dans la mesure du possible, Essbase calcule une base de données en une seule passe de calcul dans la base de données.
Lorsque vous utilisez un script de calcul pour calculer une base de données, le nombre de passes de calcul effectuées par Essbase dépend du script de calcul.
Par exemple, supposons qu'Essbase calcule les blocs lors d'une première passe de calcul et les marque comme propres. Si vous tentez de calculer les mêmes blocs lors d'une passe ultérieure alors que l'option Calcul intelligent est activée, Essbase ne recalcule pas les blocs de données, car ils sont déjà marqués comme propres.
Exemples et solutions pour les calculs à plusieurs passes
Ces exemples décrivent des situations qui produisent des résultats de calcul Essbase incorrects, avec des solutions pour obtenir des résultats corrects. Ils sont basés sur la base de données Sample Basic et supposent que l'option Calcul intelligent est activée.
Exemple 1 : calcul intelligent et deux passes
Le script de calcul suivant effectue un calcul par défaut, puis un calcul à deux passes :
CALC ALL;
CALC TWOPASS;Erreur
Essbase calcule les blocs de données modifiés dans la base de données et marque tous les blocs de données comme propres. Essbase doit ensuite recalculer les membres balisés en tant que deux passes dans la dimension balisée en tant que comptes. Cependant, Essbase ne recalcule pas les blocs de données spécifiés car ils sont déjà marqués comme propres. Les résultats du calcul ne sont pas corrects.
Solution
Vous pouvez calculer les résultats corrects en désactivant le calcul intelligent pour le calcul à deux passes.
Exemple 2 : SET CLEARUPDATESTATUS et FIX
Ce script calcule les valeurs de données pour New York. Le calcul est basé sur la dimension Product :
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Product);
ENDFIX
CALC TWOPASS;Erreur
Essbase exécute les processus suivants :
-
Essbase parcourt la base de données pour calculer les blocs de données modifiés qui représentent New York. Le calcul est basé sur la dimension Product. Par conséquent, Essbase calcule uniquement les blocs qui représentent un membre parent de la dimension Product (par exemple, New York -> Colas, New York -> Root Beer et New York -> Fruit Soda), puis calcule uniquement les agrégations et les formules de la dimension Product.
-
Etant donné que la commande SET CLEARUPDATESTATUS AFTER est utilisée, Essbase marque les blocs de données calculés comme étant propres, bien que toutes les valeurs de données de chaque bloc calculé n'aient pas été calculées.
-
Essbase doit recalculer les membres balisés en tant que deux passes dans la dimension balisée en tant que comptes. Cependant, certains de ces blocs de données sont déjà marqués comme propres du calcul de l'étape précédente. Essbase ne recalcule pas les blocs de données marqués comme propres. Les résultats du calcul ne sont pas corrects.
Solution
Vous pouvez calculer les résultats corrects en désactivant le calcul intelligent pour le calcul à deux passes.
Exemple 3 : commande SET CLEARUPDATESTATUS et deux commandes CALC DIM
Ce script base le calcul de la base de données sur les dimensions Product et Year. Etant donné que deux commandes CALC DIM sont utilisées, Essbase effectue deux calculs via la base de données :
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);Erreur
Essbase exécute les processus suivants :
-
Essbase parcourt la base de données pour calculer les blocs de données modifiés. Le calcul est basé sur la dimension Product, comme dans l'exemple 2.
-
Etant donné que la commande SET CLEARUPDATESTATUS AFTER est utilisée, Essbase marque les blocs de données calculés comme étant propres, bien que toutes les valeurs de données de chaque bloc calculé n'aient pas été calculées.
-
Essbase doit recalculer les blocs de données. Le nouveau calcul est basé sur la dimension Year. Toutefois, suite au calcul effectué à l'étape précédente, certains blocs de données sont déjà marqués comme propres et Essbase ne les recalcule pas. Les résultats du calcul ne sont pas corrects.
Solution
Vous pouvez calculer les résultats corrects à l'aide d'une commande CALC DIM pour calculer les dimensions Product et Year. Essbase calcule les deux dimensions en une seule passe de calcul dans la base de données.
Le script de calcul suivant calcule les résultats corrects :
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);Remarques :
Lorsque vous calculez plusieurs dimensions en une seule commande CALC DIM, Essbase calcule les dimensions dans l'ordre de calcul par défaut et non dans l'ordre dans lequel vous les répertoriez dans la commande. Voir Ordre de calcul des membres.
Exemple 4 : deux scripts de calcul
Cet exemple calcule les valeurs de données pour New York, mais en fonction de deux dimensions à l'aide de deux scripts de calcul. Le premier script de calcul calcule la dimension Product :
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Product);
ENDFIXEssbase calcule les blocs de données qui incluent New York. Etant donné que le calcul est basé sur la dimension Produit, Essbase calcule uniquement les blocs modifiés qui incluent un membre parent dans la dimension Produit (par exemple, New York -> Colas, New York -> Root Beer et New York -> Fruit Soda), et calcule uniquement les agrégations et les formules de la dimension Produit.
En raison de la commande CLEARUPDATESTATUS AFTER, Essbase marque les blocs de données calculés comme propres, bien que toutes les valeurs de données de chaque bloc calculé n'aient pas été calculées.
Le second script calcule la dimension Year :
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Year);
ENDFIXEssbase calcule les blocs de données qui représentent New York. Etant donné que le calcul est basé sur la dimension Année, qui est une dimension dense, Essbase doit calculer tous les blocs de données qui incluent New York, bien qu'au sein de chaque bloc, Essbase ne calcule que les agrégations et les formules de la dimension Année.
Erreur
Suite au premier calcul, certains blocs de données pour New York sont déjà marqués comme propres. Essbase ne recalcule pas ces blocs de données avec le deuxième script de calcul car les blocs de données sont marqués comme propres. Les résultats du calcul ne sont pas corrects.
Solution
Vous pouvez calculer les résultats corrects en demandant à Essbase de ne pas marquer les blocs de données calculés comme propres. Le script de calcul suivant calcule les résultats corrects :
SET CLEARUPDATESTATUS OFF;
FIX("New York")
CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Year);
ENDFIXAvec la commande SET CLEARUPDATESTATUS OFF, Essbase calcule les blocs de données modifiés mais ne les marque pas comme propres, contrairement à la commande SET CLEARUPDATESTATUS AFTER.
Cette solution suppose que les blocs de données ne sont pas marqués comme propres à partir d'un calcul partiel précédent de la base.
Vous pouvez vous assurer que tous les blocs de données sont calculés, quel que soit leur statut, en désactivant le calcul intelligent. Le script de calcul suivant calcule tous les blocs de données indiqués, quel que soit leur statut propre ou modifié :
SET UPDATECALC OFF;
FIX("New York")
CALC DIM(Year, Product);
ENDFIXEtant donné que vous n'avez pas utilisé la commande SET CLEARUPDATESTATUS AFTER, Essbase ne marque pas les blocs de données calculés comme étant propres.