Tips de diseño de DWH: La Omnisciente Dimensión Time – Parte 1

05 Nov, 2015
Por Rut Almoguera Poggi



Si estas iniciándote en el diseño de DWH hay una dimensión que deberías conocer pues te va a acompañar en todos los diseños que realices: La dimensión Time.
Voy a comenzar este post con una afirmación que  a lo mejor te va a asombrar: La dimensión Time es una dimensión usada en TODOS los Data Warehouses.
La primera pregunta que se suele hacerse alguien que esta iniciándose en el diseño de DWH es ¿Por qué es necesario utilizar una dimensión Time, si se puede registrar la fecha como un hecho o medición más de la Fact?.
La respuesta a esa pregunta la encontramos, al igual que las respuestas a todas las decisiones de diseño en un solo sitio: “Los requerimientos del Cliente”.  Revisando cuales son los requerimientos de nuestro cliente, cuales son las preguntas que el DWH necesita responder podremos determinar si necesitamos o no una dimensión Time.
La experiencia nos dice que los análisis que los clientes quieren hacer suelen ser cosas como: ver cuando sucedió un evento específico, o hacer comparaciones entre periodos de tiempo diferentes, por ejemplo en un DWH en donde se guarden las ventas, podríamos querer comparar las ventas del mes actual con las del mes anterior, o con este mismo mes pero el año anterior. O podría querer ver el comportamiento de las ventas en fechas especiales, como por ejemplo el último día del año o los días cercanos a las quincenas o al cobro de las utilidades.
Además con frecuencia los Clientes requieren de Cubos n-dimensionales que totalicen la data a través de las jerarquías de las dimensiones para poder tener respuestas a todos sus interrogantes,  siguiendo con nuestro ejemplo del DWH de ventas, podría querer ver las ventas diarias, pero también poder consultar las ventas del semestre actual o del año o del mes, por lo tanto con declarar la fecha simplemente como un atributo de la tabla Fact no nos basta, es necesario crear una dimensión.
Dicha dimensión Time, en ocasiones tiene una gran complejidad, conteniendo una gran cantidad de información, como por ejemplo los días feriados, el total de días hábiles del mes, el número de la semana del año a la que pertenece una fecha en específico, cual es el periodo fiscal especifico de nuestra empresa, tener un atributo que  indique si un día es o no el ultimo día del mes, etc.  Como podemos ver, estas no son cosas simples de determinar a simple vista o con cálculos sencillos y nos pueden ser muy útiles para hacer cálculos requeridos por el Cliente.
Dado que ya determinamos que la dimensión Time es imprescindible y que ella debe ser una tabla física dentro de nuestro DWH, nos enfrentamos a un segundo problema: ¿De dónde sacamos la data? Todas las demás dimensiones en un Data Warehouse tienen un origen de datos, bien sea una tabla, un archivo plano, etc.  Sin embargo, la dimensión Time, es una dimensión especial, pues de esta dimensión NUNCA se tiene una fuente.  Esto se debe a que los sistemas transaccionales no necesitan por lo general tener una tabla con la data de las fechas, pues en los sistemas OLTP no se realizan análisis de los datos, solo se registran los mismos, y es en el DWH en donde se realizaran los análisis de los comportamientos del negocio asociados a los periodos de tiempo.
 Dada esta limitación, de no contar con una fuente de datos para la construcción de la dimensión Time,  la misma debe ser llenada haciendo uso de un Store Procedure de BD,  una hoja de Excel con la cual podamos precargar un rango grande de fechas o algún otro programa que desarrollemos para tal fin.
Hoy en día, muchas herramientas de ETL te permiten crear una dimensión Time sin tener ninguna fuente de donde sacar los valores, pero en general es más recomendable que dicha dimensión la construyamos nosotros mismos, pues de esta manera podemos colocarle las particularidades necesarias para el diseño especifico que estemos realizando, como por ejemplo los periodos fiscales, o la cantidad de días hábiles acumulados al mes en una fecha específica.  Obviamente la complejidad o simplicidad de nuestra dimensión Time dependerá en gran medida de la granularidad que vaya a tener dicha dimensión y de los requerimientos de nuestro Cliente.

En la siguiente entrada de este post hablaremos un poco sobre cuáles son las recomendaciones a seguir cuando vamos a crear nuestra dimensión Time.