簡介
Eclipse的商業(yè)智能和報表工具(BIRT)項目是一個基于當今流行的Eclipse IDE的開源項目,用于在Java或者J2EE環(huán)境下構(gòu)建和部署報表。該項目提供的主要下載項中包括以下內(nèi)容:
- BIRT設計器—用來構(gòu)建報表。
- Web查看器—一個用來部署報表的J2EE示例,其中包含了一個JSP標簽庫以降低與現(xiàn)存的web應用的耦合。
- BIRT制圖包—支持構(gòu)建復雜的圖表。
BIRT項目于2005年夏天發(fā)布了第一個主版本并且到目前為止已經(jīng)擁有了超過100萬的下載量。請訪問http://www.eclipse.org/birt來更多地了解BIRT項目,這上面有關于BIRT項目的介紹,指南,下載以及使用的例子。我們將以對BIRT設計器的介紹作為本文的開始,并且以對BIRT查看器的討論作為本文的結(jié)束。其中,BIRT設計器用來進行報表的設計,而BIRT查看器則用來部署設計以及產(chǎn)生最終的報表。
BIRT 2.2 Collage
BIRT設計器
在BIRT的中間位置是由一系列Eclipse插件組成的報表設計器,這些插件構(gòu)成了一個提供拖拽能力以快速設計報表的設計透視圖。報表是以XML格式創(chuàng)建和存儲的。
Figure 1 - Eclipse BIRT Designer
此Eclipse透視圖包含了很多視圖,這些視圖提供了創(chuàng)建報表的功能。我們將在后面對此進行闡述。
報表編輯器
報表編輯器用來構(gòu)建報表并且扮演著一個畫布的角色來定位和格式化報表元素。在該視圖中有很多標簽頁,例如布局,母板頁,腳本,XML源以及預覽。
- 布局標簽頁用來對報表進行可視化布局并且提供了拖拽的功能。
- 母板頁用來設定整個報表的頭,腳以及背景圖片。例如,該頁通常是所有報表頭的位置。
- 腳本標簽頁提供了對JavaScript編輯器的訪問。BIRT支持這樣一種事件模型,在該模型中可以使用Java或者JavaScript來改寫事件處理器。我們可以在報表產(chǎn)生和渲染階段調(diào)用這些事件處理器,并且這些事件處理器還能修改報表屬性,比如改變字體顏色,數(shù)據(jù)值以及調(diào)用外部代碼。
- XML源標簽頁可以顯示XML源代碼用于報表設計。盡管通常情況下最好使用布局視圖,但也可以在此標簽頁中編輯XML代碼。
- 預覽標簽頁允許報表設計者快速地將報表轉(zhuǎn)化為HTML。 注意你也可以利用工具欄以其他被支持的格式來預覽報表。
Figure 2 - BIRT Preview
數(shù)據(jù)瀏覽
在構(gòu)建報表之前,我們通常都要建立數(shù)據(jù)源。BIRT提供了數(shù)據(jù)瀏覽視圖以簡化該任務。
Figure 3 - Data Explorer View
Eclipse視圖允許設計者向報表設計器中添加數(shù)據(jù)源和數(shù)據(jù)集。本質(zhì)上,一個數(shù)據(jù)源僅僅就是數(shù)據(jù)連接。數(shù)據(jù)集可以被理解為一個可執(zhí)行的查詢以及該查詢所返回的特定的列。
BIRT提供了對JDBC,XML,flat file(譯者注:falt file是一個只能連續(xù)的讀寫的計算機文件。它包含一條或多條記錄,每個記錄包含一個或多個字段,http://en.wikipedia.org/wiki/Flat_file)和腳本化的數(shù)據(jù)源的驅(qū)動。隨著BIRT2.2的發(fā)布,BIRT還提供了一個Web Service數(shù)據(jù)源和一個改進的flat file驅(qū)動,現(xiàn)在該驅(qū)動已經(jīng)支持CSV,TSV,SSV以及PSV文件格式。
BIRT還提供了一個叫做聯(lián)合數(shù)據(jù)集(Joint Data Set )的特殊數(shù)據(jù)集以使用內(nèi)外連接來整合現(xiàn)存的數(shù)據(jù)集。當從不同的數(shù)據(jù)源中整合數(shù)據(jù)集時該特性的作用就顯得尤為明顯。除此之外,現(xiàn)在BIRT數(shù)據(jù)源具備導入或者鏈接本地連接配置文件的能力以此來達到跨報表的連接共享的目的。
在增加報表參數(shù)和數(shù)據(jù)體時我們也會使用數(shù)據(jù)瀏覽視圖。報表參數(shù)將呈現(xiàn)給報表的最終用戶并且經(jīng)常用來為特定的用戶進行報表的個性化定制。例如:報表參數(shù)可以依賴數(shù)據(jù)集參數(shù)來修改查詢,我們可以在BIRT的JavaScript表達式中用此來改變報表元素的樣式和可見性,或者在腳本事件中基于選擇的輸出格式來定制內(nèi)容。
報表參數(shù)可以是靜態(tài)或者動態(tài)的。靜態(tài)參數(shù)允許用戶選擇預先定義好的值集或者在文本框中輸入一個值。動態(tài)參數(shù)可以是綁定到現(xiàn)存的BIRT數(shù)據(jù)集的一些數(shù)據(jù)。例如,用戶可以從一個數(shù)據(jù)集提供的客戶列表中選擇一個客戶。
此外,BIRT支持級聯(lián)參數(shù),它可以顯示多個下拉列表,并且一個下拉列表顯示的內(nèi)容會隨著前一個列表的內(nèi)容的改變而動態(tài)改變。例如,一個級聯(lián)參數(shù)可以在第一個列表中顯示客戶列表,在第二個列表中顯示選中客戶的訂單。
Figure 4 - Cascaded Parameter
現(xiàn)在BIRT2.2的動態(tài)參數(shù)可以支持使用JavaScript表達式來顯示文本和參數(shù)值。這個改進使得參數(shù)列表以一種更符合邏輯的方式呈現(xiàn)給最終用戶。例如,在開發(fā)一個詳細訂單的報表時,你可能希望展示一個所有訂單的動態(tài)參數(shù)列表。表達式使得你可以為每個訂單增加相應的客戶姓名。圖5顯示了一個動態(tài)參數(shù)列表。

Figure 5 - Dynamic Parameter Expression
數(shù)據(jù)瀏覽視圖也支持數(shù)據(jù)體的創(chuàng)建。這是BIRT2.2的新特性,且與新的交叉報表元素聯(lián)合使用。BIRT數(shù)據(jù)體是多維的,基于一個或多個BIRT數(shù)據(jù)集,使用新的跨標簽數(shù)據(jù)立方構(gòu)建器(Cross Tab Cube Builder)來構(gòu)建的。請參見下面的圖表。

Figure 6 - Cross Tab Cube Builder
除了上面提到的特性,BIRT現(xiàn)在提供兩個新的項目類型使得Java開發(fā)者可以創(chuàng)建更多的數(shù)據(jù)源。這些數(shù)據(jù)源基于Open Data Access(ODA)框架,該框架由Eclipse Data Tools Platform(DTP)項目提供。我們構(gòu)建圖形界面時需要使用ODA設計器插件,該插件是報表開發(fā)者使用相應的驅(qū)動時所需要的。當開發(fā)你自己驅(qū)動的運行時部分時,需要利用ODA運行時驅(qū)動的插件項目。該插件通常部署在一個運行時環(huán)境中,主要負責處理對數(shù)據(jù)源的調(diào)用和結(jié)果的獲取。

Figure 7 - BIRT Projects
調(diào)色板
BIRT調(diào)色板視圖用來向報表畫布中添加報表條目。調(diào)色板視圖包含了一些報表元素,這些元素用來顯示從數(shù)據(jù)瀏覽視圖中獲得的數(shù)據(jù)。僅僅是簡單地從調(diào)色板視圖中拖拽報表到報表編輯器中就可以使用該報表了。BIRT報表元素支持所有可在屬性編輯器視圖中配置且可被BIRT的報表對象模型(Report Object Model)描述的屬性。

Figure 8 - Palette View
調(diào)色板支持以下報表項
- 標簽元素用來顯示靜態(tài)文本。像大多數(shù)報表元素一樣,我們可以改變文本的外觀以支持本地化,同時也可以設置超鏈接,字體大小和高亮等屬性。
- 文本元素與標簽很相似,不過具有更多的屬性:可以顯示多行,格式化良好的HTML。利用BIRT的表達式構(gòu)建器我們可以將現(xiàn)存的數(shù)據(jù)集的值,參數(shù),JavaScript函數(shù)以及BIRT特有的函數(shù)注入到格式化的HTML中。通過使用標簽,文本元素還可以用于創(chuàng)建可在客戶端執(zhí)行的腳本。
- 動態(tài)文本元素經(jīng)常用來顯示CLOB數(shù)據(jù)類型值。這些值也可以利用BIRT的表達式構(gòu)建器與其他數(shù)據(jù)聯(lián)合使用。
- 數(shù)據(jù)元素是用來顯示來自數(shù)據(jù)源的值的基本元素。可以利用表達式構(gòu)建器改變和操縱數(shù)據(jù)值。例如,如果一個數(shù)據(jù)集具有一個叫做first name的列,還有一個叫做last name的列,那么你可以利用表達式構(gòu)建器將二者連接起來組成一個新的數(shù)據(jù)元素。
dataSetRow["contactLastName"] + ", " + dataSetRow["contactFirstName"]
- 圖片元素用來管理報表中輸出圖片。BIRT支持獲取URI中的圖片以及嵌入在設計器中的圖片,來自數(shù)據(jù)源的動態(tài)圖片(BLOB)以及文件夾中的圖片文件。
- 網(wǎng)格元素作為其他報表元素的容器,以一種合乎邏輯的方式來定位元素位置。網(wǎng)格元素被配置為表格格式。例如,如果你的報表顯示產(chǎn)品銷量情況,而你想在表格的右側(cè)增加一個圖表,那么你就可以增加一個一行兩列的網(wǎng)格元素來完成這個任務。
- 列表元素也是作為其他元素的容器。列表不同于其他容器型元素的地方在于列表會迭代綁定到其上的數(shù)據(jù)集。默認的列表元素有一個頭,一個尾和細節(jié)部分。當渲染列表時,頭和尾通常只顯示一次,而綁定到列表的數(shù)據(jù)集的每一行的細節(jié)部分都要顯示。在細節(jié)部分中可以包含文本元素或者其他的容器型元素,例如網(wǎng)格,表格或者另一個列表。
- 表格元素與列表元素很相似,因為他們都是容器元素并且都會迭代綁定到其上的數(shù)據(jù)集,但是表格元素是以平面列表方式展現(xiàn)的。表格元素的布局很像HTML的表格一樣。表格元素有頭,尾和細節(jié)部分以及列。
- 聚合元素是BIRT2.2新加入的元素類型,其利用新的聚合構(gòu)建器來向報表中增加聚合元素。該聚合構(gòu)建器提供了超過25種不同的函數(shù),例如SUM,MIN,MAX和AVERAGE。

Figure 9 - Aggregation element
- 圖表元素允許向報表設計器中插入圖表。當一個圖表元素被置于報表編輯器中時,圖表構(gòu)建器向?qū)詣映霈F(xiàn)。該向?qū)в脕碓O計圖表并提供三個設計標簽頁(選擇圖表類型,選擇數(shù)據(jù)和選擇圖表格式)。BIRT2.2提供了13種圖表類型以及很多子類型的組合。圖表構(gòu)建器提供了拖放,圖表預覽,數(shù)據(jù)過濾和參數(shù)化等功能。圖表元素可以以PNG,JPG,BMP和SVG的輸出格式呈現(xiàn),并且這些輸出格式支持鉆透(drilling through ),高亮(highlighting),開關可視化(toggling visibility)以及客戶端腳本(client side script)。

