以前介绍了几个基本工具:saiku 和 Schema Workbench,算是入门级别的了解多维报表,如果要继续深入,需要深入了解如下几个概念:

1、OLAP

联机分析处理,和他对应的是OLTP(联机事务处理)。

OLTP:做为一个开发人员,OLTP是最常用的,甚至都不需要理解这个概念!比如各种门票销售系统、付款系统等等。这些系统对相应速度要求特别高

OLAP:主要用于分析和决策,是数据仓库的主要应用。比如:渠道A在2015-10-01给产品B带来多少pv、uv、订单、销售额等数据,这就对分析的能力提出了很高的要求。开发人员开到这里可能会想,这是一个Sql能解决的,有必要搞出一个概念吗?我理解是有两个原因,首先需求非常非常多,不可能每一个都写Sql,会累死的;其次从业务数据表里面写这个Sql,往往非常复杂,如果数据量很大,运行时间也会很长。

下面是OLAP和OLTP的主要区别:

 
OLTP
OLAP
用户
操作人员,低层管理人员
决策人员,高级管理人员
功能
日常操作处理
分析决策
DB设计
面向应用
面向主题
数据
当前的,最新的细节的,二维的分立的
历吏的,聚集的,多维的,集成的,统一的
存取
读/写数十条记录
读上百万条记录
工作单位
简单的事务
复杂的查询
DB大小
100MB-GB
100GB-TB

2、Mondrian

与其说Mondrian是OLAP的分析引擎,不如说就是(按照分析数据模式的XML)执行MDX语句,并输出结果。

为什么需要OLAP引擎Mondrian?在工作中经常需要对数据量极大的数据表和相关联的多个维度表进行查询、汇总、轴变换以及上卷、下钻等操作,查询可以非常复杂,如果没有 OLAP 引擎这是很难完成的。 想象一下,某个省份的uv是多少?某个省份某天的uv是多少?某个渠道给某个省份某天的uv是多少?某个渠道给某个省份某个城市某天的uv是多少?......要多少Sql

那么Mondrian可以将需求翻译成sql,并执行。要求:MDX语言,翻译规则:模式文件里面逻辑模型到物理模型的映射!

3、数据库表

其实这不算是新的概念,这里主要是说明一下数据库表和Mondian之间的关系。Mondrian使用JDBC链接数据库,并运行在数据库基础上。数据表分为:事实表和维度表,这些概念可以参考:http://www.cnblogs.com/liqiu/p/4243437.html

4、立方体

这是核心概念,事实表和维度表共同构成了立方体。如图所示:

这个立方体有三个维度时间(Time)、货运方式(Route)、地区(Source),数据(度量) 就位于各轴的交叉点(Cell)。

如果关心不同的维度和层次,就会得到不同的数据粒度,在立方体中就是一个面,或者一个柱形,或一个小立方体。这也叫数据立方体的一个切片(Slicer)。

关心维度越少,层次越高,数据量就越少,这是一个聚集(Aggregate)的过程,会对度量进行聚集操作(一般是汇总)。

5、维度

维度(Dimension)表示数据的属性,一个维度一般会有一个维表(也可能多个),事实表会有一个字段关联维表。

比如某个销售数据里可能会有客户这个维度,有一个 customers 表:包含客户名字、性别、地区等属性,在事实表会有一个字段叫 customer_id,关联 customers 表。

有的维度可以没有维度表,因为这种维度比较简单,没有更多属性,没有必要加一个维度表。这种维度叫退化维度。比如事实表里有一个支付方式字段,只有已确定的有限几种取值:比如 cash(现金)、credit(信用卡)等。又比如事实表里已有了一个性别字段,那性别这个维度就不需要一个维表。

5.1 维度的层次

维度是可以有层次的。比如前面的数据立方体,三个维度都有层次。货运方式分陆地和非陆地,陆地分公路和铁路、非陆地分海路和航空。分层次的维度提供了更多的数据粒度选择。

维度的层次(Hierarchy)包含多层/级(Level),在维表中一般每层会有一个字段,事实表关联的是最低一级维度。比如 Time 维度表,如下:

CREATE TABLE "Time"
(
stattime date, -- 日期
week integer, -- 周
month integer, -- 月
quarter integer, -- 季度
year integer -- 年
)

事实表关联的是维表的日期(yyyy-MM-dd)字段,而维表还有月、季度、年字段。有些事实表会增加月、季度、年(冗余)字段,为了 在查询时减少关联维表。

5.2 维度的成员

维度的成员(Member)指的维表某个级别(Level)的一个取值。以时间维度为例,假设时间维度分为年份、季度、月份、日期这样的级别,时间跨度是 2003 年至 2005 年(假设每一天都要数据),那么日期这一级别(最低的级别)的成员(Members)是维度表所有的日期(2003-1-1,2003-1-2...2005-12-31)(1 千多个成员),月份这一级别的成员是 1-12(12 个),季度的成员是 1-4(4 个),年份的成员是2003-2005(3 个)

6、聚集表

聚集表:是为了提升效率事先对事实表进行轻度的汇总。相当于预处理,不用每次都计算

7、Schema

多维数据的事实表、维表、聚集表等存储于数据库中,属于物理模型;而数据立方体、维度、度量这些概念属于逻辑模型。多维分析引擎必须要理解逻辑模型,并能够映射到物理模型上。多维数据的模式(Schema)就是用来描述这个逻辑模型以及到物理模型的映射的。 模式(Schema)是多维数据库的元数据。

比如咱们在使用saiku的时候,上传的shema文件。或者使用mondrian workpench的时候,自动生成的xml文件都是这个内容,下面是一个例子:

