双子星座

 

2007年6月17日

商业智能需要站在全局角度考虑问题

首先看一下下面这个表样.这个表样是润乾的一个示例表样,接着介绍birt 是如何做的

5 join dataset

这个表样算是报表中最常见的一种需求了,把不同粒度的数据聚合到同一粒度上.

我们用automobile 表示汽车表, 用houseproperty 表示房产表, 用estate表示土地表,用others 表示其他表.他们都有customerid 来表示客户名称.customers 表有customerid 和customername

1. 用视图来拼数据

   对于  automobile 聚合使用一个autoview , sql 如下

   select sum(automobile price* quantity) autototal, customerid  from automobile group by customerid

  对于 houseproperty 使用如下view

   select sum( house price * quantity ) housetotal, customerid  from houseproperty group by customerid

  对于 土地和其他也是差不多类型的sql

 

  得到了上面这四个视图之后, 就把customers 表根据customerid 和其他四个视图join 起来.

  select customername ,  autototal  , housetotal , estatetotal , othertotal

   from  customers c , automobile a , houseproperty h , estate e , others o

   where 四个视图和customers的连接条件

 

  由于这个表样并不涉及到以 汽车,房产,土地, 其他表中的任何一个客户为主, 所以暂时也不考虑左右连接的问题.

 

2. 使用Birt 的Joined Data Set

   Birt 提供的Joined Data Set 跟数据库里面的视图是差不多的概念,使不过一个是在数据库内部join 数据,一个是使用Java 循环的方式join 数据.

   跟上面创建视图一样,创建四个DataSet , 输出两个字段: customerid 和 total.

   然后创建一个Joint Data Set , 把customers 表和 autototal DataSet 按照customerid join起来.这时得到四个字段 customers.customername , customers.customerid  ,  auto DataSet.customerid ,auto DataSet.autotal . 最后我们把这个Joint DataSet 命名为jdataSet1 (代表的是autoDataSet 和 customers 产生的Joint DataSet ).

  然后继续创建另一个Joint Data Set 把customers 的customerid 和前一步创建的jDataSet1 按照customerid join 起来得到一个第二个Joint DataSet1 ,我们命名为jDataSet2 .

  以此类推,最后我们输出5个字段: customers.name   ,   auto.total ,  house.total  , estate.total , others.total , 实际输出可能在customers.customerid 上重复了4次.

 

上面两种方式报表的做法主要有两点差别:

1. 性能

    如果本身数据库单独执行一个视图的sql 结果比较小,而本身的automobile 表数据量比较大(也就是说一个customer对非常多的automobile 记录) , 那么使用数据库视图就会比较慢. 因为数据库在尝试得到4个视图的结果进行了一些不必要的按照automobiel表的customerid和customers的customerid进 行的比较操作( 如果有索引肯定是对索引进行了多次不必要的读) ,这时候使用Java的这种循环方式会比较快一点 . 如果本身结构集比较大,那么还是用数据库本身的排序和join 比较快, 这个道理比较类似于数据库中如果结构集大于5% 就不要走索引,直接进行全表扫描.只不过这是一个java 版的.

2. 左右连接的问题

   如果这个表的数据不是以customers里面的数据为主,而是以四个视图其中的一个为主.这时候要情况可能会比较复杂一些.由于我不太清楚birt 里面joint data set 计算的方式是怎样的,所以也不太好评论.不过如果不使用joint data set , 就是使用一般的编程的方式.那么按照下面这个思路会比较好:

a , b , c , d ,e  为customers , automobiles view  (后面简写avlist 表示这个集), housetotal view , 里面的指针.  四个view 都已经排好了序.group by 是默认排序的. outlist 表示最后需要的输出 , row表示最后输出的一条数据

for ( 按照主数据循环)  {

    row.customerid = customers.customerid;

    if( customers.customerid == avlist[b].customerid) {

           outlist[x].autotaol = avlist[b].autotal ;

           b++

     }

    四个view 同一个判断方式, 但是每个view 的指针指的是不一样的.

    最后:   outlistSet . add (outlist[x])

}

 

如果数据源本身的数据量也很大,需要输出的数据也很多,则上面两种方式都会有性能问题,这时可以考虑商业智能里面的万金油方式: ETL

 

3. ETL

    从上面这个表样看来,可能会有两个隐含条件.一个是聚合的数据粒度在时间上是月,另一个在销售地点粒度上是:支行086001-301 , 所以用ETL一开始就聚合数据可能会更好的解决性能问题.另外一个是如果用户想要排序和过滤数据的话用一个单独的ETL聚合表也比拼数据的方式好的多.

 

