《分析服务从入门到精通读书笔记》第一章、维度数据仓库(4)

简介

商业智能系统将维度数据仓库作为数据存取层。数据仓库存储在关系型数据库管理系统(RDBMS)中,打一个非常简单的比方,你可以将关系数据库简单地想作一系列的表格。每个表格有行和列,就行Excel电子表格一样。在维度数据仓库中,维度存储在维度表中,度量值被称作事实并存储于事实表(fact table)中。

目的

介绍数据仓库中的维度表和事实表的概念及逻辑模型

内容

一、事实表

  在维度数据仓库中,存储度量值的详细值或事实的表称作事实表。表1.14给出了FactSales事实表前几行的概念视图,它存储了按照州、产品和月份划分的销售量和销售额。

表1.14 FactSales事实表

        州                   产品                        月份                         销售量                             销售额/美元              
OR Hitch Rack 2011年1月 1 120.00
OR Mountain-500 Silver,40 2011年1月 1 565.00
OR Mountain-500 Silver,48 2011年1月 1 552.50
WA   Mountain-500 Silver,48 2011年1月 1 552.50
OR Hitch Rack 2011年2月 2 240.00
WA Hitch Rack 2011年2月 4 480.00

 

在这个事实表的几行实例中,前三列(州、产品和月份)是键列。键列的值将事实表每行中的事实和每个维度表中的一行联系起来。剩下的两列(销售量和销售额)包含了数值事实。事实表中的每一列通常是键列或者是事实列,但也有可能是其他用于参考的列,例如,订单号或发票号。

对于每个度量值,事实表中都有一个列,不同的事实表有不同的度量值。销售事实表可能有两个度量值列:一个销售额,另一个是销售量。工作车间事实表可能有三个度量列:一个是生产量,一个是分钟数,另一个是残次品数。

事实表中的行都必须处在同一个细节级,并和同一个维度集相关。在表1.14所示的FactSales事实表中,每一行都要包含月度数据,同时也要有关于州和产品的值。如果公司按季度对每个产品子类设置的销售额度,则该数据必须存储于不同的事实表。事实表存储的详细程度也被称作事实表的粒度(granularity)。和事实表相关的维度被称作事实表的维数(dimensionality)。具有不同粒度或不同维数的事实必须分别存储于不同的事实表中。一个数据仓储通常可以有多个事实表。

表1.14中的示例行说明了一个事实表的概念布局。实际上,事实表都会使用被称为维度键(dimension key)的整数来表示维度成员,而不是采用描述性的名称。例如,如表1.15所示的事实表,“州”列被“州键”列所代替。同时1 和2 代替了 OR 和WA。类似的,产品和月份列被维度列所代替,同时这些列中的值被维度键值代替。这样做是因为一个事实表所包含的行数量常常很大(在一个中等大小的数据仓库中,事实表可能动辄拥有数以亿计的数据行),使用整数维度键值能显著的减少事实表的大小

表1.15 FactSales表

           州键                     产品键                      月份键                        销售量                             销售额/美元          
1 483 201101 1 120.00
1 591 201101 1 565.00
1 594 201101 1 552.50
2 594 201101 1 552.50
1 483 201102 2 240.00
2 483 201102 4 480.00

 

在事实表中使用整数维度键值时,维度成员的标签必须被存入另一个表——维度表。事实表中的每个维度键都有一个维度表。

二、维度表

维度表用一行来表示每个维度的键属性成员。键属性有两列:一列包含整数维度键,另一列包含属性标签。

下面这张表是一个简化版本

表1.16 DimProduct维度表

                产品键                                    产品                   
483 Hitch Rack
596 Mountain-500 Black,40
598 Mountain-500 Black,44
599 Mountain-500 Black,48
591 Mountain-500 Silver,40
593 Mountain-500 Silver,44
594 Mountain-500 Silver,48
604 Road-750,44
605 Road-750,48

 

在数据仓库中,对每一个维度成员而言,在维度表中都包含一个唯一的键属性值。在关系型数据库术语中,键属性称作主键(primary key column)。事实表中的每个维度列都和一个维度表中的主键列相对应。在维度表中只出现一次的键值可能咋事实表中出现多次。即使主外键关联关系。例如,在表1.16中产品Hitch Rack所对应的产品键(483)只在维度表的一行中出现。但可以出现在事实表中的多行。这被称作一对多的关系(one-to-many relationship)。在事实表中,维度键列(在一对多关系中的“多”的一方)被称作外键列(foreign  key column)。关系数据库使用匹配的主键列(在维度表中)和外键列(在事实表中)的值将事实表和维度表中对应的记录连接。

维度表通常用额外的列来包含维度中的其他属性成员。表1.17显示了一份包含产品、子类、类别、颜色、尺寸和标价等属性的产品维度表。

表1.17 DimProduct维度表

       产品键                  产品                    子类                       类别                        颜色                        尺寸                      标价                
483 Hitch Rack 自行车货架 配件     120.00
596 Mountain-500 Black,40 山地自行车 自行车 黑色 40 539.99
598 Mountain-500 Balck,44 山地自行车 自行车 黑色 44 537.99
599 Mountain-500 Black,48 山地自行车 自行车 黑色 48 534.99
591 Mountain-500 Silver,40 山地自行车 自行车 银色 40 565.00
593 Mountain-500 Silver,44 山地自行车 自行车 银色 44 561.00
594 Mountain-500 Silver,44 山地自行车 自行车 银色 48 552.50
604 Road-750 Black,44 公路自行车 自行车 黑色 44 540.00
605 Road-750 Black,48 公路自行车 自行车 黑色 48 540.00

许多维度属性可用来对维度记录进行分组,并对每组中相关的事实进行汇总。例如,Product维度记录能被分为Bikes(自行车)和Accessories(配件)两类,每种分类的销售量都能计算出来。能用于创建分组的属性是可聚合的(aggregatale),其汇总值被称为聚合值(aggregate)。聚合值这术语比汇总值(summary value)更通用。汇总值暗指该值是通过对个体值累加得到的。。一旦计算除了聚合值,就可以得到个体值的累加,同时也可以计数,求最大值、最小值和平均值,或对单独的值进行其他计算。

并非所有的属性值都是可聚合的。例如,用价格属性创建分组并计算每个价格对应的销售量将使没有意义的,因为价格有许多不同的值。顾客维度通常包含了许多不同聚合的属性:接到地址、电话号码、电邮地址等。这些不可聚合的属性称为成员属性(member property)。将成员属性添加到已经存在一个可聚合属性的报表中,其目的是提供额外信息,例如,报表可以用可聚合“顾客”属性来显示销售,并列出“电话号码”和“电邮地址”成员属性。

 

posted @ 2012-03-01 14:48  指尖流淌  阅读(1013)  评论(0编辑  收藏  举报