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

Posted

技术标签:

【中文标题】如何在数据仓库中直观地理解时间维度【英文标题】:How can I Understand Time Dimension intuitively in Data Warehouse 【发布时间】:2018-04-02 11:55:08 【问题描述】:

我是维度建模的新手,这让我很困惑。希望有人可以帮助我理解它。我会说一个例子。我的班次表在下面

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 年的每一天?我将进行分析,看看每个月取消了多少班次,每个季度有多少班次被填补等。如果有人能帮助我直观地理解时间维度,那就太好了。

【问题讨论】:

【参考方案1】:

首先,考虑将此维度称为“日期”或“日历”,而不是“时间”。 “时间”维度通常用于表示时间(小时、分钟等)。 “日期”维度通常用于分析每日事件。当然,您可以在模型中同时使用两者。

考虑日期维度的方式:无论您的事实表如何,它都存在,并且代表日历 - 标准或财政或两者兼而有之。与任何日历一样,它必须每天列出,没有任何间隙。一个微妙的提示:存在许多类型的日历,但通常和最常见的是我们使用“阳历”。有时,这种假设不正确,您需要对不同类型的日历进行建模: Calendar Types

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

【讨论】:

好的,我从你的解释中理解的方式是日期维度存在并且独立于所有其他表(直到我们通过键链接它们),它将包含班次表的所有日期(以我的例子为例)而不仅仅是那些日期,而是一年中的所有日期。我说的对吗? @dwalker - 是的,你是对的。看看它在 BI 系统中的实际用途:excelcampus.com/tables/calendar-table-explained【参考方案2】:

您应该使用 2011 年的每一天,并且可以存储多个属性,例如工作日、财政季度。您可以在运行时计算,但在很多情况下,最好预先计算。我能想到在日期维度中包含所有日期的几个原因

    很容易找到丢失的班次。 如果您在日期上有其他属性,它可以帮助您确定它何时丢失可能是某种分析。 您不必添加额外的检查是否有新日期,然后先插入暗淡。

【讨论】:

以上是关于如何在数据仓库中直观地理解时间维度的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库之维度建模篇

数据仓库数仓建模之星型模型与维度建模

BI中事实表,维度表和数据集市,数据仓库的理解

数据仓库星型模式的维度表和事实表中的数据如何?

数据仓库中的几种模型

对于维度建模的理解