幾乎在各種應用中,報表都具有其不可替代的作用。各類(lèi)報表軟件也是爭奇斗艷,如今Eclipse也推出了自己的報表框架:BIRT?,F在,讓我們不妨看看它到底提供了什么樣的功能,以及特點(diǎn)是什么。
對于擴展Eclipse的功能,首先當然就是去下載對應的plugin,BIRT也不能例外。BIRT的下載地址:
http://download.eclipse.org/birt/downloads/,當前版本是2.0。BIRT依賴(lài)于Eclipse的其它幾個(gè)plugin(GEF和EMF),由于我使用的是Eclipse WTP(這是Eclipse的WEB開(kāi)發(fā)工具),在這個(gè)工具中那些plugin都已預裝,因此直接下載birt-report-framework-2_0_0.zip就好了。如果沒(méi)有這些plugin,請下載。
下載之后,安裝非常簡(jiǎn)單:只需解壓然后將對應的features和plugins目錄中的內容復制到Eclipse對應的目錄下即可。且慢,這只是完成了對于BIRT的基本安裝。下一步就是去下載BIRT需要的第三方軟件包:
需要的jar文件 復制位置(都在plugins目錄下)
Apache Axis axis.jar
axis-ant.jar
commons-discovery-0.2.jar
jaxrpc.jar
saaj.jar
wsdl4j-1.5.1.jar
org.eclipse.birt.report.viewer_version/birt/WEB-INF/Lib
iText 1.3 itext-1.3.jar org.eclipse.birt.report.engine.emitter.pdf_version/lib
prototype.js v1.4.0 prototype.js v1.4.0 org.eclipse.birt.report.viewer_version/birt/ajax/lib
自此,BIRT的安裝大功告成。啟動(dòng)Eclipse,在"project wizard"中會(huì )出現一個(gè)BIRT的項目類(lèi)型。
在使用之前,了解一些關(guān)于BIRT的基本概念,將會(huì )對使用非常有益:
數據源:數據的來(lái)源,或提供者。如xml數據源、jdbc數據源等。
數據集:數據集合,它必須與數據源關(guān)聯(lián),可以理解為查詢(xún)的結果。
報表以及報表項,報表可視為是針對一組數據集的表現形式,而報表項這是這個(gè)表現形式的某個(gè)具體的單元。它們之間的關(guān)系,與窗體和控件的關(guān)系非常類(lèi)似。報表、數據集、數據源三者間的關(guān)系:數據源 --- 數據集 --- 報表。
報表參數:查詢(xún)參數的表現形式,使用它可以構建更靈活的報表。
模板和庫:主要用于復用報表設計,提高報表開(kāi)發(fā)的效率。
本文中的例子都采用jdbc數據源,這是最常見(jiàn)的使用情形,其中涉及的數據關(guān)系是一個(gè)典型的多對多關(guān)系:
首先,讓我們來(lái)看看一個(gè)"Hello World"級別的應用:"列出所有用戶(hù)",以便可以快速的了解BIRT。為了完成這一任務(wù),我們需要:
A. 通過(guò)項目向導,創(chuàng )建BIRT工程。工程創(chuàng )建完畢之后,顯示BIRT的"報表設計"視圖。由于此時(shí)沒(méi)有報表,其它幾個(gè)視圖,如"數據資源管理器",不可用。
B. 在項目上點(diǎn)鼠標右鍵,選擇:"new -> 報表"。在報表類(lèi)型中,選擇"空白報表"。
C. 創(chuàng )建新報表后,數據視圖可用。在"數據資源管理器"中創(chuàng )建報表所需要的jdbc數據源。根據向導,可以方便的添加jdbc驅動(dòng)、數據庫url、用戶(hù)名和密碼。
D. 在指定的數據源上,創(chuàng )建數據集,這一步完成產(chǎn)生數據集的查詢(xún)。在BIRT中支持2種數據集:基于查詢(xún)語(yǔ)句和基于存儲過(guò)程。在本例中使用前者,對應的查詢(xún)語(yǔ)句是:select user.userid, user.username, user.addr from user。
E. 選擇剛剛創(chuàng )建的數據集,將它拖至空白報表頁(yè)上。BIRT會(huì )自動(dòng)為其創(chuàng )建一個(gè)報表項,此處是"表"。如下圖:
F. 選擇預覽,就可以看到報表運行的實(shí)際結果了?;蛟趫蟊砩宵c(diǎn)擊鼠標右鍵,選擇:"報表 -> 運行報表"。
非常簡(jiǎn)單,一個(gè)顯示所有用戶(hù)信息的報表就完成了。在此基礎之上,讓我們再來(lái)完成一些其它具有挑戰性的任務(wù):
1.格式化:這是一個(gè)內容廣泛的主題,常見(jiàn)的需求:
需求 解決辦法(以上為例)
顯示報表列頭為中文 如:將userid顯示為"用戶(hù)標識"。
選擇"userid",輸入"用戶(hù)標識"。
設置報表外觀(guān) 選擇對應的報表項,通過(guò)"屬性編輯器"調整。
對于報表數據列進(jìn)行處理 如:將userid和username,顯示成:userid:username。雙擊row["userid"],出現"表達式生成器",輸入: row["userid"]+":"+ row["username"]
分頁(yè) 選擇"表":在"屬性編輯器"中,選擇"分頁(yè)符",在"分頁(yè)符間隔"中輸入分頁(yè)大小。
頁(yè)眉和頁(yè)腳 在報表設計頁(yè),選擇"主頁(yè)",在其中設置頁(yè)眉和頁(yè)腳。
2.排序:一種變通的做法是:將數據集排序之后,如在對應的SQL語(yǔ)句中使用order by,再顯示。除此之外,也可以在報表設計時(shí)來(lái)完成:
A. 選擇表,此時(shí)屬性編輯器下方會(huì )出現與表相關(guān)的選擇頁(yè)。
B. 選擇"排序",在對應的頁(yè)面中選擇"添加"按鈕之后,出現:
C. 選擇需要進(jìn)行排序的列,以及排序方式。
3.計算列:通過(guò)"數據集編輯器"來(lái)完成。進(jìn)入"數據集編輯器后",選擇"計算列":輸入對應的"列名稱(chēng)"、"數據類(lèi)型"和"表達式"。
4.報表參數:它為報表的產(chǎn)生帶來(lái)了極大的靈活性。報表參數一定是與含參數的查詢(xún)對應的,否則失去了意義?,F在,將以上需求改為列出"用戶(hù)標識大于某一輸入的所有用戶(hù)":
A. 編輯數據集,修改SQL:select user.userid,user.username,user.addr from user where user.userid>?。
B. 在數據集編輯窗體內選擇"參數",然后輸入對應的"名稱(chēng)"、"數據類(lèi)型"、"方向"和"默認值"(必須給出默認值)。其中"方向"表示"輸入"或"輸出"。對于參數,一般選"輸入"。完畢之后:
C. 在"數據資源管理器"視圖,創(chuàng )建報表參數:"用戶(hù)標識"。
D. 選擇"表",在"屬性編輯器"中選擇"綁定"。此時(shí),會(huì )出現剛才在數據集中定義的參數"id"。在"值"列,選擇報表參數"用戶(hù)標識":
E. 運行報表時(shí),此時(shí)會(huì )出現報表參數的輸入框,填寫(xiě)值后即出現報表結果。
本例雖然只定義了一個(gè)報表參數,但是BIRT并沒(méi)有這樣的限制。我們可以創(chuàng )建多個(gè)參數,做法很簡(jiǎn)單:首先,查詢(xún)有多個(gè)參數;定義數據集的參數時(shí),按照查詢(xún)中參數出現的順序定義;最后,添加需要的報表參數。
5.分組:以上為例:將用戶(hù)按地址分組。
A. 選擇"表",點(diǎn)擊鼠標右鍵,選擇"插入組"。這里有兩個(gè)選擇:"在上面"和"在下面"。
B. 選擇任意一種,彈出分組資料窗體。填寫(xiě)其中的:"名稱(chēng)"和"分組依據"。在本例中,"分組依據"是addr列。
C. 選擇預覽,或運行報表,查看結果。
子報表是另一種最常見(jiàn)的報表,以上為例:列出所有用戶(hù),并列出每個(gè)用戶(hù)所購買(mǎi)的項目,以及項目數。為了完成這種父子關(guān)系的報表,需要:
A. 創(chuàng )建新報表和數據源。
B. 創(chuàng )建數據集user,使用SQL:select user.userid,user.username,user.addr from user。
C. 創(chuàng )建數據集items,使用SQL:
select item.itemid,item.itemdesc,item.price,user_item.count from item,user_item where item.itemid= user_item.itemid and user_item.userid= ?
同時(shí)在數據集items上創(chuàng )建參數user,它對應SQL中的參數。
D. 從"Palette"視圖拖入"列表"到報表中,在"屬性編輯器"的"綁定"頁(yè)中,選擇數據集為user。它用來(lái)顯示主表的信息,在本例中是用戶(hù)信息。
E. 從"Palette"視圖拖入"網(wǎng)格"到"列表"的"明細數據"中,設置網(wǎng)格為1行2列,它用來(lái)存放"用戶(hù)姓名"和"用戶(hù)地址"。在"數據資源管理器"視圖,選擇數據集user,將username和addr分別拖入網(wǎng)格的2列中。
F. 在"數據資源管理器"視圖,選擇數據集items,將它拖入"列表"的"明細數據"中,位于剛剛插入的網(wǎng)格下方。此時(shí),BIRT會(huì )生成數據集items對應的"表"。
G. 選擇剛剛生成的"表",在"屬性編輯器"的"綁定"頁(yè)中,會(huì )出現在items中定義的參數。修改它的值:row["userid"]。于是,父子報表就發(fā)生了聯(lián)系。
H. 選擇預覽,或運行報表,就可以看到結果了。
很遺憾,到目前為止,另一種最常見(jiàn)的報表"交叉表"還不被BIRT支持。但是,BIRT的官方網(wǎng)站已明確表示,將在未來(lái)的版本中支持它。
俗話(huà)說(shuō),"一圖頂千言"。沒(méi)有圖的報表是枯燥,且缺乏表現力的。在本例中,我們將使用圖表來(lái)表示:每個(gè)用戶(hù)的消費總數。
A. 創(chuàng )建新報表和數據源。
B. 創(chuàng )建數據集chart,使用SQL:
select user.username,round(sum(item.price*user_item.count),2) from item, user_item, user where item.itemid= user_item.itemid and user.userid= user_item.userid group by user.username
C. 從"Palette"視圖拖入"圖表"到報表中,此時(shí)會(huì )彈出"編輯圖表"窗體。
D. 在"選擇圖表類(lèi)型"頁(yè),選擇圖表類(lèi)型為"條形圖"。在"選擇數據"頁(yè),使用數據集chart,同時(shí)選中username列,將其拖入"類(lèi)別x系列"。對于統計列,同樣將其拖入"類(lèi)別y系列"。在"圖表格式"頁(yè),分別為x和y系列,填寫(xiě)相應的顯示名稱(chēng)。
E. 選擇預覽,或運行報表,即可看到統計圖表。
可以使用腳本,是BIRT的一大特色。在BIRT中,數據源、數據集和報表項,都可以書(shū)寫(xiě)腳本。具體做法:選擇數據源、數據集和報表項任意一種對象,然后選擇"腳本"頁(yè)面。如選擇數據源user后,對應的腳本輸入頁(yè)面:
選擇對應的事件,然后在下方的腳本輸入框中輸入腳本即可。如對于第一個(gè)例子,我們需要統計用戶(hù)地址是"No.5 St."的用戶(hù)數:
A. 選擇數據集,然后選擇"腳本",進(jìn)入數據集的腳本編輯窗口。
B. 選擇事件"afterOpen",在腳本窗口內輸入:count=0;
C. 選擇事件"onFetch",在腳本窗口內輸入:if( row["addr"]== "No.5 St.") count++;
D. 選擇報表,在腳本窗口選擇事件"onRender",輸入:this.caption=count;
E. 預覽,或運行報表后,會(huì )在報表的標題輸出count的數值。
另外,BIRT也支持使用java來(lái)作為報表項的事件處理程序。具體做法,請參見(jiàn)BIRT的幫助文檔。
除了腳本使開(kāi)發(fā)者可以自定義報表的行為外,BIRT還提供了庫和模板機制來(lái)重用設計,加快報表的開(kāi)發(fā)。在TheServerSide上有一篇相當詳細的文檔:
Using Eclipse BIRT Report Libraries and Templates。
其他公司、產(chǎn)品或服務(wù)的名稱(chēng)可能是其他公司的商標或服務(wù)標志。
關(guān)于 IBM 隱私條約 聯(lián)系 IBM