数据仓库基础介绍
前言本文将会讲述 BI/DW/DA 领域的一些常见概念,如:事实表、维度表、建模、多维分析、cube 等,但不涉及具体实例分析。 1、维(Dimension)维是用于从不同角度描述事物特征的,一般维都会有多层(Level:级别),每个Level都会包含一些共有的或特有的属性(Attribute),可以用下图来展示下维的结构和组成: 以时间维为例,时间维一般会包含年、季、月、日这几个Level,每个Level一般都会有ID、NAME、DESCRIPTION这几个公共属性,这几个公共属性不仅适用于时间维,也同样表现在其它各种不同类型的维。其中ID一般被视为代理主键(Agent),它只被用于作为唯一性标志,并且是多维模型中关联关系的代理者,在业务层面并不具有任何意义;NAME一般是业务主键(Business),在业务层面限制唯一性,一般作为数据装载(Load)时的关联键;而DESCRIPTION则记录了详细描述信息,在多维展示和分析时我们都会选择使用DESCRIPTION来表述具体含义。 多维数据模型是为了满足用户从多角度多层次进行数据查询和分析的需要而建立起来的基于事实和维的数据库模型,其基本的应用是为了实现OLAP(Online Analytical Processing)。 2、Hierarchy?层次因为上面这个结构的维是无法直接应用于OLAP的,我前面的文章有介绍,其实OLAP需要基于有层级的自上而下的钻取,或者自下而上地聚合。所以每一个维必须有Hierarchy,至少有一个默认的,当然可以有多个,见下图: 有了Hierarchy,维里面的Level就有了自上而下的树形结构关系,也就是上层的每一个成员(Member)都会包含下层的0个或多个成员,也就是树的分支节点。这里需要注意的是每个Hierarchy树的根节点一般都设置成所有成员的汇总(Total),当该维未被OLAP中使用时,默认显示的就是该维上的汇总节点,也就是该维所有数据的聚合(或者说该维未被用于细分)。Hierarchy中的每一层都会包含若干个成员(Member),还是以时间维,假设我们建的是2006-2015这样一个时间跨度的时间维,那么最高层节点仅有一个Total的成员,包含了所有这10年的时间,而年的那层Level中包含2006、2007…2015这10个成员,每一年又包含了4个季度成员,每个季度包含3个月份成员……这样似乎顺理成章多了,我们就可以基于Hierarchy做一些OLAP操作了。 实表是用来记录具体事件的,也就是你要关注的内容,包含了每个事件的具体要素,以及具体发生的事情。事实表中以数字型为主,包含了度量信息。比如用户交易流水表。? 维表则是对事实表中事件的要素的描述信息,就是你观察该事务的角度,是从哪个角度去观察这个内容的。维度表常以文本类型为主,常常被作为事实表的“上下文”。一般用来解释事实表中关键字纬度的具体内容,为那些度量数值添加了业务意义。比如用户属性表。? 基于事实表和维表就可以构建出多种多维模型,包括星形模型、雪花模型和星座模型。这里不再展开了,解释概念真的很麻烦,而且基于我的理解的描述不一定所有人都能明白,还是直接上实例吧:? 这是一个最简单的星形模型的实例。事实表里面主要包含两方面的信息:维和度量,维的具体描述信息记录在维表,事实表中的维属性只是一个关联到维表的键,并不记录具体信息;度量一般都会记录事件的相应数值,比如这里的产品的销售数量、销售额等。维表中的信息一般是可以分层的,比如时间维的年月日、地域维的省市县等,这类分层的信息就是为了满足事实表中的度量可以在不同的粒度上完成聚合,比如2010年商品的销售额,来自上海市的销售额等。 注:雪花模型是当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。相比星型模型,雪花模型的特点是贴近业务,数据冗余较少,但由于表连接的增加,导致了效率相对星型模型来的要低一些。 、立方体 Cube这里所说的立方其实就是多维模型中间的事实表(Fact Table),它会引用所有相关维的维主键作为自身的联合主键,加上度量(Measure)和计算度量(Calculated Measure)就组成了立方的结构: 度量是用于描述事件的数字尺度,比如网站的浏览量(Pageviews)、访问量(Visits),再如电子商务的订单量、销售额等。度量是实际储存于物理表中的,而计算度量则没有,计算度量是通过度量计算得到的,比如同比(如去年同期的月利润)、环比(如上个月的利润)、利率(如环比利润增长率)、份额(如该月中某类产品利润所占比例)、累计(如从年初到当前的累加利润)、移动平均(如最近7天的平均利润额)等,这些计算度量在Oracle中都可以借助分析函数直接计算得到,相信大部分的OLAP组件都会提供类似在时间序列上的分析功能。而这些计算度量往往对于分析而言更具意义,立方中借助与各个维的关联关系从不同的角度和层面来展现这些度量。 cube 一般是经过大量聚类运算好的而加以用特定方式存贮的多维报表,多拉几个维度构成的报表虽然也有分析功能,但是它是死的,而cube可以进行任意维度角度组合去看待数据,分析的味道更浓一些。对于cube,你可以把它想像成一个魔方的客观形态(其实cube的维数一般比魔方的三维要多);而数据OLAP就是要从中抽取数据;?一个cube基于一个主题,并且分为几个维,维是围绕主题的; 7、数据模型与数据建模模型是对现实世界的抽象,设计数据库系统时,一般会事先用抽象的图表(ER图)反映数据彼此之间的关系,称为建立数据模型。数据模型是数据库管理系统用来表示实体与实体间联系的方法。在设计数据库时,对业务进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据建模。 数据模型与数据建模的过程就是用标准来定义、规范数据。合理的业务模型设计对ETL至关重要。数据仓库是企业惟一、真实、可靠的综合数据平台。数据仓库的设计建模一般都依照三范式、星型模型、雪花模型,无论哪种设计思想,都应该最大化地涵盖关键业务数据,把运营环境中杂乱无序的数据结构统一成为合理的、关联的、分析型的新结构,而ETL则会依照模型的定义去提取数据源,进行转换、清洗,并最终加载到目标数据仓库中。 8、数据模型的定义数据模型按不同的应用层次分成三种类型:分别是概念数据模型、逻辑数据模型、物理数据模型。概念数据模型(Conceptual Data Model)简称概念模型,是面向数据库用户的实现世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统(Database Management System,简称DBMS)无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。逻辑数据模型是业务抽象到DBMS中,物理数据模型是逻辑数据模型的具体实现。 数据仓库的物理模型较常见的操作型数据库的物理模型有很大不同。最明显的区别是:操作型数据库主要是用来支撑即时操作,对数据库的性能和质量要求都比较高,为了防止“garbage in,garbage out”,通常设计操作型数据库的都要遵循几个范式的约束,除非少数情况下为了性能进行妥协,才可能出现冗余。而数据仓库的建立并不上为了支撑即时操作,或者说,数据仓库的数据是来源于即时操作产生的数据,而不是直接来源于即时操作。所以它的数据质量是由操作性系统来保证的,而不是由几个范式来保证的。而且为了更好的跟踪历史信息,以及更快的产生报表,数据仓库的物理模型中存在着大量冗余字段。 9、事实表和维度表的分界线事实表是用来存储主题的主干内容的。以日常的工作量为例,工作量可能具有如下属性:工作日期,人员,上班时长,加班时长,工作性质,是否外勤,工作内容,审核人。那么什么才是主干内容?很容易看出上班时长,加班时长是主干,也就是工作量主题的基本内容,那么工作日期,人员,工作性质,是否外勤,工作内容是否为主干信息呢?认真分析特征会发现,日期,人员,性质,是否外勤都是可以被分类的,例如日期有年-月-日的层次,人员也有上下级关系,外勤和正常上班也是两类上班考勤记录,而上班时长和加班时长则不具有此类意义。所以一般把能够分类的属性单独列出来,成为维度表,在事实表中维护事实与维度的引用关系。 10、钻取钻取是改变维的层次,变换分析的粒度。它包括向上钻取(roll up)和向下钻取(drill down)。roll up是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;是指自动生成汇总行的分析方法。通过向导的方式,用户可以定义分析因素的汇总行,例如对于各地区各年度的销售情况,可以生成地区与年度的合计行,也可以生成地区或者年度的合计行。 11、交叉分析交叉分析是指对数据在不同维度进行交叉展现,进行多角度结合分析的方法,弥补了独立维度进行分析没法发现的一些问题。交叉分析以多维模型和数据立方为基础,也可以认为是一种特殊的细分方式,但跟细分的概念有点差异,如果有兴趣可以先阅读下之前的文章——数据立方体与OLAP。细分的方法更多的是基于同一维度的纵深展开,也就是OLAP中的钻取(Drill-down),比如从月汇总的数据细分来看每天的数据,就是在时间维度上的细分,或者从省份的数据细分查看省份中各城市的数据,是基于地域维的下钻。交叉分析不再局限于一个维度,就像数据立方体与OLAP文章中的立方体,是基于不同维度的交叉,时间维、地域维和产品维交叉在一起分析每个小立方的数据表现,可以通过OLAP的切片(Slice)和切块(Dice)操作查看例如上海市在3月份的电子产品的销售情况,这会帮助我们发现很多在单个维度中无法发现的问题。所以,交叉分析是基于不同维度横向地组合交叉,而不是细分在同一维度的纵向展开。大体大样式如下: 一般以表格呈现: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- N2013012801-编译LUA5.1-NO-msvcr*dll
- java – 测试Hibernate DAO,而不是围绕它构建Universe
- 关于VB中Timer停止的问题
- Notes-3:LUA应用之HTTP下载
- datetime – 在Lua中获取UTC UNIX时间戳
- kuangbin专题专题四 Currency Exchange POJ - 1860
- 如何在Delphi组件中存储大文本?
- spring开发_注入其他Bean的方法返回值_MethodInvokingFacto
- 在Delphi Win32应用程序中显示调用堆栈
- RemObjects Data Abstract for Delphi - 6.0.61.1029 破解版