雙子星座

           

          2007年6月2日

          商業智能需要站在全局角度考慮問題

          首先看一下下面這個表樣.這個表樣是潤乾的一個示例表樣,接著介紹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 閱讀(385) | 評論 (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 閱讀(449) | 評論 (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 閱讀(461) | 評論 (0)編輯 收藏

          商業智能研究(十七) Mondrian 如何使用 materialized view

               摘要:   閱讀全文

          posted @ 2007-06-10 19:02 gemini 閱讀(540) | 評論 (0)編輯 收藏

          商業智能研究(十六)materialized view+dimension提高mondrian性能(二)

               摘要:   閱讀全文

          posted @ 2007-06-10 18:58 gemini 閱讀(470) | 評論 (0)編輯 收藏

          商業智能研究(十五) materialized view+dimension提高mondrian性能

               摘要:   閱讀全文

          posted @ 2007-06-10 18:57 gemini 閱讀(512) | 評論 (0)編輯 收藏

          商業智能研究(十四) mondrian + oracle 部署foodmart demo

               摘要:   閱讀全文

          posted @ 2007-06-10 18:56 gemini 閱讀(1167) | 評論 (0)編輯 收藏

          商業智能研究 (十三) oracle warehouse 一些基本概念

               摘要:   閱讀全文

          posted @ 2007-06-09 21:54 gemini 閱讀(622) | 評論 (0)編輯 收藏

          在tomcat上部署pentaho 1.5.3

          最近一直在做mondrian的foodmart的實驗,有位朋友的公司要部署一個pentaho的demo來做演示,我跟他說直接運行demo就可以 了,但是他們公司非要自己從頭配一個,所以我就自己做了一下實驗基于最新的1.5.3的,其實步驟都差不多,其他版本也應該可以,希望能給喜歡 pentaho的朋友一點幫助。

          1 . 首先需要下載pentaho-j2ee-deployment- , pentaho-data- 和 pentaho-solution- 三個包,分別解壓到三個不同的地方
          2 . 從命令行進入pentaho-j2ee-deployment 目錄,運行ant -p 會列出所有的ant 任務,執行war-pentaho-tomcat-hypersonic任務,成功之后會生成4個war包,pentaho-portal- layout.war , pentaho-style.war 和 sw-style.war ,(sw-style.war 是steel-wheel-style ,是可選項,可能是pentaho的一個例子或者是pentaho的一種style風格),還有多出一個tomcat目錄下的hsqldb目錄下有一個 pentaho.war ,如果你執行的是war-pentaho-mysql就是在tomcat目錄下有個mysql5目錄,里面一樣是pentaho.war.我選用的是 hsqldb .
          3 . 在你的tomcat的安裝目錄下找到conf / server.xml 文件,在其中的host 元素下加上如下這一段,這一段是從pentaho的文檔里面抄來的,manual-deployment-pentaho- ,其中它列出來的有些多余,這個文檔應該使用confluence 用pdf 方式導出的,抄的時候注意檢查一下xml 元素排版上的問題.它列出的resource 元素太多了,你查看pentaho-data- 包里面,應該只有四個數據庫hibernate,sampledata,shark,quartz ,把不用的resource元素都刪掉,(應該是最上面的四個).如果你的tomcat啟動不了了,檢查一下你添加的部分是不是有錯。


           1 
           2 <Context path="/pentaho" docbase="webapps/pentaho/">
           3     <Resource name="jdbc/SampleData" auth="Container"
           4         type="javax.sql.DataSource" maxActive="20" maxIdle="5" maxWait="10000"
           5         username="pentaho_user" password="password"
           6         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
           7         driverClassName="org.hsqldb.jdbcDriver"
           8         url="jdbc:hsqldb:hsql://localhost/sampledata" />
           9     <Resource name="jdbc/Hibernate" auth="Container"
          10         type="javax.sql.DataSource"
          11         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
          12         maxActive="20" maxIdle="5" maxWait="10000" username="hibuser"
          13         password="password" driverClassName="org.hsqldb.jdbcDriver"
          14         url="jdbc:hsqldb:hsql://localhost/hibernate" />
          15     <Resource name="jdbc/Quartz" auth="Container"
          16         type="javax.sql.DataSource"
          17         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
          18         maxActive="20" maxIdle="5" maxWait="10000" username="pentaho_user"
          19         password="password" driverClassName="org.hsqldb.jdbcDriver"
          20         url="jdbc:hsqldb:hsql://localhost/quartz" />
          21     <Resource name="jdbc/Shark" auth="Container"
          22         type="javax.sql.DataSource"
          23         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
          24         maxActive="20" maxIdle="5" maxWait="10000" username="sa" password=""
          25         driverClassName="org.hsqldb.jdbcDriver"
          26         url="jdbc:hsqldb:hsql://localhost/shark" />
          27 </Context>
          28 



          4 . 把pentaho.war copy到tomcat 的webapps目錄下,它會自動解壓的,然后關閉tomcat , 找到pentaho/WEB-INF/web.xml 文件,找到solution-path元素,指向你解壓后的pentaho-solution- 目錄,注意java里面是用正斜杠 / ,如果你從windows的地址欄copy的話注意把反斜杠改一下.
          5 . 修改pentaho/WEB-INF/classes 目錄下的log4j.xml文件,把   里面的value改成INFO,或者更高,這一步是可選項,主要是啟動的時候出現很多不必要的debug 信息.如果你啟動的時候出錯了,再改回來。(一般都是solution-path沒有找對,我用7-zip解壓的時候老是解壓到一個新的目錄,所以后來指 定 solution-path 的時候,目錄地址高了一級.)
          6 . 啟動pentaho-data- 目錄里面的hsqldb數據庫.
          7 . 這個時候啟動tomcat ,應該是不報任何錯誤的.你把瀏覽器指向http://localhost:8080/pentaho ,會看到pentaho的界面的,只不過是沒有什么顏色的那種.
          8 . 把編譯後的三個war文件copy到tomcat 的webapps目錄下,等它們自動解壓之后,再進去看,發現有了樣式了。安裝就完成了.

          貼幾張圖:
          pentaho成功啟動后應該有 Pentaho BI 平臺服務器就緒 這句話.


          安裝了style 和 portal 包之后的登錄界面


          在pentaho-data- 目錄的lib 目錄下執行java -cp hsqldb.jar org.hsqldb.util.DatabaseManager  出現的hsqldb 的manager 登錄畫面
          用戶名和密碼都在相應目錄的數據庫文件里面,hsqldb的數據庫文件是可以用
          文本編輯器打開的,搜索password就可以找到用戶名和密碼了


          sampledata 里面的數據




          我在安裝的時候也碰到了諸多的問題,
          1 . 一開始編譯的時候使用的ant war-pentaho-tomcat 任務,它直接報錯,說找不到rdbms目錄,后來猜想這個任務應該是留給其他數據庫編譯的時候擴展的.直接就換了war-pentaho-tomcat- hypersonic 任務重新編譯了一次
          2 . 后來從文檔里copy出數據源的那句話出錯了,導致tomcat啟動不了,因為從pdf文件copy的那段話排版有問題,后來把它粘貼到eclipse (裝了WTP插件的)里面,一格式化就看出來了,context 元素和后面的屬性path中間的空格沒了,還有多出來了幾個resource元素.
          3 . 指定solution-path的時候目錄高了一級.
          4 . 啟動tomcat的時候出現了很多不必要的debug信息,修改log4j文件就可以了,它在tomcat/bin 目錄下還會生成幾個log文件,像是server.log 和ReportEngine_.log 文件。


          寫這篇文章的目的更多的是希望喜歡pentaho的朋友在用pentaho做實驗的時候能夠學會思考,出現了問題先在網上找資料,而不是無論遇到什么問題都求別人來回答你,知識是長期積累的過程,新技術總是不斷的出現,比如最近火的不得了的JavaFX,
          也許將來pentaho可能會用JavaFX 來做OLAP 和 DashBoard 也不一定的 。關鍵還是要掌握學習的方法,學會思考問題 . 我安裝的時候也遇到了很多問題,但是只要你細細的分析問題的原因,總是可以找出解決的辦法的.

          posted @ 2007-06-02 18:07 gemini 閱讀(538) | 評論 (0)編輯 收藏

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙州县| 儋州市| 广西| 朝阳县| 金坛市| 临朐县| 泸西县| 五峰| 三都| 黔南| 文水县| 平定县| 古交市| 伊金霍洛旗| 资中县| 浦县| 衡阳市| 六安市| 古交市| 阿瓦提县| 贵定县| 绥宁县| 齐河县| 旅游| 雅安市| 佛冈县| 卓资县| 定日县| 万载县| 米林县| 阜新市| 文昌市| 乌什县| 濮阳市| 伊通| 英超| 固阳县| 瓦房店市| 文山县| 城固县| 措勤县|