1. 引言
本篇主要介绍数据仓库中的一项重要分析技术——联系分析处理(OLAP)。
在第一篇笔者介绍到数据处理主要有两种,操作型数据处理和分析型数据处理,前者可以称为OLTP,后者可以称为OLAP。本篇将具体介绍什么是OLAP?它与OLTP的区别是什么?多维数据模型和多维分析操作是OLAP中的两种核心技术,也会予以说明。
2. OLAP定义
联机分析处理(Online Analysis Process,OLAP
)的定义有以下几种:
OLAP委员会的定义:“OLAP是使分析人员、管理人员或者执行人员能够从多种角度对从原始数据中转化出来的、能够真正为用户所理解的,并真实反映企业多维特性的信息进行快速、一致、交互的存取,从而获得对数据的更深入了解的一类软件技术。”
文献[2]的定义:“OLAP是以海量数据为基础的复杂分析技术,支持各级管理决策人员从不同的角度,快速灵活地对数据仓库中的数据进行复杂查询和多维分析处理,并且能以直观易懂的形式将查询和分析结果提供给决策人员,从而辅助各级管理人员作出正确决策。”
我的理解是:“OLAP是一种对数据仓库中的数据进行复杂的查询和计算操作,让用户能够从多个角度、快速有效的获取信息的分析技术。”
总结:以上定义都表明了OLAP的关键词是:
“海量数据”、“复杂查询计算”、“多维分析”、“快速灵活”、“支持决策”
这也就是OLAP的特点。
## 3. OLAP与OLTP的区别 OLAP和OLTP是两类不同的应用,OLTP是对数据库中数据的联机查询和增删改操作,它以数据库为基础;而OLAP适合以数据仓库为基础的数据分析处理。 OLAP中历史的、导出的及经综合提炼的数据主要来自于OLTP所依赖的底层数据库,OLAP数据较OLTP数据需要多一步综合处理或多维化的操作。 OLAP数据和OLTP数据的区别如下表: ![OLAP数据和OLTP数据](http://images.cnblogs.com/cnblogs_com/hbsygfz/726837/o_20150826114710.png) 可以看出OLAP和OLTP在处理的数据的特征、面向的用户均有所不同。
## 4. 多维数据模型的基本概念 **(1)定义:** 多维数据模型是OLAP中的一项核心技术。 **多维数据模型**是数据分析时用户的数据视图,是面向分析的数据模型,用于给分析人员提供多种观察的视角和面向分析的操作。 多维数据模型的数据结构可以用**多维数组**来表示,如:`(维度1,维度2,……,维度n;度量1,度量2,……,度量m)`。 多维数据模型也可以使用**多维立方体**(`data cube`)直观展现,其中**维**表示用户的观察角度,多维空间中的**点**表示度量的值。 ![数据立方体](http://images.cnblogs.com/cnblogs_com/hbsygfz/726837/o_555.png) **(2)常用术语:** **① 维(dimension):**维是人们 观察事物的特定角度,是事物的某个属性,比如时间、地点、产品。每个维都有唯一的名称,比如时间维、地区维、产品维。 **② 维成员(member):**维成员就是维的取值。如果一个维是多个层次的,那么维成员就是不同**维层次**上的取值的组合。比如地区维,维成员就可以是“北京”、“上海”、“杭州”等;而日期维包括年、月、日三个层次,那么它的维成员就是“2008年8月8日”,但并不是每个层次上都一定要有取值,比如“2008年8月”也可以是维成员。 **③ 维层(level):**维是观察事物的角度,维层就是这个角度的细节程度,不同的细节程度对应着不同的维层。比如日期维,可以从“年”这一细节程度去观察,也可以从“季度”、“月份”去观察,因此年、季度、月份等就是日期维的不同维层。层之间有一定的层次级别。 **④ 维层次(hierarchy):**维层次是维层的不同划分。比如日期维可以按照“年-季度-月”划分,也可以按照“年-星期-日”划分。两种划分就是日期维的两个维层次。再比如产品维,可以按照产品、类型、种类划分,也可以按照制造商、代理商、承销商来划分。 **⑤ 维属性(attribute):**维属性就是维成员所具有的特征,维属性可以在每个维成员上定义,也可以在维层上定义。如果在维层上定义,那么该维层上的所有维成员都有这些属性。比如产品维的某一个成员“洗衣机”,它有一个“洗涤重量”的属性,这就是维属性。 **⑥ 度量(measure):**度量就是要分析的目标或对象。常见的度量值有销售量、供应量、利润等。度量一般有名称、数据类型、单位、计算公式等属性。度量还可以分为可累计型和不可累计型。 **⑦ 数据方体(cube):**多维数据模型的空间展现就是数据方体,也称为多维立方体。一个数据方体由多个**维**和**度量**组成。n维立方体可以看做由一系列的n-1维立方体组成。 **⑧ 数据单元(cell):**在一个数据立方体中,当每一个维上都确定一个维成员,那么就可以唯一确定多维空间中的一个点,这个点就称为数据单元。一个数据单元可以有多个度量值,比如一个三维立方体,有三个维度:日期维、地区维、产品维,那么“2008年8月8日”、“北京”、“冰箱”,就可以确定一个数据单元,这个数据单元上的度量值可以是利润、销售额、销售数量等。
5. 常用的多维数据模型
常见的多维数据模型有星型模型、雪花模型、事实群模型。
(1)星型模型:
星型模型是多维数据模型的基本结构,通常是由位于中心的一张表和其周围的多张表组成。中心的表叫做事实表,周围的表叫做维度表。事实表(fact表
)用来存储事实的度量值和各种维度表的主码值。维度表(dimension表
)用来保存维的信息,即每个维成员的属性信息和层次信息。事实表通过维度表的主码与各维度表相连接。
星型模型不支持维的层结构。每个维只有一个维表。如果一个维度有多个维层,那么所有的维层属性都必须放在这一个维表里面。因此就会因为没有规范化而产生了一定的冗余。
(2)雪花模型:
雪花模型是在星型模型的基础上发展而来,每一个维度不再只有一张维度表,而是可以有多张维度表。雪花模型和星型模型的主要区别在于雪花模型会根据维层对维度表进行规范化。经过规范化的维表不仅易于存储而且能节省空间,但是在查询时就需要比较多的连接操作。因此我们在处理时,可以将星型模型和雪花模型进行综合,对于较小的维度表仍然使用星型模型的不规范形式,对于较大的维度表则使用雪花模型的规范化形式。
(3)事实群模型:
事实群模型类似于星型模型,区别只是多张事实表之间可以共享同一张维度表。
6. 常用的多维分析操作
(1)多维分析基础——聚集函数
聚集就是对细节数据进行综合的过程。
最常用的五种聚集函数:求和(sum)、计数(count)、最大值(max)、最小值(min)、平均值(average),还有求中间值(median)、排序(rank)。
(2)切片:slice
就是在数据方体的某一维上选定一个维成员的动作,即限定多维数组某一个维度只取一个特定的值。
比如地区维,选定“北京”这一个维成员,这样就得到一个切片。
(3)切块:dice
就是在数据方体的某一维上选定某个区间的全部维成员的动作,即限定多维数组某一个维度只取一定区间的值。
比如地区维,选定“北京”、“上海”、“杭州”,这样就得到一个切块。当这一个区间只有一个维成员时,就得到一个切片。因此切块可以由多个切片操作叠合而成。
(4)旋转:rotate
改变数据方体维的次序的动作称为旋转。旋转操作对数据不做任何改变,只是改变立方体摆放的视角。
(5)下钻:drill down
下钻操作就是在某个分析的过程中,用户可能需要从更多的维或者某个维的更细层次上观察数据,这时候就需要通过下钻操作来实现。比如将日期维从季度层次下钻到月份层次。下钻前用户只能看到季度数据,而下钻后就可以看到月份数据。
下钻操作主要有两种类型:一是在现有的维下钻取更细节一层的数据。比如日期维上的季度数据下钻到月份数据。二是增加更多的维,比如现在只分析了三个维度的数据,但是问题仍然无法解决,这时候就需要更多维的数据。
(6)上卷:roll up
上卷操作是相对下钻操作而言的,下钻可以看到更多更细节的数据,因此上卷操作就是看到更少更综合的数据。因此,上卷操作也分为两种,一种是上卷到更高层次的数据;另一种是减少维度。
7. 参考文献
[1] 数据仓库(原书第4版),William H.Inmon著,王志海等译,机械工业出版社,2006.8
[2] 数据仓库与数据分析教程,王珊等编著,高等教育出版社,2012.8