这篇文章的目的并不只是想解释一个做表的问题,而是说明商业智能的一些问题不光需要站在一个独立的角度思考,有些问题本身可能随着环境的一些变化而 采取对应的措施,比如上面为了解决排序,过滤,左右连接,性能问题都需要从不同的角度来考虑问题.有时候可能一个做表的问题不光只是要限定在sql 或某个报表软件的本身,有时候某个ETL问题可能不关只是ETL就能解决的,随着情况的复杂可能需要从整个商业智能的全局来进行考虑,商业智能越来越倾向 与多个解决方法的融合.

本文原文在 http://www.gemini5201314.net

如果你对ETL中性能优化问题有兴趣的话,也可以查看另一篇关于在ETL中性能优化要站在全局的角度,而不是只在数据库角度的文章.

posted @ 2008-03-21 12:16 gemini 阅读(377) | 评论 (0)编辑 收藏

重新学习Birt 中......

重新学习Birt 中......
又重新回到birt的学习中,以前用的时候本身功能也不算太好,再加上自己是个比较浮躁的人,什么都想了解一点,所以学的 也不是很好,最近计划又重新系统的学习一下Birt ,网上搜了一下,除了eclipse 官方的资料外,几乎没有什么有用的资料,要么就是太旧了,要么根本就是没有用,你抄我的,我抄他的,最后大家都抄成了一样的了,
算了,还是自己动手,丰衣足食吧,决定还是好文章自己写, 先写下自己的计划吧 , 把roadmap 放出来,也算给自己一种鞭策吧.

第一篇 : 把birt  用 ecilpse 跑出来.最简单的Java 程序. (eclipse 官方的例子)
         把birt 放到 tomcat 跑起来.                   (eclipse 官方的例子)

第二篇 : 利用eclipse 的可视化报表设计器设计模板,主要介绍,参数,sorting ,  grouping  ,  mapping  ,  filtering , hightlighting ,
         (eclipse 官方flash演示的文字版)

第三篇 : 利用birt  的desing api 和 report api 来做java 编程,主要还是集成到servlet  环境.

第四篇 : 把 birt 和pentaho 集成起来 .  (其实pentaho 官方有一份这个文档,不过我的例子稍微会介绍的更加实用一点)

大约时间是一个月吧,如果超期了,我就请大家吃饭,呵呵,只要你能够找的到我 ,
要真到了那个时候, 我只能说:
地球是很危险的,我还是回火星去吧.

有很多朋友都说birt 让他们很失望,其实birt 有一点性能问题外,基本还算可以,如果你非要说有这些,那些不爽,我只能说一句话:
还记得大话西游里面,周星驰率领一群土匪围攻白晶晶她们, 她们在周星驰重要部位点了两次火,然后吴孟达说:都焦了,割了算了吧.
记得周星驰说什么吗?
不记得就再去重温一遍经典吧?



posted @ 2007-06-19 23:07 gemini 阅读(441) | 评论 (0)编辑 收藏

eclipse enropa 即将发布 birt 的新功能一览

                        eclipse enropa 即将发布 birt 的新功能一览
最新的eclipse enropa 即将在6月29号发布了.官方说会有21个项目同时发布.其中我只关心三个项目.一个是WTP , 一个是TPTP 最后一个是BIRT .
我看了一下BIRT 所增加的新功能,从2.2M4 开始
http://www.eclipse.org/birt/phoenix/project/notable2.2M4.php
http://www.eclipse.org/birt/phoenix/project/notable2.2M5.php
http://www.eclipse.org/birt/phoenix/project/notable2.2M6.php
http://www.eclipse.org/birt/phoenix/project/notable2.2RC0.php


2.2 M4
1 . 和WTP集成的BIRT Tag .
2 . Word Emitter                 支持WORD 的 emitter . (emitter 翻译是发射,我想应该是可以预览和打印的输出格式吧)
3 . XML Source Editor            支持xml 格式的编辑器
4 . Property Editor Changes
5 . Highlight Style              对于特定条件的Item 进行高亮显示.

2.2 M5
1 . BIRT Chart Improvements             
2 . Viewer Improvements
3 . Emitters                   增强了PDF 的emitters
4 . Advanced Properties        现在可以显示所有的属性了.

2.2 M6
1 . BIRT Chart Improvements    新增加了一种chart tag library 和chart view servlet
2 . XLS Emitter Prototype      新增加了一种XLS 输出的格式
3 . Linking Cascading Style Sheets      情理之中的事情
4 . BIRT Viewer Changes        
5 . Report Examples View        新提供了一些example,提供给初学者和想了解birt新功能的爱好者.
6 . Dynamic Connection Profiles 动态的数据源链接
7 . Report Parameter Changes    增加了一种组合框的parameter view.类似与选省份和城市的那种双选框.

