Estamos comenzando a diseñar los bloques de construcción de un data mart / warehouse y necesitamos poder admitir todas las zonas horarias (nuestros clientes son de todo el mundo). Al leer las discusiones en línea (y en los libros), una solución común parece ser tener una dimensión de fecha y hora separada, así como una marca de tiempo en las tablas de hechos.
Sin embargo, la pregunta que me cuesta responder es ¿de qué me sirven las dimensiones de fecha y hora teniendo en cuenta mis requisitos de zona horaria dinámica? Una dimensión de tiempo tiene un poco más de sentido, pero estoy teniendo dificultades con la dimensión de fecha. Un enfoque de diseño general para una dimensión de fecha generalmente incluye propiedades como el nombre del día, el día de la semana, el nombre del mes, etc. El problema que tengo con todo eso es que las 11:00 PM del martes 31 de diciembre de 2013 en UTC es el miércoles , 1 de enero de 2014 en todas las zonas horarias posteriores a UTC + 2.
Entonces, si tendré que hacer todas estas conversiones de zona horaria en todas y cada una de las consultas (e informes), ¿cuál es el punto de tener y almacenar estas propiedades que probablemente nunca usaré (parece)? Algunas personas sugieren tener filas de hechos para cada zona horaria, pero eso me parece ridículo. Necesitamos poder almacenar millones de registros cada mes.
Otros sugieren tener una tabla de puente de zona horaria que, aunque tiene algo de sentido, también parece una complejidad adicional y uniones adicionales para lograr algo que mis aplicaciones e informes de clientes deberían poder resolver fácilmente a partir de una fecha (los informes se basarán principalmente en la web donde hay una gran cantidad de bibliotecas para ayudar a convertir, mostrar y formatear fechas).
Lo único en lo que puedo pensar es en la facilidad y posiblemente el rendimiento de la agrupación por fecha y hora, pero cuán mala es agrupar por fecha (estamos usando MS SQL pero consultaremos millones de filas) o deberíamos considerar solo dimensiones de fecha y hora extremadamente simples con no mucho más que números de hora, día, mes y año en su mayor parte, ya que la mayoría de los literales como el lunes no significarían mucho cuando las zonas horarias entren en juego.
fuente
Respuestas:
Primeramente...
Separarse
Datime/Time
en unaDate
dimensión y unaTime
dimensión es definitivamente el camino a seguir.Para administrar varias zonas horarias, debe duplicar
DateKey
yTimeKey
para que tenga lo siguiente:LocalDateKey
LocalTimeKey
UtcDateKey
UtcTimeKey
Tu dices...
Al tener las 4 columnas que he enumerado anteriormente, podrá unir la tabla de hechos a la dimensión de Fecha y / o Hora Usando Alias de Tabla (en la terminología de Kimball estas tablas de dimensión con alias se conocen como "Dimensiones de Juego de Rol"), por lo que tendrías algo como lo siguiente:
Para concluir...
A medida que crea un data mart, y no una base de datos OLTP, la generación de los tiempos Local y Utc debe realizarse en su ETL , NO en ninguna aplicación del lado del cliente por las siguientes razones (aparte de la localización del tiempo UTC al informe de la perspectiva del lector):
StandardisedDateKey
, oCorporateHQDateKey
, en lugar de una tabla de fechas UTC que estandarice en base a algún otro estándar acordado por la empresafuente
Date
yTime
dimensiones en lugar de una solaDateTime
? Una tabla de hechos puede tener varias fechas, y puede sumar dos INTs en lugar de uno para cada uno.Pido disculpas de antemano por la brevedad de esta respuesta y planeo elaborar cuando no estoy en el trabajo.
Sin duda, existen ventajas de tener tablas de fecha y hora, ya que permiten una fácil agregación de sus datos. En muchos casos, es la forma más sencilla de ordenar por mes o días hábiles cosas de esa naturaleza. Sin embargo, esto no necesariamente reemplaza la utilidad de una marca de tiempo. En su caso particular, una marca de tiempo UTC. Una vez que tenga esa marca de tiempo, todo lo que tiene que hacer es cambiarla a la hora local en la capa de informe o presentación. Para evitar escaneos de rango, asegúrese de convertir su rango de solicitud a la hora UTC también.
Si tiene alguna otra pregunta o comentario, no dude en preguntar.
fuente