如何在数据仓库中直观地理解时间维度

时间:2018-04-02 11:55:09

标签: sql oracle12c dimensional-modeling

我是维度建模的新手,它让我感到困惑。希望有人能帮助我理解它。我会说一个例子。我的班次表在

之下
shift_date |shift_status|request_id|Hrs_worked
-----------------------------------------
 09-01-2011|Filled      |8899      |5.5
21-01-2011 |Cancelled   |6677      |6
22-01-2011 |Filled      |7766      |2.5

依此类推.. 这基本上是事实表将读取的表格。

我想创建一个时间维度表。我正在使用sql developer。所以我的问题是,我应该只包含shift_date列中包含的日期吗?或者我应该开发一个包含2011年每一天的脚本?我将进行分析,看看每个月取消了多少轮班,每季度填多少等等。如果有人能帮助我直观地了解时间维度,那就太棒了。

2 个答案:

答案 0 :(得分:4)

首先,考虑调用此维度"日期"或"日历"而不是"时间"。 "时间"尺寸通常用于表示时间(小时,分钟等)。 "日期"维度通常用于分析每日级别的事件。当然,您可以在模型中使用它们。

考虑日期维度的方式:无论您的事实表如何,它都存在,并表示日历 - 标准或财务或两者。作为任何日历,它必须每天列出,没有任何差距。一个微妙的说明:存在许多类型的日历,但通常我们最常使用" solar Gregorian"日历。偶尔,这种假设不正确,您需要为不同类型的日历建模: Calendar Types

最后,您可能需要选择日历维度的日期范围。人们对此有不同的看法。我的方法是在事实表中最早记录的日期开始日历表,并在最新事实记录的日期结束。 替代方法是从第一次交易发生的一年的第一天开始,到最后一次交易的一年的最后一天结束。例如,如果您的事实表包含从2017-02-15到2018-04-10的记录,则您的日期表可以精确地跨越该范围,或者从2017-01-01到2018-12-31。

答案 1 :(得分:0)

你应该参加2011年的每一天,你可以存储多个属性,比如工作日,它是什么财政季度。你可以在运行时计算,但在很多情况下,最好预先计算。我可以想到在日期维度中包含所有日期的几个原因

  1. 很容易找到缺失的班次。
  2. 如果您在日期上有其他属性,它可以帮助您确定何时遗漏可能是某种分析。
  3. 您不必添加额外的检查,如果有新的日期,那么先插入昏暗。