2.2 RC0
1 . Web Service ODA             新增加的Web Service 的数据源.可以支持像ebay , amazon的那种Web Service 的数据了.
2 . Charting Improvements       新增加使用script 来处理chart的事件.好像是用的javascript.
3 . PPT Emitter                 新增加对Power Point  的emitter.
4 . Dynamic Crosstab Support    
    这是最让我激动的功能.完全就是OLAP的功能的一部分.Palo的demo中,是通过一个Excel 的Plug-in,是excel 支持olap的,不过它不能跨平台,甚至连excel 都跨不出去,
    而birt提供的这个功能更加的强大.而且很容易就能够实现,定制化也比较强(就是说它提供API ,让你自己编程实现这些功能).
    
一下子看到BIRT太多的功能了,希望能够正式发布的时候birt能够比较稳定吧.


没有找到WTP2.0 和 TPTP 4.3 的新功能列表.
其中我只关心在TPTP 4.2.2 Callisto 中的TPTP经常性的Block 的Issue 解决了没有.
同样希望TPTP也能够稳定吧。功能倒是其次. java 中profiler 工具倒是不少,可是大多好的都是商业的,难得有一个这么好的开源的版本,要是bug问题不解决就不好了.

听说eclipse 的SOA 建模工具第一次发布.我倒是不关心,目前还是把精力focus birt上了,觉得eclipse 本身可能已经没有太多新功能发展了,主要就是把plugin 做好,
然后想办法能够解决plugin 之间版本的兼容性问题就够了. 最近也试用了一下NetBean ,没有深入用,还是有点失望的,希望NetBean 的坚定拥护者不要扁我. 字体丑,界面丑
也就算了,但是跑出来吓人就是你的不对了嘛! 丑也就算了,速度也稍微慢一点(我说的是稍微).本来想看一下它的Porfiler 功能怎么样的,后来还是算了,毕竟自己没打算
用.就算是自己没有深入用过,不懂吧,乱说了话,希望不要引起Netbean 支持者的海扁.

最近在collab下载svn 的时候无意中看到了它的svn enterprise 版的.其中有一个是支持eclipse 的 Mylyn 插件的(21个项目其中一个),做项目管理的.不知道eclipse 搞
Mylyn 是不是有打算进入项目管理领域 . 它居然还是2.0版.不知道有哪位用过.

最近使用firefox的时候 ,有时候打开一个网页莫名其妙的就firefox 挂掉了,也不是真的挂了,就是有时候等个2分钟它又好了,有时候firefox整个不见了,但是进程里面
它还在,你点开一个新的firefox  然后两个人就手拉手的都跑出来了. 不知道是不是大家也有遇到过相同情况的. 装了Opera , firefox 挂掉的时候就用Opera , 里面有一个
打电话的功能我觉得倒是非常的有意思,创意呀! 不希望firefox 独大 , 也不希望eclipse 独大 ,更不希望Microsoft 独大 , 同样不希望 Intel 独大(AMD hold on) .
有竞争才能推动发展嘛.

最近在msn 上认识了许多朋友. 有一位跟我聊起了JBoss , 我对JBoss 的认识还停留在JBoss 服务器上.后来听他说才知道JBoss 已经发展了一套完整的J2EE 框架了,包括很多
方面,才恍然大悟 原来现在中间件这么重要. Red Hat 跟exadel 结盟要推新的SOA 工具,好像SOA是很火的,不过还是认为如果公司不是做SOA 的,学SOA 没有什么用.
SOA 要在中国成熟还要很多年的.那时候都不知道是个什么样子了.不过将来一个公司面对使用多种操作系统,多种数据库,多种软件平台,多种编程语言,总会需要一个框架
来解决这些问题的,就算SOA 成功了也好,SOA 失败了也好,需求总是会有的.还是等SOA 成熟了再观望一下吧, 广告看看还可以,要真掏钱出来还是要谨慎的。
纯属个人认识,说的不对还请高手指点.

写的比较杂,就当是看八卦吧.

最近学习Birt ,主要是它的新功能.然后还是准备学会如何在pentaho里面集成 birt 吧.希望能够和birt 爱好者,尤其是高手一起交流.

 

posted @ 2007-06-17 16:33 gemini 阅读(454) | 评论 (0)编辑 收藏

导航

统计

常用链接

留言簿(3)

随笔档案

相册

搜索

最新评论

阅读排行榜

评论排行榜