Sql server 在数据集市/仓库中处理时区

Sql server 在数据集市/仓库中处理时区,sql-server,datetime,timezone,data-warehouse,Sql Server,Datetime,Timezone,Data Warehouse,我们正在开始设计数据集市/仓库的构建块,我们需要能够支持所有时区(我们的客户来自世界各地)。通过阅读在线讨论(和书籍),一个常见的解决方案似乎是在事实表中有一个单独的日期和时间维度以及时间戳 然而,我很难回答的问题是,考虑到我的动态时区要求,日期和时间维度实际上对我有什么好处?时间维度更有意义,但我在日期维度上遇到了困难。日期维度的一般设计方法通常包括日期名称、星期几、月份名称等属性。我遇到的问题是,UTC 2013年12月31日星期二晚上11:00是2014年1月1日星期三,在UTC+2之后的

我们正在开始设计数据集市/仓库的构建块,我们需要能够支持所有时区(我们的客户来自世界各地)。通过阅读在线讨论(和书籍),一个常见的解决方案似乎是在事实表中有一个单独的日期和时间维度以及时间戳

然而,我很难回答的问题是,考虑到我的动态时区要求,日期和时间维度实际上对我有什么好处?时间维度更有意义,但我在日期维度上遇到了困难。日期维度的一般设计方法通常包括日期名称、星期几、月份名称等属性。我遇到的问题是,UTC 2013年12月31日星期二晚上11:00是2014年1月1日星期三,在UTC+2之后的所有时区

因此,如果我必须对每个查询(和报告)进行所有时区转换,那么拥有和存储这些我可能永远不会使用(看起来像)的属性有什么意义呢?有些人建议为每个时区设置事实行,但我觉得这很可笑。我们每个月需要能够存储数百万条记录

另一些人建议使用时区桥接表,虽然它有一定的意义,但它似乎也像额外的复杂性和额外的连接,以完成我的客户端应用程序和报告应该能够轻松从日期中找出的事情(报告将主要基于网络,其中有大量的库可帮助转换、显示和格式化日期)


我唯一能想到的是按日期和时间分组的简单性和可能的性能,但按日期部分分组的做法有多糟糕(我们正在使用MS SQL,但我们将查询数百万行)或者,我们应该考虑的是极其简单的日期和时间维度,它不比小时、日、月和年数字多很多,因为当星期一开始时,大多数文字如星期一都不太重要。ata仓库。事实是否有意义地与客户的本地时间、某些中心位置(例如贵公司总部)的本地时间相关联,或者可以与任意时区(如UTC)中的日期相关联?您甚至有关于客户时区的信息吗

当来自不同时区的两个人查询您的数据仓库时,他们应该看到完全相同的结果,还是应该将事实报告为落在相应时区的日期上


例如,如果你报道的是人们观看有线电视的情况,那么事实自然属于当地时区,因为客户位于有线电视前端附近。如果你报道的是通过互联网观看内容的客户,你可能对服务器的负载感兴趣,那么在时区进行报道将是有意义的您的服务器位于何处。

对于dba.stackexchange.com来说,这是一个非常好的问题。您也可以从中的建议开始,然后向dba.se发帖询问问题。关于dba,有几个类似的问题;这一个问题似乎最接近:我们自动检测客户的时区,他们可以在查看报告时覆盖它。他们uld能够在他们自己的时区(或他们选择的任何时区)看到事实,因此他们可以轻松优化他们的活动,但他们(以及我们的会计部门)还需要了解EDT中的事实是什么样子的,因为这是他们最终得到的。所以我需要能够基于我知道的任意时区来查询、呈现和汇总事实。@ VaveleNoBrrkHovo:在第一次脸红时,我会考虑使用与时间戳对应的数值作为退化的维度。您可以将时间/日期维度划分为时间间隔,例如15分钟长。