Open Business Intelligence

La red del Business Intelligence

Hola,

Estoy diseñando mi primer DWH y me surgen mil dudas al modelar el esquema en estrella.A ver si me podéis ayudar con ésta:

En toda la documentación que leo se indica que la tabla de hechos no debe contener ningún tipo de atributo que no sea una FK a las dimensiones o métricas y que es siempre obligatorio tener una dimensión tiempo.

El grano de la dimensión tiempo en mi caso va a ser de horas, por lo que tendré 1 registro en esa tabla de dimensión para cada hora del día (para todas las semanas, meses, años, etc). La cuestión es que en mi caso, me gustaría que el usuario pudiera llegar al detalle de tiempo al hacer drill-down el los datos y tuviera acceso a la hora precisa (hhmmss) en la que se registra el 'hecho'.

¿Es correcto poner un campo en la tabla de hechos que contenga este dato?

Otra cosita relacionada. Me interesa sacar estadísticas por día de la semana y esto no cuadra con la jerarquía de tiempos. ¿Los días de la semana son otra dimensión?

Y la última: ¿es posible que no tenga ninguna métrica en la tabla de hechos? No tengo campos agregados ya que toda mi estadística se basa en el conteo de los hechos. ¿Es correcto?

Mil gracias por la ayuda.

Visitas: 2277

Responde a esto

Respuestas a esta discusión

Hola.

En la tabla de hechos sólo debes poner la fk hacia la tabla de dimensión tiempo. Como dices, la tabla de dimensión tiempo debe tener como nivel de granularidad la hora, pero si lo que quieres es mostrar la hora con formato hhmmss deberás tener tener un campo con ese formato hhmmss además del campo hora con el formato hh. Luego en Schema Workbench deberás asociar a la dimensión tiempo y jerarquía que uses, al nivel "hora hhmmss" el campo nuevo con dicho formato.

Los días de la semana pueden ir también en la misma dimensión tiempo, pero depende de como tengas definido dicha dimensión. Debes tener en cuenta que si el nivel de granularidad es la hora eso quiere decir que cargas todos los valores posibles en la tabla dimensión. 

Compara tu estructura con la que se indica en el siguiente enlace que realiza la carga de la dimensión tiempo para MySql.

http://www.dataprix.com/blogs/bernabeu-dario/estructura-dimesion-ti...

Siempre debes tener una medida. Hablas de conteo de hechos, eso ya es una medida.

Saludos.

Juan José Gómez

Hola Juan José,

Muchas gracias por tu respuesta.

El problema que veo de incluir el tiempo concreto del evento en la tabla de dimensión es que voy a tener el mismo número de registros en la tabla de dimensión que en la de hechos, ya que cada 'hecho' se produce en instantes de tiempo diferentes.

En cuanto al conteo de hechos, ¿implica la creación de un atributo en la tabla de hechos? ¿Y qué datos contendría? ¿0/1 para si ha de contabilizarse o no?

Disculpa, voy un poco perdido...

Muchas gracias de nuevo.

Saludos.

Hola.

En cuanto a la dimensión de tiempo si quieres tener una granulidad de segundos deberias tener una tabla con 31536000 registros por cada año, que serian los segundos que existen en un año y a cada uno de estos registros asignarles una PK, en la tabla de hechos no importa el numero de registros que tengas siempre va existir una relación única con la tabla de dimensión tiempo.

No le veo de mucha utilidad tener en una tabla de hechos ese nivel de detalle ya que un data warehouse se caracteriza porque sus datos tienen un alto grado de agregación, es decir, poco detalle, y otro de los problemas que le veo a esto es que el desempeño o la presentación en los reportes de la información va hacer muy pobre, se va a degradar.

En cuanto al conteo que por definición es una medida en la tabla de hecho tienes que tener un campo en el que guardes el valor 1.

Para simplificar el ejercicio te recomiendo manejar dos dimensiones tiempo : Una que hace referencia a la hora y otra con referencia a la fecha.   Con esto tienes dos dimensiones con una menor cantidad de registros.  En la fact table tendras dos foreign key apuntando a cada dimension tiempo.  Ejemplo : Si necesitas guardar la fecha y hora en la cual se realiza una venta, tu fact table fct_venta tendrá la siguiente estructura fct_venta(total_venta, sk_fecha, sk_hora, sk_cliente, sk_tienda).  La Dimension fecha podria tener la siguiente estructura dim_fecha(sk_fecha, fecha, año, mes, dia, dia_semana, nombre_mes, festivoBoolean) y la Dimension hora la siguiente estructura dim_hora(sk_hora, hora, AmPm, tipo_hora).  El campo am/pm indica si es antes de meridiano o despues de meridiano y el campo tipo_hora si es en la mañana, tarde o noche. 

Si una fact table no tiene medidas se denomina fact less, y si hacemos una traduccion literal no dice lo que realmente significa.  Una fact less es una fact table que no tiene medidas.   Normalmente con la fact less necesitamos contestar preguntas relacionadas con una agrupación de dimensiones para realizar conteos.

Cordial saludo,

Alfonso Borré

aborresarmiento@yahoo.es

Hola Alfonso,

Muchas gracias por tu respuesta. Me ha quedado ya bastante claro.

Me has convencido con tu propuesta de dividir el tiempo en dos dimensiones, me parece muy coherente  y creo que encaja bastante bien con lo que necesito.

También he entendido que mi tabla de hechos es de tipo 'fact less' puesto que efectivamente todas mis mediciones se basan en el conteo de los hechos.

Un saludo.



Alfonso Borre Sarmiento dijo:

Para simplificar el ejercicio te recomiendo manejar dos dimensiones tiempo : Una que hace referencia a la hora y otra con referencia a la fecha.   Con esto tienes dos dimensiones con una menor cantidad de registros.  En la fact table tendras dos foreign key apuntando a cada dimension tiempo.  Ejemplo : Si necesitas guardar la fecha y hora en la cual se realiza una venta, tu fact table fct_venta tendrá la siguiente estructura fct_venta(total_venta, sk_fecha, sk_hora, sk_cliente, sk_tienda).  La Dimension fecha podria tener la siguiente estructura dim_fecha(sk_fecha, fecha, año, mes, dia, dia_semana, nombre_mes, festivoBoolean) y la Dimension hora la siguiente estructura dim_hora(sk_hora, hora, AmPm, tipo_hora).  El campo am/pm indica si es antes de meridiano o despues de meridiano y el campo tipo_hora si es en la mañana, tarde o noche. 

Si una fact table no tiene medidas se denomina fact less, y si hacemos una traduccion literal no dice lo que realmente significa.  Una fact less es una fact table que no tiene medidas.   Normalmente con la fact less necesitamos contestar preguntas relacionadas con una agrupación de dimensiones para realizar conteos.

Cordial saludo,

Alfonso Borré

aborresarmiento@yahoo.es

Responder a debate

RSS

Distintivo

Cargando…

© 2024   Creado por Emilio.   Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio