代码之家  ›  专栏  ›  技术社区  ›  Piotr Gwiazda

数据仓库中的时间和日期维

  •  11
  • Piotr Gwiazda  · 技术社区  · 16 年前

    timestamp . 我需要按天、月、季度创建报告,但也要按小时创建。看看这些例子,我发现日期往往保存在维度表中。 alt starexample
    (来源: etl-tools.info )

    SQL .

    你的意见/解决方案是什么?

    (我用的是Infobright)

    4 回复  |  直到 7 年前
        1
  •  10
  •   Damir Sudarevic    16 年前

    我猜这取决于你的报告要求。

    WHERE "Hour" = 10
    

    意思是每天10:00:00到10:59:59之间,我会使用时间维度,因为它比

    WHERE date_part('hour', TimeStamp) = 10  
    

    您仍然应该在事实表中保留时间戳,以便在天的边界上进行聚合,如:

    WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15' 
    

    在使用维度字段时会很尴尬。

    通常,时间维度的分辨率为分钟,因此有1440行。

        2
  •  33
  •   davek    14 年前

    design-tip-51-latest-thinking-on-time-dimension-tables

    建议建立这样一个维度 使用分或秒组件 最终用户 尤其是在计算时间的时候 跨度。而且,与日历日不同 尺寸,很少有 的描述性属性 一分钟内的特定分或秒 时间片的定义属性 一天之内,例如班次名称,或 可以将时间维度添加到 定义为分钟数(或 甚至几秒钟)过了午夜。因此 时间维度要么 1440条记录 或者86400条记录

        3
  •  5
  •   Björn Pollex    16 年前

    时间应该是数据仓库中的一个维度,因为您经常需要对它进行聚合。你可以用这个 snowflake-Schema 以减少开销。总的来说,正如我在评论中指出的,工作时间似乎是一个异常高的分辨率。如果你坚持这样做,把一天中的每一个小时作为一个独立的维度可能会有所帮助,但我不能告诉你这是否是一个好的设计。

        4
  •  3
  •   Ashish Gupta    15 年前

    以及具有86400条记录的时间的单独维度,每秒钟具有由时间键标识的记录。

    在事实记录中,如果您需要日期和时间两者,则添加引用这些一致维度的两个键。