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.


Comentarios recientes