在数据仓库中,无一例外地需要和时间维度打交道,因此设计合理的时间维度,也是一个数据仓库项目开始必备的资源储备,如果有这方面的积累,就不用到处寻找合适的设计模型以及存储过程的代码了,否则可能需要花费一定的时间去寻找符合该项目合适的存储过程,或者自己动手编写。
一般来说,时间维度的创建要根据实际的数据仓库应用来,基本上可以分为天、月的时间维度表,更细的可以分为半小时时间段,小时时间段等等,一般数据量大的时间维度都是利用存储过程来生成的。
下面介绍一些时间维度表的设计结构。
<1> 时间维度表1(两列都是字段)
维度属性
|
维度属性
|
日期关键字
|
日历年月
|
日期完全描述
|
日历季度
|
星期
|
日历半年度
|
纪元日编号
|
日历年
|
纪元周编号
|
财政周
|
纪元月编号
|
年度财政周数
|
日历日期编号
|
财政月
|
日历周编号
|
年度财政月数
|
日历月编号
|
财政年月
|
财政月日编号
|
财政季度
|
财政周编号
|
财政季年度
|
财政月编号
|
财政半年度
|
周末指示符
|
财政年
|
月末指示符
|
节假日指示符
|
日历周结束日期
|
星期指示符
|
年度日历周数
|
销售时令
|
日历月名
|
重大事件
|
年度日历月数
|
其它
|
<1> 时间维度表2
a.日期维度
|
名称 |
代码 |
数据类型 |
主外键 |
|
序列号 |
C_ID |
int |
P |
|
日期 |
C_DATE |
datetime |
|
|
星期 |
C_WEEK |
varchar(12) |
|
|
月份 |
C_MONTH |
varchar(2) |
|
|
年 |
C_YEAR |
varchar(4) |
|
|
季度 |
C_QUARTER |
varchar(4) |
|
b.半小时时间维度
|
名称 |
代码 |
数据类型 |
主外键 |
|
序列号 |
C_ID |
Varchar(50) |
|
|
时段 |
C_SHIDUAN |
Varchar(4000) |
|
c.时间段维度
|
名称 |
代码 |
数据类型 |
主外键 |
|
序列号 |
C_ID |
int |
P |
|
时间段 |
C_Section |
varchar(50) |
|
|
开始时间 |
C_Begin |
varchar(50) |
|
|
结束时间 |
C_End |
varchar(50) |
|
3、比较完整的时间维度设计
|
Name |
Type |
Nullable |
Comments |
|
DAY_CODE |
VARCHAR2(8) |
N |
日代码 |
|
DAY_LONG_DESC |
VARCHAR2(30) |
N |
日完整名称 |
|
DAY_MEDIUM_DESC |
VARCHAR2(30) |
N |
日中等长度名 |
|
DAY_SHORT_DESC |
VARCHAR2(30) |
N |
日短名 |
|
WEEK_CODE |
VARCHAR2(8) |
N |
周代码 |
|
WEEK_LONG_DESC |
VARCHAR2(30) |
N |
周完整名称 |
|
WEEK_MEDIUM_DESC |
VARCHAR2(30) |
N |
周中等长度名 |
|
WEEK_SHORT_DESC |
VARCHAR2(30) |
N |
周短名 |
|
TEN_DAY_CODE |
VARCHAR2(8) |
N |
旬代码 |
|
TEN_DAY_LONG_DESC |
VARCHAR2(30) |
N |
旬完整名称 |
|
TEN_DAY_MEDIUM_DESC |
VARCHAR2(30) |
N |
旬中等长度名 |
|
TEN_DAY_SHORT_DESC |
VARCHAR2(30) |
N |
旬短名 |
|
MONTH_CODE |
VARCHAR2(8) |
N |
月代码 |
|
MONTH_LONG_DESC |
VARCHAR2(30) |
N |
月完整名称 |
|
MONTH_MEDIUM_DESC |
VARCHAR2(30) |
N |
月中等长度名 |
|
MONTH_SHORT_DESC |
VARCHAR2(30) |
N |
月短名 |
|
QUARTER_CODE |
VARCHAR2(8) |
N |
季代码 |
|
QUARTER_LONG_DESC |
VARCHAR2(30) |
N |
季完整名称 |
|
QUARTER_MEDIUM_DESC |
VARCHAR2(30) |
N |
季中等长度名 |
|
QUARTER_SHORT_DESC |
VARCHAR2(30) |
N |
季短名 |
|
HALF_YEAR_CODE |
VARCHAR2(8) |
N |
半年代码 |
|
HALF_LONG_DESC |
VARCHAR2(30) |
N |
半年完整名称 |
|
HALF_MEDIUM_DESC |
VARCHAR2(30) |
N |
半年中等长度名 |
|
HALF_SHORT_DESC |
VARCHAR2(30) |
N |
半年短名 |
|
YEAR_CODE |
VARCHAR2(8) |
N |
年代码 |
|
YEAR_LONG_DESC |
VARCHAR2(30) |
N |
年完整名称 |
|
YEAR_MEDIUM_DESC |
VARCHAR2(30) |
N |
年中等长度名 |
|
YEAR_SHORT_DESC |
VARCHAR2(30) |
N |
年短名 |
|
ALL_TIME_CODE |
VARCHAR2(8) |
N |
全部时间代码 |
|
ALL_TIME_DESC |
VARCHAR2(30) |
N |
全部时间名称 |
|
DAY_TIMESPAN |
NUMBER(3) |
N |
日时间跨天 |
|
DAY_END_DATE |
VARCHAR2(8) |
N |
结束日期 |
|
WEEK_TIMESPAN |
NUMBER(3) |
N |
周跨天数 |
|
WEEK_END_DATE |
VARCHAR2(8) |
N |
周结束日期 |
|
TEN_DAY_TIMESPAN |
NUMBER(3) |
N |
旬跨天数 |
|
TEN_DAY_END_DATE |
VARCHAR2(8) |
N |
旬结束日期 |
|
MONTH_TIMESPAN |
NUMBER(3) |
N |
月跨天数 |
|
MONTH_END_DATE |
VARCHAR2(8) |
N |
月结束日期 |
|
QUARTER_TIMESPAN |
NUMBER(3) |
N |
季跨天数 |
|
QUARTER_END_DATE |
VARCHAR2(8) |
N |
季结束日期 |
|
HALF_YEAR_TIMESPAN |
NUMBER(3) |
N |
半年跨天数 |
|
HALF_YEAR_END_DATE |
VARCHAR2(8) |
N |
半年结束日期 |
|
YEAR_TIMESPAN |
NUMBER(3) |
N |
年跨天数 |
|
YEAR_END_DATE |
VARCHAR2(8) |
N |
年结束日期 |
|
BDISABLED |
CHAR(1) |
N |
|
构建时间维度的存储过程包体如下所示:
代码
有时候需要精确度到月份的时间维度表,由于上面的日期时间维度表相对信息比较丰富,可以建立一个视图来影射一个月度时间维度表,如下图所示:

具体的视图Sql如下所示:

代码
SELECT DISTINCT
T.MONTH_CODE,
T.MONTH_LONG_DESC,
T.MONTH_MEDIUM_DESC,
T.MONTH_SHORT_DESC,
T.QUARTER_CODE,
T.QUARTER_LONG_DESC,
T.QUARTER_MEDIUM_DESC,
T.QUARTER_SHORT_DESC,
T.HALF_YEAR_CODE,
T.HALF_LONG_DESC,
T.HALF_MEDIUM_DESC,
T.HALF_SHORT_DESC,
T.YEAR_CODE,
T.YEAR_LONG_DESC,
T.YEAR_MEDIUM_DESC,
T.YEAR_SHORT_DESC
FROM DIW.DW_DIM_TIME T;

本文介绍了数据仓库中时间维度表的重要性和设计结构,包括天、月、半小时和时间段等不同粒度的时间维度。内容涵盖时间维度表的关键字段、数据类型和应用场景,并提供了创建存储过程的思路。此外,还展示了如何通过视图映射一个月度时间维度表,以满足不同精度的需求。

4744

被折叠的 条评论
为什么被折叠?



