Puede utilizar el rastreo de cálculo para analizar el procesamiento de fórmulas de miembros y acotar los scripts de cálculo.
El rastreo de cálculo permite acceder a información registrada sobre un cálculo, una vez ejecutado correctamente el script de cálculo en un cubo.
El rastreo de un cálculo no cambia nada sobre el comportamiento del cálculo. Si el cálculo se inicia en Smart View y el servidor conectado tiene el rastreo de cálculo activado por un administrador, Smart View muestra un cuadro de diálogo emergente que contiene detalles, después de ejecutar el cálculo. La información de rastreo de cálculo se puede pegar desde el cuadro de diálogo emergente en un editor de texto. O bien puede encontrar la misma información en calc_trace.txt
, ubicado en el directorio de archivos de base de datos en el servicio en la nube.
La información de rastreo de cálculo puede ayudar a depurar la ejecución del script de cálculo, en caso de que los resultados del cálculo no sean los esperados.
El rastreo de cálculo no está soportado en aplicaciones con la gestión de escenarios activada.
Para activar el rastreo de cálculo, el administrador deberá activar primero el parámetro de configuración de la aplicación CALCTRACE. Una vez activado el rastreo de cálculos en su aplicación, hay dos formas de aprovechar las ventajas que ofrece:
Se calculará el ámbito completo del cálculo tal como se incluye en el script, pero solo se rastreará el contexto de las celdas de datos resaltadas durante el cálculo.
Si la celda de datos resaltada no se ha modificado durante el cálculo, aparecerá un mensaje que indica que la celda no se ha modificado.
SET TRACE mbrList
(para activar el rastreo de cálculos en una lista de miembros) y SET TRACE OFF
(para desactivarlo hasta que se encuentre un nuevo comando SET TRACE en el script). Para utilizar el comando SET TRACE, debe ejecutar el script de cálculo fuera de Smart View, usando el diseñador de cubos o la página Trabajos del servicio en la nube.SET TRACE ("100-10", "California", "Jan", "Sales", "Budget"); FIX("California", "Budget") "Sales" ( "100-10" = @MEMBER(@CONCATENATE(@NAME(@PARENT("Product")), "-20")) / 10; ); ENDFIX;
Básico de ejemplo tiene dos dimensiones ligeras: Producto y Mercado. La fórmula de miembro está en Ventas (un miembro de Medidas), que es una dimensión densa. La lista de miembros de la sentencia FIX solo contiene un miembro ligero, California, que pertenece a la dimensión Mercado.
El número de bloques existentes en la sentencia FIX determina el número de veces que se calcula la celda rastreada. En este ejemplo, el cálculo recorre todas las combinaciones de miembros ligeros existentes de California. Cada una de estas combinaciones representa un bloque.
Una vez terminado el cálculo, se registra y se muestra la siguiente información de rastreo:
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; )
El log de rastreo de cálculo proporciona las siguientes estadísticas sobre cómo ha funcionado el cálculo, en la celda que se ha rastreado:
Se ha calculado la celda rastreada varias veces y se ha sobrescrito el valor de la misma cada vez con el valor nuevo (el recuento de actualizaciones de celdas notificadas se detiene en 8).
El valor de la celda, antes del cálculo, era 840,00.
Para cada incidencia de cálculo, se muestran valores dependientes y nuevos. Los valores dependientes provienen de la fórmula de miembro de la sentencia FIX.
El valor final de la celda rastreada, tras la finalización del cálculo, es 9, pero representa el valor del producto "400-20"->California
dividido entre 10.
Las líneas 91-93 del script de cálculo, que contienen una fórmula de miembro en Ventas, son responsables de los valores actualizados.
Para cada uno de los bloques recorridos, Ventas se calcula mediante la fórmula:
"100-10"=@MEMBER(@CONCATENATE(@NAME(@PARENT("Product")),"-20"))/10
La fórmula contiene un miembro ligero en el lado izquierdo, lo que puede hacer que el bloque de cálculo real sea diferente del bloque FIX inicial. Por ejemplo, cuando el cálculo recorre "California"->"100-20", en realidad los cálculos se realizan en "California"->"100-10".
Las entradas del log de rastreo denominadas Block from FIX scope
y Actual block used in calculation
solo se imprimen si hay una discrepancia entre los bloques de la sentencia FIX y el bloque que se representa en la fórmula de miembro. Estas entradas de log pueden proporcionar indicaciones sobre por qué hay cálculos duplicados, lo que permite depurar los scripts de cálculo.