¿lo pongo en la tabla de hechos?

6 05 2008

image

Muy a menudo las personas se hacen esta pregunta al tratar de decidir que es más rápido y/o conveniente para los indicadores calculados, por ejemplo para el siguiente indicador:

Precio Promedio = Ventas / Unidades

No hay que perder de vista que si ponemos un indicador en la tabla de hechos, tendremos que usar una fórmula de agregación para obtener el valor. En el caso de las ventas tendríamos:

select sum(ventas) from HechosVentas

Si el precio promedio lo calculo y lo almaceno en la tabla de hechos para leer su resultado tendría que usar una fórmula de agregación. El precio promedio es un indicador que me dice en promedio a cuanto vendí cada unidad por lo que si quiero obtener el precio promedio global debiera utilizar:

select avg(PrecioPromedio) from HechosVentas

El average es el promedio aritmético y tiene el problema que le da el mismo peso a las ventas pequeñitas que a las grandes, en otros palabras el valor se distorsiona demasiado. Lo mejor sería usar:

select sum(ventas)/sum(unidades) from HechosVentas

Así como ven, guardar este indicador en la base de datos hace que se distorsione mucho el valor por lo que no es conveniente calcularlo y almacenarlo en la base de datos. Hay otros tipos de calculos en donde si es posible y hasta conveniente almacenarlo. Tome en cuenta todas estas posibilidadades al momento de decidir si materializará físicamente el indicador en una columna de la tabla de hechos o le conviene más crear un indicador lógico.

About these ads




Int/Int = Int

3 03 2008

Supongamos que estamos haciendo un cubo de recursos humanos para medir el % de inasistencias en la empresa e implementar algún programa para disminuirla. Tenemos entonces:

Head Count. Número de personas en la empresa. Como no puedo tener trabajando media persona, ni 0.25 personas; entonces definimos la columna que almacenará la información como entero (INT).

Inasistencias. Las veces que una persona ha faltado a trabajar. O falta o no falta. No podemos tener media inasistencia o cuarto de inasistencia. Definimos también la columna como entero (INT)

Listo, la llenamos con información y hacer el indicador calculado % de inasistencias da como resultado siempre cero. Por ejemplo, con 20 inasistencias para 100 empleados el resultado es cero.

% Inasistencias = Inasistencias/Headcount = 20/100 = 0 %

¿por qué? Todo esto gracias a la regla que dice que en las bases de datos un int dividido entre otro int dá como resultado un int. Habría que ponerle un cast o convert a la fórmula para que no marcara error. La otra es multiplicar uno de ellos por 1.0 para convertirlo a un # decimal.

Así que si el resultado no dá cero o uno, ya sabe donde está el problema.





Encuestas y promedios

25 09 2007

Desk

Varias veces hemos hecho cubos de encuestas. Es muy entretenido obtener indicadores e información importante de cosas como:

  • ¿qué calificación le daría a nuestro producto? ´
  • ¿En una escala del 1 al 10 que calificación le daría a la presentación del producto?
  • ¿qué calificación le daría a nuestro candidato?

Para obtener información valiosa es necesario aplicar métodos y más métodos estadísticos. Sin embargo muchas veces se utilizan viles promedios aritméticos. En español, usamos el AVG de SQL para obtener el promedio de una columna.

A diferencia de las ventas donde los nulos desaparecen la venta más grande que exista, en las encuestas es necesario usar nulos en los cubos. Esto se debe a que los valores nulos no son tomados en cuenta para el promedio:

# encuesta Calificación   Calificación
1 5   5
2 9   9
3 0 No contestó null
4 10   10
5 9   9
avg 6.6   8.25

Como se ilustra en la tabla, si al aplicar nuestra encuesta la persona no nos contesta una pregunta y al grabar el valor de esa pregunta en la base de datos le ponemos un cero, al calcular el promedio nos daría una calificación de 6.6 distorsionando el promedio gravemente.

Lo mejor es grabarle un null en las preguntas que no nos hayan sido respondidas. Así, al calcular el promedio no dará un valor de 8.25 mucho más pegado a la realidad.

Technorati tags:




El problema del inventario

17 07 2007

inventario

Para resolver el problema del inventario donde el indicador no se suma si no lo que se quiere es el último valor; podemos usar MDX dentro de Artus para traernos el valor al cierre del periodo. De esta forma el total del mes no será la suma del inventario de cada día del més sino del último día.

La función quedaría así:

[(Measures.[Value], ClosingPeriod([Month])]

Solo sustituyan la palabra Value por el nombre real del indicador y Month por el nombre real de la dimensión y periodo para el cual desean encontrar el valor.

Hay muchísimos casos diferentes; a lo mejor quiero el último valor encontraro, el que si no lo encuentro me dé el del mes pasado, etc.. Aquí en MSDN pueden encontrar un excelente documento que muestra varios casos relacionados con el tema.

Para los que usen Analysis Services con Artus: Todos los casos en el documento se pueden implementar con Artus.

MDX es el lenguaje que Microsoft Analysis Services proporciona para acceder a los datos del cubo, nó Artus. Así que tendrán que investigar en la ayuda proveída por Microsoft. A veces la liga cambia así que lo  pueden encontrar en el Widget de Box en el lado derecho.

Por cierto, es preferible crear el indicador calculado en el cubo de Analysis Services y luego importarlo a Artus. Solo tomen en cuenta dejar el indicador como:

([Measures].[InventarioDinero_DEPENDSONDIMENSION])

Concatenándole la palabra: _DEPENSONDIMENSION

Technorati tags: ,







Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 29 seguidores