Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1614490
  • 博文数量: 292
  • 博客积分: 10791
  • 博客等级: 上将
  • 技术积分: 2479
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-20 21:06
文章分类

全部博文(292)

文章存档

2011年(31)

2010年(261)

分类: 数据库开发技术

2010-04-05 21:27:24

本文简要介绍了如何使用 Pentaho 的相关工具在关系型数据库基础上建立dimension 和cube, 以及如何利用这些cube产生一个报表或图表。

首先要在数据库里建立维度表和事实表。 维度表和事实表就是数据库里普通的物理表, 我们可以使用create table … 这样的语句来建立, 也可以使用工具建立。常见的维度包括时间,区域,产品等。
如时间维度表可以包括 date_tk, year, quarter, month, week, day_of_month, day_of_year 等字段,其中 date_tk 是主键。 区域维度表可以包括 region_tk, country, province, city, district等字段,其中 region_tk 是主键。事实表里保存的是在上述维度下的实际销售数据,销售目标等如 date_tk, region_tk, quantity, 其中date_tk, region_tk是外键, quantity是销售数据。 可以看出事实表和维度表之间是参照的关系,事实表是外建表,维度表是主键表。根据参照方式不同,又可以分为雪花模型或星型模型等。

建立维度表还要注意数据粒度,也就是用户在查看数据时可以看到的最细节的数据。不同级别或类型的人员,关心的数据粒度是不同的。

现在的维度表和事实表还只是数据库里的表, 为了能够使用 MDX 来查询这些表, 我们还要建立维度表和事实表之间的逻辑关系, 也就是建立一个 cube, 建立cube 可以使用 Mondrian workbench, 当然熟练的话也可以用手写, 实际上就是一个 xml 文件. 下图是使用Mondrian workbench建立cube.
mondrian_workbench.JPG
图里建立三个维度,分别是Date, Country, MTM, 分别对应着数据库里相应的日期维度表,区域维度表,产品维度表, 在每个维度下还要至少设置Hierachy 和不同的 Level.

图里还建立两个Cube, 分别对应着数据库里相应的销售数据事实表和销售目标事实表, 这两个两个cube还可以组成一个virture cube, 以便把不同粒度的数据放在一起。建好cube 后, 可以保存为一个 XML 文件,如 india_sellout.xml, 在以后的流程里会使用到这个文件.


Cube 建好后下面的工作就是抽取数据, 并将数据生成报表了, 整个过程全部使用了Kettle, 分为下面几个步骤:

1. 1. 使用 Kettle 设计一些常用的时间变量,如当前日期,当前月份,当前季度, 任务开始时间等,这些变量会在后面的步骤中使用, 如MDX 查询, 报表的标题, 邮件的subject 等等。

2. 使用 Kettle建立数据抽取和加载流程,通过该流程可以将事实数据从业务数据库加载到事实表中。数据抽取的参考流程图如下:
kettle_extract_data.JPG
3. 建立生成报表和发送邮件作业,生成报表使用 Mondrian Output 作业项,发送邮件使用 Mail 作业项。
mondrian_job.jpg
在 Mondrian Output 对话框里要指定刚才创建的 Cube 文件(india_sellout.xml)的位置以及要生成的Excel 报表文件的位置, 在 MDX 查询文本框里写出相应的 MDX 查询语句。在MDX 查询里可以使用变量,变量的格式是 ${var1}. 另外还要指定一个 xsl 样式文件, 用来设置 Excel 输出文件的样式(主要是字体, 单元格背景色, 文字大小).


mondrian_output_dialog.JPG

4. 将数据加载流程和生成报表作业结合起来,就形成一个包括了抽取数据, 生成报表, 发送邮件的完整的作业,该作业可以由用户手工执行也可以由操作系统定时执行。
阅读(5428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~