Figure 10 - Chart Wizard
- 跨標簽元素也是BIRT2.2中新出現(xiàn)的元素,用來顯示BIRT數(shù)據(jù)體中的數(shù)據(jù)。在BIRT以前的版本中,表格元素中列的數(shù)量在設計時就要確定好,而在跨標簽元素的幫助下,列和行的數(shù)量都可以動態(tài)生成。該元素也支持等級聚合和數(shù)據(jù)顯示,允許三維的行和列并且會測量數(shù)據(jù)以便使其顯示在恰當?shù)慕徊纥c上。

Figure 11 - BIRT Cross Tab element
庫資源管理器
庫資源管理器視圖具有拖放功能,使得用戶可以從現(xiàn)存的報表庫中拖放組件到當前報表中。 BIRT中的庫是一些可被其他報表使用的高效報表XML片段。這些庫被使用它們的報表所引用,這意味著庫的改動會自動地反映到所有使用它們的報表中去。一個很好的示例是使用一個報表庫存儲公司標識(logo)。如果公司標識改變了,只需要更新庫就可以了,而不用更新引用它的報表。庫被引用的位置是相對于資源文件夾的,在設計階段通過設計器,在運行階段通過Web查看器都可以配置該資源文件夾。

Figure 12 - Library Explorer
屬性編輯器
屬性編輯器視圖用來對增加到報表上的報表元素設置屬性。視圖中顯示何種條目將決定于報表編輯器中所選的元素類型。屬性窗口中顯示一些通用設置,例如樣式,寬度和字體信息。此外,大多數(shù)報表元素支持可視化的屬性設置,這樣就可以動態(tài)地隱藏內(nèi)容了。在屬性標簽的右側(cè),視圖具有如下特性:排序,分組,映射,高亮和過濾頁。
大多數(shù)功能都是自說明的,映射標簽頁允許動態(tài)構(gòu)建(使用表達式構(gòu)建器),以使得報表元素的顯示值可以動態(tài)改變。例如,如果月份行的值是“1”,你可能想顯示“January”。高亮標簽頁根據(jù)條件來動態(tài)地應用不同的樣式,例如以紅色來顯示低銷售量。大多數(shù)功能都允許在一個條目上應用多個條件或者關鍵字。一個條件可能改變字體顏色,而另一個條件可能改變字體大小。一個排序關鍵字可以按字母順序列出結(jié)果,而另一個排序關鍵字卻將“Jones”放在列表的最上面。

