《分析服务从入门到精通读书笔记》第四章、创建时间维度(5)
目的
在我们实际项目中,很少存在项目不创建时间维度的OLAP数据库。通常情况下,时间维度将月度作为最低的细节级别——聚合成季度或年度。有时候,时间维度以天作为最低的细节。偶尔的情况下也可能会创建分钟甚至秒作为最低级别的维度,比如:在监控依稀那个制造业务或互联网活动、股票等。不管是那种级别的细节数据,时间维度都具有一些独特的属性。
例如,时间通常以固定的时间间隔出现。每小时有60分钟,每天有24小时,每季度有3个月每年有4个季度。时间的自然重复性促使了某些问题的产生,例如,“今年的某月和去年同期相比怎样”。其实如果我们应用MDX具备轻松回答此类问题,通过将一个维度标记为时间维度,并将该维度中的某些属性标记成特定的时间单元,可以简化这些功能的使用。
时间维度包含了自然层次结构。1月1日属于1月,后者属于一年的第1季度。我们可以利用这些关系来创建用户定义的日历年度层次结构。但是,在许多组织中使用的是财政年度,其中一年的起始日不是1月1日,财政年度的第1季度也不完全和日历年度相同。这里我们就需要用户自定义财政年度层次结构。
当然,时间并不是完全统一的,因为一年的365天并不能平均的被7天或12个月整除,有些月份有30天,有些有31天或28天(或者29天)。每月的开始在一周的不同日期,不同的国家有不同的国家法定假日,而公司可能有选择的庆祝这些节日。您可以希望标记出该工作日或休息日以及发薪日。无规律是时间维度的本质,在处理时间问题是,需要同时准备规律性和不规律性。
分析服务提供了3种方式来创建时间维度。
1、可以从现有的表中创建时间,这里和从现有表中创建产品维度相似。
2、可以从维度向导提供一个起始日和结束日,以及其他和时间相关的细节,维度向导将为您创建时间维度。向导可以创建和填充关系型数据库表,并生成该表的时间维度。
3、可以从维度向导提供一个起始日和结束日,以及其他和时间相关的细节,向导将生成只存在与分析服务数据库中的时间维度。
在使用维度向导生成时间维度以前,有几个因素需要注意:一种最佳实践是对维度的关系属性使用整数数据类型。整数需要较少的存储空间,获得比字符产或日期数据类型更快的查询,然而,有维度向导所生成的时间维度的关键属性所使用的是Date(日期)数据类型。这意味着,事实表也需要使用日期作为时间维度的外键。由向导生成的时间维度的关键属性一定是日期,没有代表更短的时间间隔的额属性。最后,向导也不允许用户创建特殊的日期属性,例如家假日或发薪日。
内容
创建时间维度最常见的方式是使用现有的数据库表。
1、在解决方案资源管理器中,右击“维度”文件夹并选择“新建维度”。在随后出现的“选择创建方式方法”中显示了4种用于创建维度的方式。默认情况下,我们选择最常用的方式:
2、确认“使用现有表”已被选择并单击“下一步”。我们的项目中只有一个数据源视图,因此,我们选中此数据源
3、从"主表"下拉列表中选择DimTime维度表
维度的主表必须包含用于创建关键属性的列。维度向导默认把主键作为键属性,并选择该列作为键列和维度关键属性的名称列,DimTime表的主键是DateKey列。
4、确认DateKey已在“键列”列表中选中
5、从“名称列”下拉列表中选择DateName。这时,“指定源信息”页应当如下图,点击“下一步”
6、在“选择维度属性”页中单击DateTime并将该属性重命名为Date
每个属性都有AttributeType属性,以便分析服务或其他客户端应用程序可以提供一些高级功能。在时间维度中,我们可以使用AttributeType属性来指定每个属性所指定的时间单元。分析服务将基于此信息来帮助运算复杂的时间计算。AttributeType还有其他用途,如会计、货币转换和地理等。分析服务可以利用会计和货币转换的属性类型。将所有其他属性类型可用作向客户端应用程序传递属性的额外信息的方法。
7、我们在“属性类型”下拉列表框中,展开“日期”|“日历”,然后选择“日期”。
8、单击“确定”。重复上述步骤,将下表中所列出的属性重命名并修改他们的属性类型。
选择的属性 | 重命名后的名称 | 属性类型 |
English Month Name | Month Name | 每年的某一月 |
Month Number Of Year | Month Number Of Year | 常规 |
Calendar Year | Calendar Year | 年 |
Fiscal Year | Fiscal Year | 会计年度 |
Month Key | Month | 月 |
Calendar Quarter Key | Calendar Quarter | 季度 |
Fiscal Quarter Key | Fiscal Quarter | 会计季度 |
这时,“选择维度属性“页如下图所示,单击”下一步“
在”完成向导“页中,将维度改为Date并单击”完成“。
提示:由于我们将AttributeType属性设置了与时间相关的值,维度向导将把Date维度的Type属性只是为Time。我们可以在”维度结构“选项卡中的”属性“窗口中选择Date维度,这是,在”属性“窗口中就可以看到Type属性
维度向导只允许将NameCoulmn属性(关键属性)设置为Date,我们还需要使用维度设计器将时间维度中的所有其他属性设置为NameColumn属性。
9、在”属性“窗格中,右击Calendar Quarter并选择属性
10、在随后出现的”属性“窗口中,滚动到底部的”源“组合并选择NameColumn属性,右击出现一个浏览按钮。
11、单击NameColumn的浏览按钮,在”名称列“对话框中,选择CalendarQuarter
12、重复上述步骤,对下列表中的每个属性进行设置NameColumn属性
属性 | NameColumn |
Calendar Year | CalendYearName |
Fiscal Quarter | FiscalQuarterName |
Fiscal Year | FiscalYearName |
Month | MonthName |
至此我们已经建立完了时间维度,但是注意,BIDS已经产生了一个设计警告,我们把鼠标指向它,可以看到:在非父子维度中创建了层次结构
下一节我们将解决此警告。