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.