Figure 13 - Property Editor
此外,在BIRT2.2中,當使用高亮時,報表開發(fā)者可以指定樣式而不必手動地去設置樣式屬性。

Figure 14 - Style Highlighting
大綱
大綱視圖展示了報表設計的圖形化繼承體系,同時說明了報表元素與容器的關系。我們可以直接在大綱視圖中選擇報表元素,當報表設計非常復雜時,這個功能非常有用。此外,在BIRT2.2中,大綱視圖可用來導入或者鏈接外部樣式,也可用來查看實現(xiàn)了腳本事件處理器的報表元素。

Figure 15 - Outline View
導入一個樣式表會將該樣式表的值復制到報表XML中。使用一個外部樣式表允許你鏈接到BIRT資源文件夾中的樣式表。
更多特性
BIRT2.2還提供了兩個新視圖。一個視圖顯示example報表,另一個視圖顯示example圖表并且提供了Java代碼以產(chǎn)生圖表。當在Java應用中使用圖表引擎時會使用到該視圖。

Figure 16 - Example Views
Eclipse BIRT Web查看器
一旦報表開發(fā)完成了,我們就可以使用BIRT的example Web查看器部署它們。在BIRT2.2中該查看器已經(jīng)得到了改進,它是一個基于AJAX的J2EE應用,說明了如何使用BIRT引擎來產(chǎn)生和渲染報表內(nèi)容。
Web查看器概覽
Web查看器可用來產(chǎn)生和渲染報表,同時也支持更多的交互性特征,例如內(nèi)容表格,以多種格式導出報表內(nèi)容,客戶端和服務器端打印以及報表分頁。利用查看器導航和工具欄使得這些特征成為可能。下圖展示了使用查看器的一個示例。

