Discrepancias injustificadas en cálculos numéricos

Es posible que encuentre discrepancias injustificadas en los cálculos numéricos debido a la existencia de errores de redondeo.

Por ejemplo:

Los problemas de redondeo no son específicos del software de IBM® Cognos. Pueden producirse en cualquier entorno en el que tenga lugar el redondeo.

Errores de redondeo binario

Es posible que se produzcan discrepancias en los cálculos debido a la existencia de errores de redondeo binario. Por ejemplo, si el número 1,1 se representa como un número binario decimal flotante y el formato de informe utilizado incluye gran número de posiciones decimales, puede que el número 1,1 sea en realidad 1,09999999999997.

Si en el formato del informe se ha definido que sólo se utilice un único separador decimal, se realizará el redondeo decimal y se compensará el redondeo binario. Por lo tanto, el número aparece como 1,1 cuando en realidad es 1,09999999999997. Cuando el número se utilice en los cálculos, puede que obtenga errores de redondeo. Por ejemplo, los cálculos de Microsoft Excel utilizan números binarios (sin redondear las posiciones decimales) pero el formateo de los informes muestra posiciones decimales redondeadas, lo cual puede crear pequeñas discrepancias.

Errores de redondeo en divisiones

Por lo general, los cálculos que implican divisiones suelen generar errores de redondeo, con independencia de la forma en que se representen los números. Ejemplos de este tipo de cálculos son las operaciones Promedio y Porcentaje de base.

Directrices de diseño para minimizar el efecto del redondeo

La mejor solución es cambiar el esquema de base de datos o modelo de cubo subyacente, aunque no siempre es posible hacerlo. Otra solución es minimizar el efecto del redondeo siguiendo las directrices que se indican a continuación al crear informes y al crear modelos en IBM Cognos Framework Manager y cubos OLAP externos:

  • No almacene los datos como decimales flotantes siempre que sea posible. En especial, cuando se gestionan valores de moneda que deben almacenarse como decimales de coma fija o bien como enteros con un valor de escala, como 2.

    Por ejemplo, en un cubo, los Ingresos de Equipo de acampada de 2004 son 20.471.328,88 euros. Si los detalles de los ingresos se almacenan como números decimales flotantes, pueden producirse errores de redondeo al calcular los ingresos.

    Es posible que los errores de redondeo sólo generen ligeras diferencias, en función del orden del cálculo. Si los ingresos de Productos se calculan en primer lugar y los ingresos de Tiempo se calculan en segundo lugar, puede que obtenga un error de redondeo distinto del que obtendría si Tiempo se calculara en primer lugar y Productos se calculara en segundo lugar.

    El cálculo de los ingresos totales podría producir el número anteriormente indicado. O puede que existan ligeras discrepancias; por ejemplo, 20.471.328,8800001 euros en lugar de 20.471.328,88 euros. El número interno podría ser ligeramente distinto del valor que se muestra. El número incluso podría ser otro para distintas ejecuciones del mismo informe, en función del orden que el motor de OLAP utilice para los cálculos.

  • En los informes, evite las divisiones siempre que sea posible. Cuando sea ineludible aplicar divisiones, intente aplicarlas siempre en las últimas fases del proceso de cálculo. Por ejemplo, en lugar de Total([Ingresos]/1000), utilice Total([Ingresos])/1000.
  • Al realizar comparaciones, permita un margen para el redondeo. Por ejemplo, desea que [Porcentaje de beneficios] sea un valor fraccional con formato de porcentaje sin decimales. Sin embargo, el filtro [Porcentaje de beneficios]<>0 (o [Porcentaje de beneficios] NO ENTRE 0 y 0) rechaza los valores cero y, aun así, puede devolver valores que aparecen como 0% después de aplicar el formateo.

    Para evitar esto, aplique el filtro de una de estas dos formas:

    • [Porcentaje de beneficios] NO ENTRE -0,005 y 0,005
    • ([Porcentaje de beneficios] <- 0.005) O ([Porcentaje de beneficios]> 0.005)

    Observe que 0,005 equivale a 0,5%, que se muestra como 0% o 1%, según las pérdidas de precisión de la coma flotante.

    En ciertos casos, puede ser preferible controlar los errores de redondeo redondeando los valores de forma explícita. Por ejemplo, en lugar de [Porcentaje de beneficios], utilice round([Porcentaje de beneficios],2).

  • Vuelva a calcular las cifras cada vez en lugar de reutilizar cálculos que podrían contener decimales redondeados.

Puede que tengan consideraciones adicionales para Microsoft Analysis Services 2005/2008, en especial cuando se comparan resultados de informes de distintas ejecuciones (como sucede en Lifecycle Manager). Para obtener más información, consulte la documentación de Microsoft.