原文:https://blog.csdn.net/recapolap/article/details/1588498/
最近由于很多人问我什么是OLAP,从而发现目前OLAP对大多数人来说还是个新名词,这里我来简单讲讲OLAP(联机分析)。
联机分析(OLAP)是由关系数据库之父E.F.Codd于1993年提出的一种数据动态分析模型,它允许以一种称为多维数据集的多维结构访问来自商业数据源的经过聚合和组织整理的数据。以此为标准,OLAP作为单独的一类产品同联机事务处理(OLTP)得以明显区分。
有点深奥是不是?其实并不复杂,OLAP最基本的概念其实只有三个:多维观察、数据钻取、CUBE运算。
从动态的多维角度分析数据
我们在平时工作中,会遇到各种问题,在分析问题的时候,同样的现象,我们会从多个角度去分析考虑,并且有时候我们还会从几个角度综合起来进行分析。这就是OLAP分析最基本的概念:从多个观察角度的灵活组合来观察数据,从而发现数据内在规律。
OLAP将数据分为两种特征,一种为表现特征,比如一个销售分析模型中的销售额、毛利等;还有一种为角度特征,比如销售分析中的时间周期、产品类型、销售模式、销售区域等。前者是被观察的对象,OLAP术语称之为“度量数据”,后者为观察视角,OLAP术语称之为“维数据”。
如果建立这样一个模型,我们就可以根据业务需求,从产品类型角度去观察各个销售地区的销售额数据(以产品类型和销售地区为维、以销售额为度量);或者我们还可以从销售模式的角度去观察各个销售地区的销售额数据(以销售模式和销售地区为维、以销售额为度量)。
对数据进行钻取,以获得更为精确的信息
在分析过程中,我们可能需要在现有数据基础上,将数据进一步细化,以获得更为精确的认识。这就是OLAP中数据钻取的概念。
比如,在销售分析中,当我们以产品类型和销售地区为维、以销售额为度量进行分析的时候,可能希望进一步观察某类产品的不同销售模式在各个销售地区的表现,这时我们就可以在产品大类这个数据维下面,再加上一个销售模式维,从而获得相应的信息。
创建数据CUBE
那么,要满足上述运算,需要什么样的前提呢?
我们可以想像,和报表不同,OLAP分析所需的原始数据量是非常庞大的。一个分析模型,往往会涉及数百万条、数千万条、甚至更多;而分析模型中包含多个维数据,这些维又可以由浏览者作任意的提取组合。这样的结果就是大量的实时运算导致的时间延滞。我们可以设想,一个对于1000万条记录的分析模型,如果一次提取4个维度进行组合分析,那么实际的运算次数将达到4的1000次方的数量:这样的运算量将导致数十分钟乃至更长的等待时间。如果用户对维组合次序进行调整,或者增加减少某些维度的话,又将是一个重新的计算过程。
从上面分析,我们可以得出结论,如果不能解决OLAP运算效率问题的话,OLAP将是一个毫无实用价值的概念。那么,作为一个成熟产品是如何解决这个问题的呢?这就是OLAP中一个非常重要的技术:数据CUBE预运算。
一个OLAP模型中,度量数据和维数据我们应该实现确定,一旦两者确定下来,那么我们可以对数据进行预先的处理,在正式发布之前,将数据根据维进行最大限度的聚类运算,运算中会考虑到各种维组合情况,运算结果将生成一个数据CUBE,并保存在服务器上。这样,当最终用户在调阅这个分析模型的时候,就可以直接使用这个CUBE,在此基础上根据用户的维选择和维组合进行复运算,从而达到实时响应的这么一个效果。
补充说明
上面所说的,是OLAP最基本的概念,除此以外,OLAP通常包括的功能包括数据旋转(变换观察维组合顺序)、数据切片(过滤无关数据,对指定数据进行重点观察),以及对数据进行跨行列运算。