Figure 17 - Example Web Viewer

Toolbar
查看器的工具欄有很多圖標,他們可以完成內(nèi)容表格的顯示,重新運行報表,導出數(shù)據(jù),以多種格式導出報表以及客戶端和服務器端打印等任務。一個內(nèi)容表格是基于報表設計而自動產(chǎn)生的。通過修改報表的分組片段可以定制內(nèi)容表格。要從example查看器中訪問內(nèi)容表格,請選擇該圖標

Figure 18 - Example Table of Contents


Figure 19 - Example report parameter dialog containing cascaded parameter
一個改進的數(shù)據(jù)導出對話框在BIRT2.2中首次出現(xiàn)。可以通過圖標激活該對話框。

Figure 20 - Example Export Data Dialog
結(jié)果集被顯示在一個下拉列表中,該下拉列表包含了報表中所有數(shù)據(jù)綁定控件。這些結(jié)果集并不是BIRT的數(shù)據(jù)集,但卻包含了數(shù)據(jù)容器中綁定的列,而該數(shù)據(jù)容器中的數(shù)據(jù)則來自于一個數(shù)據(jù)集。這些可用的列顯示在左邊的列表框中,而對話框控制著這些列的導出。數(shù)據(jù)導出分隔符也已經(jīng)得到了改進以支持更多的分隔符,例如制表符,分號,冒號,垂直線。此外,數(shù)據(jù)可以用用戶指定的編碼導出。
查看器同樣支持以多種格式導出報表。利用導出報表對話框就可以完成報表的導出,我們可以通過選擇圖標來訪問該對話框。

