La dimensión Tiempo. Los otros campos

3 07 2007

Continuando con la dimensión de tiempo, también están los otros campos que son muy importantes. Debemos considerar el campo Fecha que dependiendo de la base de datos será de tipo DATE, DATETIME o algo parecido.

tiempo2

Debemos de incluir un campo Año donde se almacenarán los valores 2006, 2007, etc. Aquí no hay mucho que decir.

Para el campo mes muchas veces me he topado con que los valores que se guardan ahí son: Ene, Feb, Mar; o Enero, Febrero, Marzo. Si hacemos esto de guardar solo la parte mes, cuando lancemos un query sobre la estrella deberemos poner en el where la parte año para que la consulta no sume los datos de los mismos meses de todos los años.

Un ejemplo de como se vería el query sería:

SELECT MES, SUM( VENTAS)
FROM HECHOS A, TIEMPO B
WHERE A.TiempoID = B.TiempoID
AND AÑO IN (2006,2007)

En este ejemplo, estaría sumando ENERO del 2006+ENERO del 2007. Para que esto no ocurra es mejor guardar en el campo mes el valor junto con el año en la siguiente forma: YYYY MMM. Por ejemplo, 2006 Ene, 2006 Feb, 2007 Ene. También se vale poner el nombre completo del mes: 2006 Enero.

tiempo3 Podemos mejorar el diseño de la tabla de tiempo como se muestra a la derecha. Se añadió a la tabla el campo MesID. De esta forma en el campo mes guardamos 2006 Ene y en el MesID guardamos 200601. Así podremos decirle en el query que me muestre el campo Mes pero que lo agrupe y ordene por el MesID.

SELECT MAX( Mes ), SUM( VENTAS)
FROM HECHOS A, TIEMPO B
WHERE A.TiempoID = B.TiempoID
GROUP BY B.MesI
D
ORDER BY B.MesID ASC

Lo mismo ocurre para la Semana, Trimestre, Época del año, Quincena y cualquier otro campo que se quiera añadir para agrupar los días. Tendré el campo por el que lo visualizo y el campo por el que lanzo el query y lo controlo.

Respecto al día de la Semana ahí no es necesario concatenarle el año o mes o semana en el valor por que lo que normalmente queremos hacer es agrupar los lunes con los martes y miércoles para ver como se comportan. Aquí si se quieren agrupar los Sábados de todo el año por ejemplo.

Observen como se ha cuidado que los campos ID sean de tipo INT. Esto debido que a la base de datos le es más fácil trabajar con números.

Para obtener un script que cree la tabla de tiempo y la llene dé clic aquí.

Technorati tags: , , Data warehouse


Acciones

Información

Deje un comentario

Puedes usar estas etiquetas : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>