大大数据OLAP报表系统开发白皮书

基本概念

BI

  • 简单的方案是报表系统
  • 深一个层次的商业智能是多维数据分析(OLAP)
  • 更深层次是数据挖掘(Data Mining)

OLAP 介绍

Online analytical processing(OLAP)即 联机分析处理 。

联机分析处理(OLAP)系统是数据仓库系统最主要的应用,专门设计用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持,可以根 据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以一种直观而易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业 (公司)的经营状况,了解对象的需求,制定正确的方案。

  • 逻辑概念
    1. 维(Dimension):是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维(时间维、地理维等)。
    2. 维的层次(Level):人们观察数据的某个特定角度(即某个维)还可以存在细节程度不同的各个描述方面(时间维:日期、月份、季度、年)。
    3. 维的成员(Member):维的一个取值,是数据项在某维中位置的描述。(“某年某月某日”是在时间维上位置的描述)。
    4. 度量(Measure):多维数组的取值。(2000年1月,上海,笔记本电脑,0000)。
    5. OLAP的基本多维分析操作有钻取(Drill-up和Drill-down)、切片(Slice)和切块(Dice)、以及旋转(Pivot)等。
    6. 钻取:是改变维的层次,变换分析的粒度。它包括向下钻取(Drill-down)和向上钻取(Drill-up)/上卷(Roll-up)。Drill-up是在某一维上 将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而Drill-down则相反,它从汇总数据深入到细节数据进行观察或增加新维。
    7. 切片和切块:是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。
    8. 旋转:是变换维的方向,即在表格中重新安排维的放置(例如行列互换)。
  • 星形结构
    1. 事实(Fact)和维(Dimension)

    当我们观察数据时,通常想察看聚合数据的某种顺序。这些数据叫做度量(measure)。度量就是可以度量和相加的数值。比如销售金额就是一种度量, 每个订单都有销售金额。假设每天销售20个产品,每个5美元,销售总额就是100美元。销售金额就是我们想关注的一种度量。此外我们可能还想知道 当天的顾客数,是5位顾客一共买了20个产品,还是1位顾客买了所有的20个产品呢?销售金额和顾客数量就是我们想关注的两个度量。

    仅仅关心度量还不够。我们观察度量的时候都需要”by”条件。这些”by”条件就叫做维(dimension)。讨论销售金额的时候,总要指定是某一天, 某个季度或者某年的销售金额。几乎我们关心的任何度量都离不开时间维。我们可能还想按照产品名称或者产品类型查看销售金额,这些条件都要对 应到相应的维上。

    由上可知,设计星型数据库的时候,我们首先要确定我们想看什么信息(确定度量),如何看这些信息(确定维)。

    当我们开始创建维表的时候,有一些规则要牢记在心。第一,所有维表都要有一个基于单列的主键。这一主键列通常只是一标识列,包含自动递增的 数值,并没有真正的含义。有含义的信息都在其他列中,这些列包含了我们要查看的所有描述信息。比如在产品维中,包含了产品描述、类别、子类 等等。这些字段不能用来作为连接字段和其他表关联,但是包含了产品的所有描述信息。维表通常都比较胖,因为字段都比较多,每一字段都比较宽

    创建事实表(Fact Table) 事实表存放度量(measure)信息,或者称事实(fact)信息。度量是根据各个维计算出来的一些数值。比如说销售金额是个数值,我们可以按产品、安 类型查看总数,可以查看任何时间段的所有总数。跟维表的又矮又胖相比,事实表一般显得又高又瘦。事实表很高,是因为他们拥有的记录数一般都 很巨大。

MDX

SELECT
NON EMPTY {Hierarchize({[Measures].[已结算金额]})} ON COLUMNS,
NON EMPTY {Hierarchize({{[Time.按周统计].[18], [Time.按周统计].[19], [Time.按周统计].[20], [Time.按周统计].[21]}})} ON ROWS
FROM [SalesMoneyReportv2]

后端

Mondrian 介绍

Mondrian是一个BI开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。

编写 Mondrian Schema

  • Cube

    创建数据立文体(CUBE)。在Mondrian里面的cube是以XML的形式定义的,他有一个GUI工具workbench来制作cube. 具体例子

  • 权限

    权限分为两种,一种是顶一下在Mondrian的cube中。可以设置cube,维度和度量的权限,具体例子 。另一种是数据权限,这个需要编写Java类实现。具体例子将在下面saiku相关小节进行介绍。

saiku

Saiku介绍

Saiku是一个模块化的开源分析套件,它提供轻量级的OLAP(联机分析处理),并且可嵌入、可扩展、可配置。

saiku 插件编写

  1. https://github.com/OSBI/saiku-ui/wiki/Plugins
  2. https://github.com/brenopolanski/saiku-plugin-boilerplate
  3. SaikuChartPlus https://github.com/it4biz/SaikuChartPlus

1)编辑index.html, 插入如下代码:

<!--search for this and put the files under this--> <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/plugin.js" ></script> <!--start js SaikuChartPlus--> <script type="text/javascript" src="js/saiku/plugins/saiku-chart-plus/plugin.js" ></script> <!--end js SaikuChartPlus-->

  1. 拷贝插件代码到如下目录 webapps/ROOT/js/saiku/plugins

嵌入式图表的使用

pig

hive

oozie.apache.org

Oozie is a workflow scheduler system to manage Apache Hadoop jobs.

mongodb

性能优化

引入 redis 缓存

分库分表

Comments

comments powered by Disqus