from : http://blog.csdn.net/zhoucd_dl/archive/2008/01/16/2047094.aspx
首先,我只是个初学者,希望能与大家一起交流,下面的学习总结中有着很的疑惑,需要同仁的解答,另外也希望可以为大家一起分享mondrian
  联机分析处理(OLAP)的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理(OLTP)明显区分开来。
  当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
  这里我们单独说下OLAP. 联机分析处理(OLAP)的主要特点,是直接仿照用户的多角度思考模式,预先为用户组建多维的数据模型,在这里,维指的是用户的分析角度。例如对销售数据的分析,时间周期是一个维度,产品类别、分销渠道、地理分布、客户群类也分别是一个维度。一旦多维数据模型建立完成,用户可以快速地从各个分析角度获取数据,也能动态的在各个角度之间切换或者进行多角度综合分析,具有极大的分析灵活性。这也是联机分析处理在近年来被广泛关注的根本原因,它从设计理念和真正实现上都与旧有的管理信息系统有着本质的区别。
  其中我们现在学习的mondrian则是OLAP中的service位置.它负责将组装cube,分析MDX,以及提取数据并组成多维,可以说负责的是后台的数据处理.
  mondrian包含4层:表示层,计算层,聚集层,存储层.
  表示层:指最终呈现在用户显示器上的,以及与用户之间的交互,有许多方法来展现多维数据,包括数据透视表,饼,柱,线状图.
  计算层:分析,验证,执行MDX查询.
  聚集层:一个聚集指内存中一组计算值(cell),这些值通过维列来限制.计算层发送单元请求,如果请求不在缓存中,或者不能通过旋转聚集导出的话,聚集层向存储层发送请求.聚合层是一个数据缓冲层,从数据库来的单元数据,聚合后提供给计算层。聚合层的主要作用是提高系统的性能。
  存储层:提供聚集单元数据和维表的成员,这些层可以不在同一机子上,但是计算和聚集层必须是同一台机子.
  在学习mondrian中主要的是对配置文件schema,这里引用官方网站文档里面的例子.
   uniqueMembers="true"/>  uniqueMembers="true"/>
   uniqueMembers="false"/>  uniqueMembers="false"/>
   uniqueMembers="false"/>  uniqueMembers="false"/>
  
  
   aggregator="sum" formatString="#,###"/>  aggregator="sum" formatString="#,###"/>
   aggregator="sum" formatString="#,###.##"/>  aggregator="sum" formatString="#,###.##"/>
   formula="[Measures].[Store Sales]-[Measures].[Store Cost]">  formula="[Measures].[Store Sales]-[Measures].[Store Cost]">

  schema定义了一个多维数据库。包含了一个逻辑模型,而这个逻辑模型的目的是为了书写MDX语言的查询语句。这个逻辑模型实际上提供了这几个概念:Cubes,维度(Dimensions),层次(Hierarchies),级别(Levels),和成员(Members)。而schema文件就是编辑这个schema的一个xml文件。在这个文件中形成逻辑模型和数据库物理模型的对应。
  l Cubes. 一个Cube是一系列维度(Dimension)和度量(Measure)的集合区域。在Cube中,Dimension和Measure的共同地方就是共用一个事实表。这个Cubes中的属性有:name(Cubes的名字),caption(标题,你要在表示层显示的),cache(是否对Cubes对应的实表用mondrian进行存储,默认为 true),enabled(是布尔型的,如果是被激活,Cubes就执行,否则就不于理睬)里面有一个全局的  标签确定了所用的事实表的表名
  l Diminsion,他是一个层次(Hierarchies)的集合, 维度一般有其相对应的维度表.他的组成是由层次(Hierarchies)而层次(Hierarchies)又是有级别(Level)组成.其属性:name,type(有两个属性” Standard”和”Time”默认为Standard),caption,UsagePrefix(加前缀,消除歧义,有点模糊)
  l Hierarchy,你一定要指定其中的各种关系,如果没有指定,就默认Hierarchy里面装的是来自立方体中的真实表. 属性:name,hasAll(布尔型的,决定是否包含全部的成员member),AllMemberName(所有成员的名字,也就是总的tile,例如: AllMemberName=”全部产品”), alllevelname(所有级别的名字 ,很少用), allMemberCaption(例如: allMemberCaption=” 全部产品”这个是在表示层显示的内容). PrimaryKey(通过主键来确定成员,要是没他就默认**模糊中!) primaryKeyTable(描述主键的表),defaultMember,memberReaderClass
  (定义的类的名字一定要) caption.
  l Measure, 他就是我们要计算的数值,BI中要面对的主题,具体到页面上的显示的测量数值.
  属性:name,column(对应数据库中的某个字段,), formatString(显示的格式),aggregetor(我理解为计算的函数,例如; aggregator="count"), datatype,formatter(模糊),caption,visible(是否可见 布尔型).
  l Level,级别,他是组成Hierarchy的部分.属性非常多,并且是schema编写的关键.属性:name,table(用到的表),column,namecolumn, Oridinalcolumn(字段的顺序,只对Hierarchy中的最后一个级别Level有作用,如果没指定字段 就不会排序),parentColumn( 涉及到的上一级Hierarchy成员字段的名字) NullParentValue(看成没有上一级的Hierarchy的数值,代表为”null””0”),type,UniqueMember(是布尔型的,判断在上级中是否是唯一的,例如:zipcodes are unique across all states.Thefirstlevel\'s members are always unique.), levelType(决定这是否是一个有次序或者是时间关系的级别例如:YTD 是year-to-date), captionColumn,formatter,caption,HideMemberIf(概念模糊).可以看出level有很多的属性,所用功能也是比较强大的.
  MDX
  MDX是为了查询多维数据的,而SQL是为了查询关系数据库的。而Mondrian所涉及到的一些MDX概念、MDX语法以及系统定义的MDX函数和微软的MDX十分接近,差别微小。完全可以参考微软的帮助文档进行学习。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhoucd_dl/archive/2008/01/16/2047094.aspx