Vous pouvez utiliser le traçage de calcul pour analyser le traitement des formules de membre et affiner vos scripts de calcul.
Une fois le script de calcul exécuté par rapport à un cube, le traçage de calcul permet d'accéder aux informations journalisées concernant un calcul.
Le traçage d'un calcul ne modifie en rien son comportement. Si un calcul est lancé dans Smart View et qu'un administrateur active le traçage de calcul sur le serveur connecté, Smart View affiche une boîte de dialogue instantanée contenant des détails après l'exécution du calcul. Les informations de traçage de calcul peuvent être collées dans un éditeur de texte à partir de la boîte de dialogue instantanée. Vous pouvez également trouver ces informations dans le fichier calc_trace.txt
, qui se trouve dans le répertoire de fichiers de la base de données sur le service cloud.
Les informations de traçage de calcul peuvent vous aider à déboguer l'exécution du script de calcul, dans le cas où les résultats du calcul ne sont pas ceux que vous attendiez.
Le traçage de calcul n'est pas pris en charge sur les applications pour lesquelles la gestion de scénarios est activée.
Pour activer le traçage de calcul, l'administrateur doit d'abord activer le paramètre de configuration de l'application CALCTRACE. Une fois que le traçage de calcul est activé pour l'application, il existe deux manières d'en tirer parti :
La portée complète du calcul comme contenue dans le script sera calculée, mais seul le contexte de la cellule de données mise en surbrillance sera tracée lors du calcul.
Si la cellule de données mise en surbrillance n'a pas été modifiée lors du calcul, un message s'affiche indiquant que la cellule n'a pas été modifiée.
SET TRACE mbrList
(pour activer le traçage de calcul sur une liste de membres) et SET TRACE OFF
(pour désactiver le traçage de calcul jusqu'à ce qu'une nouvelle commande SET TRACE soit trouvée dans le script). Pour utiliser la commande SET TRACE, vous devez exécuter le script de calcul en dehors de Smart View, à l'aide du concepteur de cubes ou de la page Jobs du service cloud.SET TRACE ("100-10", "California", "Jan", "Sales", "Budget"); FIX("California", "Budget") "Sales" ( "100-10" = @MEMBER(@CONCATENATE(@NAME(@PARENT("Product")), "-20")) / 10; ); ENDFIX;
Sample Basic comporte deux dimensions dispersées : Product et Market. La formule de membre est établie sur Sales, membre de Measures, qui est une dimension dense. La liste des membres de l'instruction FIX ne contient qu'un membre dispersé, California, qui appartient à la dimension Market.
Le nombre de blocs existants dans l'instruction FIX détermine le nombre de calculs de la cellule tracée. Dans cet exemple, le calcul parcourt toutes les combinaisons de membres dispersés existantes de California. Chacune de ces combinaisons représente un bloc.
Une fois le calcul terminé, les informations de traçage suivantes sont journalisées et affichées :
Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 1) Previous value: 840.00 Dependent values: [100-20][California][Jan][Sales][Budget] = 140.00 New value: [100-10][California][Jan][Sales][Budget] = 14.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; ) Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 2) Block from FIX scope: [100-30][California] Actual block used in calculation: [100-10][California] Previous value: 14.00 Dependent values: [100-20][California][Jan][Sales][Budget] = 140.00 New value: [100-10][California][Jan][Sales][Budget] = 14.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; ) Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 3) Block from FIX scope: [200-10][California] Actual block used in calculation: [100-10][California] Previous value: 14.00 Dependent values: [200-20][California][Jan][Sales][Budget] = 520.00 New value: [100-10][California][Jan][Sales][Budget] = 52.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; ) [...calc iterations 4-7 are omitted from example...] Tracing cell: [100-10][California][Jan][Sales][Budget] (Cell update count: 8) Block from FIX scope: [400-30][California] Actual block used in calculation: [100-10][California] Previous value: 9.00 Dependent values: [400-20][California][Jan][Sales][Budget] = 90.00 New value: [100-10][California][Jan][Sales][Budget] = 9.00 Computed in lines: [91 - 93] using: "Sales"( "100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10; )
Le journal de traçage de calcul fournit les analyses suivantes sur le fonctionnement du calcul pour la cellule tracée :
La cellule tracée a été calculée plusieurs fois et la valeur de cellule a été remplacée à chaque fois par la nouvelle valeur (le décompte de mise à jour de la cellule signalée s'arrête à 8).
La valeur de la cellule, avant le calcul, était de 840.00.
Pour chaque occurrence de calcul, des valeurs dépendantes et de nouvelles valeurs sont présentes. Les valeurs dépendantes proviennent de la formule de membre dans l'instruction FIX.
La valeur finale de la cellule tracée une fois le calcul terminé est 9, mais elle représente la valeur du produit "400-20"->California
divisée par 10.
Les lignes 91 à 93 du script de calcul, qui contiennent une formule de membre sur Sales, sont responsables des valeurs mises à jour.
Pour chacun des blocs parcourus, Sales est calculé à l'aide de la formule suivante :
"100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10
La formule contient un membre dispersé sur la gauche, qui pourrait être à l'origine de différences entre le bloc de calcul réel et le bloc FIX initial. Par exemple, lorsque le calcul parcourt "California"->"100-20", les calculs sont en réalité effectués dans "California"->"100-10".
Les entrées du journal de trace intitulées Block from FIX scope
et Actual block used in calculation
sont imprimées uniquement s'il existe une différence entre les blocs de l'instruction FIX et le bloc représenté dans la formule de membre. Ces entrées de journal peuvent fournir des indications sur la raison pour laquelle certains calculs sont en double, et ainsi vous aider à déboguer vos scripts de calcul.