<Schema name="qiu-schema">
<Cube name="qiu-cube" visible="true" cache="true" enabled="true">
<Table name="sale" schema="public" alias="">
</Table>
<Dimension type="StandardDimension" visible="true" foreignKey="cusid" name="qiuDimension">
<Hierarchy name="qiuHierarchy" visible="true" hasAll="true" allMemberName="allCustomer" allMemberCaption="所有名称">
<Table name="customer" schema="public" alias="">
</Table>
<Level name="qiuLevel" visible="true" column="gender" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
</Level>
</Hierarchy>
</Dimension>
<Measure name="qiuMeasure" column="num" datatype="Numeric" aggregator="sum" visible="true">
</Measure>
</Cube>
</Schema>

参考:

http://76287.blog.51cto.com/66287/885475

http://www.cnblogs.com/liqiu/p/4243437.html

saiku、mondrian前奏之——立方体、维度、Schema的基本概念的更多相关文章

  1. [mondrian] 分析一个简单的schema文件

    <?xml version="1.0" encoding="UTF-8"?> <Schema name="Mondrian" ...

  2. 数据立方体----维度与OLAP

    前面的一篇文章——数据仓库的多维数据模型中已经简单介绍过多维模型的定义和结构,以及事实表(Fact Table)和维表(Dimension Table)的概念.多维数据模型作为一种新的逻辑模型赋予了数 ...

  3. schema.xml属性概念

    # schema 定义逻辑库 checkSQLschema  当该值设置为 true 时,如果我们执行语句**select * from TESTDB.travelrecord;**则 MyCat 会 ...

  4. Saiku_学习_02_Schema Workbench 开发mdx和模式文件

    一.前言 saiku的查询都是通过cube来进行的.因此每当我们要进行一次多维度查询时,都要先修改xml.上传.重启才能生效,不仅效率低,还不利于学习和理解MDX和模式文件. 通过 workbench ...

  5. saiku之固定维度(必选维度)

    工作中遇到的问题,记录下来方便以后查找. 在saiku中如何设定固定维度? 找到WorkspaceDropZone.js文件,在synchronize_query: function(){}方法中的“ ...

  6. 【转】Kylin系列-使用Saiku+Kylin构建多维分析OLAP平台

    关于Kylin的介绍和使用请参考之前的文章 <分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例> Kylin对外提供的是SQL查询接口,基于Kylin构建OL ...

  7. pentaho saiku 安装全过程

    公司希望也开发一套多维分析系统,以解决运营/产品无休止的需求和技术人力不足的矛盾! 一.开发选型: 一.BIRT:易用性差,所以没再使用 二.JasperReport+ireport:文档收费,不支持 ...

  8. Saiku OLAP

    简介 Saiku成立于2008年,由Tom Barber和Paul Stoellberger研发.最初叫做Pentaho分析工具,起初是基于OLAP4J库用GWT包装的一个前端分析工具.经过多年的演化 ...

  9. Saiku国际化总结

    国际化步骤: 1.在mondrian.properties同路径下加上locale_zh_CN.properties资源文件,内容例如:schema.name.K12UserAnalysis=K12用 ...

随机推荐

  1. 跟我一起学WCF(8)——WCF中Session、实例管理详解

    一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...

  2. 我没发现Mvc里的 web.config 有什么用。

    实验过程 由于 Mvc2+ 引入 Area ,导致文件夹结构发生变化. Mvc下的 web.config 所在的位置是: ~/Areas/MySystem/Views/Web.config 对应的请求 ...

  3. 设计模式之美:Facade(外观)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):用抽象类定义 Facade 而使子类对应于不同的子系统. 意图 为子系统中的一组接口提供一个一致的界面,Facade 模式定义了 ...

  4. 海康威视 NET_DVR_FindNextFile 的错误

    public struct NET_DVR_FIND_DATA { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = )] /// <summary ...

  5. 360[警告]跨站脚本攻击漏洞/java web利用Filter防止XSS/Spring MVC防止XSS攻击

    就以这张图片作为开篇和问题引入吧 <options>问题解决办法请参考上一篇 如何获取360站长邀请码,360网站安全站长邀请码 首先360能够提供一个这样平台去检测还是不错的.但是当体检 ...

  6. Leetcode 26 Remove Duplicates from Sorted Array STL

    题目本身是去重 由于我很懒,所以用了STL库里的unique函数来去重,小伙伴们可以考虑自己实现去重的函数,其实并不复杂. class Solution { public: int removeDup ...

  7. Java中Atomic包的实现原理及应用

    1. 同步问题的提出 假设我们使用一个双核处理器执行A和B两个线程,核1执行A线程,而核2执行B线程,这两个线程现在都要对名为obj的对象的成员变量i进行加1操作,假设i的初始值为0,理论上两个线程运 ...

  8. 微信商城系统与手机APP的优势对比!

    随着移动互联网的大势到来,手机移动应用已经成为未来的主流市场,很多企业也在投入精力和财力进行研发自己的手机APP,以便更好的迎合市场的需求. 然而当微信公众平台开放以后,新的机会出现了! 很多企业已经 ...

  9. android: 多线程编程基础

    9.1   服务是什么 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那 些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使 ...

  10. 我用了13行代碼開發出来的PHP框架

    我只用13行代碼開發的PHP框架,如果您對框架不理解,不知道框架究竟幫您做了什麽事,可以下載此框架看一下, 另外如果您想開發自己的框架也可以由這個框架的思路進行擴展. 源碼下載地址:http://do ...