Figure 21 - Example Export Report Dialog
該對話框允許報表用戶將報表導出為Word,PowerPoint,PDF,PostScript和XLS 格式。此外,用戶可以選擇導出所有頁面或者指定范圍的頁面。
BIRT中的客戶端打印是在example查看器中完成的,這是通過用戶選擇圖標將報表轉(zhuǎn)換為PDF格式實現(xiàn)的。用戶可以利用標準的PDF功能打印或者保存報表。

Figure 22 - Client Print Example
BIRT2.2的example查看器也提供了服務器端打印功能。該特性可以通過在web.xml中做如下設置而禁用。
<context-param>
<param-name>BIRT_VIEWER_PRINT_SERVERSIDE</param-name>
<param-value>OFF</param-value>
</context-param>
可以通過選擇圖標來訪問服務器端打印功能。

Figure 23 - Example Server Side Print Dialog
該對話框?qū)⒘谐隹捎玫姆掌鞫舜蛴C以及影響打印結(jié)果的各種設置

Viewer Navigation Bar
當顯示一個多頁的報表時我們將使用查看器導航條。分頁是由報表元素和分組的分頁符屬性來決定的。這些屬性就像使用前后分頁符或者分頁符間隔那樣簡單,而分頁符間隔則指定了將一個分頁符插入到產(chǎn)生的HTML中之前一個容器元素要處理多少行。當通過Servlet映射來使用查看器時,其默認行為是加載首頁且使得導航條控件可用。導航條包含了可以向前向后或者直接定位頁面的控件。
Web查看器部署向?qū)?nbsp;
利用Web Tools Platform項目(WTP)的一部分,BIRT2.2現(xiàn)在可以支持Web項目。該項目類型會將example查看器自動部署到你所選擇的應用服務器中。此外,新的BIRT標簽庫也會被部署進去。通過新建項目,在Business Intelligence and Reporting Tools類別下面選擇Web項目,我們可以使用該項目類型。

Figure 24 - Web Project
Web查看器標簽庫
現(xiàn)在Web查看器包含了一個標簽庫,該標簽庫可被用來定制查看器的行為。我們可以通過兩種方式部署該標簽庫,其一是按照通常方式部署查看器;其二是利用BIRT的Web項目部署向?qū)А4送猓绻阆雽IRT部署在一個上下文中,并且將標簽庫放置在一個單獨的上下文中,你可以通過復制birt.tld到你的WEB-INF\tlds目錄下并且從查看器庫目錄中復制coreapi.jar,modelapi.jar,viewerservlets.jar和com.ibm.icu_3.6.1v20070417.jar到目錄:新上下文/web-inf/lib下來實現(xiàn)。將下面的代碼添加到你的web.xml文件中:
<jsp-config>
<taglib>
<taglib-uri>/birt.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/birt.tld</taglib-location>
</taglib>
</jsp-config>
在這種方式下,報表將通過BIRT查看器被引用,而不是新的上下文。
查看器標簽庫包含5個標簽:param,paramDef,parameterPage,report和viewer。每個標簽都有多個屬性來控制查看器的行為。
Figure 25 - BIRT Tag Library
結(jié)論
這篇文章介紹了BIRT2.2的一些新特性。請訪問BIRT的網(wǎng)站和BIRT 新聞組 來了解更多信息。
查看英文原文:An Introduction to the Eclipse Business Intelligence and Reporting Tools
譯者簡介:張龍,同濟大學軟件工程碩士,現(xiàn)就職于理光軟件研究所。主要從事文檔工作流和辦公自動化解決方案的研發(fā)工作。熱衷于Java輕量級框架的研究,對敏捷方法很感興趣。曾有若干年的J2EE培訓講師經(jīng)歷。參與InfoQ中文站內(nèi)容建設,請郵件至china-editorial@infoq.com。
返回頂部
en
2008年1月31日 下午8時19分 發(fā)表人 avatar blogbin
birt使用有一段時間,碰到的主要問題是參數(shù)多值傳遞和交叉表,其它方面感覺蠻好的
回復
返回頂部
Re: 迷途的狼
2008年2月17日 下午7時39分 發(fā)表人 jack wan
感覺比以前的功能要強大很多了,有時間看看
回復
返回頂部
Birt報表能否實現(xiàn)訂制
2008年4月7日 下午9時10分 發(fā)表人 帥 曾
我希望用birt設計出幾個模版然后讓用戶去自己選哪個表的哪個字段最后形成一張報表,不知道birt是否能實現(xiàn),希望有經(jīng)驗的朋友幫幫忙!