張歡
(中海油研究總院有限責任公司 北京市 100028)
石油天然氣儲量是石油企業(yè)的核心資產(chǎn),儲量報表的設(shè)計和應(yīng)用顯得尤為重要。公司使用的上市儲量評估專業(yè)軟件是一套根據(jù)國際石油公司儲量資產(chǎn)化管理的需求,利用Java語言設(shè)計開發(fā)的油氣儲量資產(chǎn)評估與管理系統(tǒng),主要用于油氣儲量計算、儲量資產(chǎn)評估和儲量管理。上市儲量報表是要將儲量計算和評估的多個成果數(shù)項混合顯示在單個報表中,有的數(shù)據(jù)項是單個字符串,有的數(shù)據(jù)項是字符集(一定年限中各年度的數(shù)據(jù))。上市儲量報表數(shù)據(jù)項的邏輯結(jié)構(gòu)和層級比較簡單,但是數(shù)據(jù)項多,還涉及到數(shù)據(jù)對象的單位轉(zhuǎn)換問題,實現(xiàn)起來比較復(fù)雜。上市儲量評估專業(yè)軟件之前使用Actuate報表開發(fā)工具。該報表工具設(shè)計開發(fā)比較困難,在數(shù)據(jù)顯示上也有一些不足。而BIRT報表具有很好的國際化支持,可以很方便地在一個報表中混合展現(xiàn)概要數(shù)據(jù)和詳細數(shù)據(jù),容易和應(yīng)用系統(tǒng)集成結(jié)合等優(yōu)點,非常適合設(shè)計和生成上市儲量報表。
BIRT(Business Intelligence and Reporting Tool)是Eclipse平臺的商業(yè)智能和報表工具項目,它是一個基于開放源代碼的報表系統(tǒng),主要用在基于Java,J2EE的Web應(yīng)用程序上。BIRT報表基于Eclipse的開源報表工具,開發(fā)環(huán)境與Eclipse的天然結(jié)合非常適合程序員使用。BIRT非常容易集成,引入相應(yīng)TLD(標簽庫)和JAR包就能搞定,十分方便。同時擁有和Dreamweaver一般的操作界面,可以像畫table一樣畫報表,生成圖片,導出word,html分頁樣樣齊全,樣式和script設(shè)置簡單。上市儲量評估系統(tǒng)是一個基于Java的C/S應(yīng)用程序。BIRT給上市儲量評估系統(tǒng)創(chuàng)建美觀實用的PDF、XLSX、DOCX、PPTX等格式的報表插件。
上市儲量評估系統(tǒng)主要包括儲量評估和經(jīng)濟評價兩大功能。上市儲量報表集中展示這兩項功能的成果數(shù)據(jù)。上市儲量評估系統(tǒng)是C/S架構(gòu),采用的是典型的MVC框架。M是指業(yè)務(wù)模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計數(shù)據(jù)可以分別用不同的BIRT報表來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。整體的系統(tǒng)架構(gòu)圖如圖1所示,系統(tǒng)主要有表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)服務(wù)層組成。在表示層中,用戶在統(tǒng)一入口開展所有的業(yè)務(wù)研究工作,包括油藏儲量計算、氣藏儲量計算、經(jīng)濟評價等,計算結(jié)果按照單一資產(chǎn)輸出和多資產(chǎn)匯總展示BIRT報表。在業(yè)務(wù)邏輯層中,基于Eclipse定制BIRT報表模板,采用基于MVC模式的請求轉(zhuǎn)發(fā),決定訪問的目標,應(yīng)用程序接受普通業(yè)務(wù)處理。在數(shù)據(jù)服務(wù)層按照BIRT報表格式要求建立數(shù)據(jù)規(guī)范,提供統(tǒng)一的數(shù)交換接口。
圖1:系統(tǒng)架構(gòu)圖
在設(shè)計報表時,首先需要確定報表的數(shù)據(jù)源。BIRT報表支持定義不同類型的數(shù)據(jù)源,如JDBC數(shù)據(jù)源、平面文件數(shù)據(jù)源、XML數(shù)據(jù)源、腳本化數(shù)據(jù)源、POJO數(shù)據(jù)源等。數(shù)據(jù)庫中的數(shù)據(jù)通常是企業(yè)報表的最主要的來源,因此BIRT最常用的數(shù)據(jù)源是JDBC數(shù)據(jù)源。而上市儲量評估系統(tǒng)根據(jù)系統(tǒng)的實際架構(gòu),選擇使用POJO數(shù)據(jù)源。
POJO(Plain Old Java Object)是指簡單java對象。POJO的內(nèi)在含義是指那些沒有從任何類繼承、也沒有實現(xiàn)任何接口,更沒有被其它框架侵入的java對象。簡單理解為不包含業(yè)務(wù)邏輯的單純用來存儲數(shù)據(jù)的 java類,一般POJO沒有實現(xiàn)任何接口,沒有集成任何父類(java.lang.Object除外)。對于對JAVA語言不熟悉的,可能比較難以理解POJO對象。在上市儲量評估系統(tǒng)中,POJO對象指的是系統(tǒng)中定義的變量,包括基礎(chǔ)變量和過程變量,都能作為POJO對象進行輸出。
在用戶界面定義并錄入了儲量評估和儲量計算的基礎(chǔ)數(shù)據(jù),同時能夠記錄經(jīng)過業(yè)務(wù)模型運算后形成的結(jié)果數(shù)據(jù)。基礎(chǔ)數(shù)據(jù)包括評估單位、評估日期、稅率、儲量級別、儲量狀態(tài)等單個字符串的變量,同時包括油價、毛產(chǎn)量、費用、費率等字符集數(shù)據(jù)。在業(yè)務(wù)模型部分基于產(chǎn)量遞減法、數(shù)模法的方法編寫了產(chǎn)量預(yù)測模型,同時按照既定規(guī)則編寫了自營油氣田和合作油氣田經(jīng)濟評價模型。控制器利用基礎(chǔ)數(shù)據(jù)來運行業(yè)務(wù)模型,最終得到出儲量評估和經(jīng)濟評價的結(jié)果數(shù)據(jù)。在上市儲量評估系統(tǒng)中,基礎(chǔ)數(shù)據(jù)項、計算后的結(jié)果數(shù)據(jù)項、以及計算過程中的數(shù)據(jù)項,都可以視為POJO對象,能夠在BIRT報表中輸出。
與用戶打交道的是報表定制層,因此定制層的質(zhì)量直接決定了用戶的體驗。上市儲量評估系統(tǒng)包括研究項目的建立、資產(chǎn)管理單元的建立、數(shù)據(jù)的導入導出和備份、儲量評估參數(shù)的錄入、儲量圖形分析工具的運用、評估模型的的運行、評估結(jié)果的預(yù)覽和打印。資產(chǎn)建立遵循:油氣田、開發(fā)狀態(tài)、預(yù)測單元三級的原則。根據(jù)SEC相關(guān)要求,信息單包含了油氣田及其各狀態(tài)的總產(chǎn)量、凈產(chǎn)量、價格、公司未來總收入、產(chǎn)品稅、成本項、稅前未來凈現(xiàn)金流等關(guān)鍵分年數(shù)據(jù)。報表主要包括兩種模板類型,general類型和summary類型,分別對應(yīng)單一資產(chǎn)報表和多資產(chǎn)匯總報表。
在general類型報表模板中,是單個油田或者分狀態(tài)的資產(chǎn)的相關(guān)數(shù)據(jù)項在報表中輸出。數(shù)據(jù)項包括單個的字符串以及字符集。因此,需要建立兩個數(shù)據(jù)集合(SingleData和TableData),分別用以存儲各種類型的字符串和字符集。確定好了報表的模板類型后,下一步需要構(gòu)建報表的框架布局,大部分的布局都可以直接使用Eclipse的table組件來組合實現(xiàn)。Eclipse提供的屬性也很豐富,能夠規(guī)范報表中數(shù)據(jù)項的顯示。接下來需要根據(jù)報表的數(shù)據(jù)項導入儲量評估系統(tǒng)中的POJO對象。導入的功能類就是寫在引入的JAR包中。導入的POJO對象包括三類:常量對象,比如年度信息(使用getDate()函數(shù));單個字符串對象,包括中方權(quán)益、縮水系數(shù)、經(jīng)濟年限、棄置費等,使用getValue()函數(shù);分年的字符集:比如2021年至2035的原油總產(chǎn)量、凈產(chǎn)量、稅費、成本、稅前凈現(xiàn)金流等,使用getStreamValue()函數(shù)。掌握好三類導入函數(shù)的使用,基本掌握額general類型報表的定制。導入POJO對象后,可以很方便的將相關(guān)對象拖入模板中相應(yīng)的位置即可。接下來,需要設(shè)置模板數(shù)據(jù)項的屬性,包括字符長度,字體、保留小數(shù)位數(shù)等。最后,在軟件環(huán)境中測試,檢查生成的報表是否符合預(yù)期要求。
選擇合適模板,建立框架,匹配POJO對象,測試完成后,報表顯示的數(shù)據(jù)還缺少有效的單位。作為一個企業(yè)集的應(yīng)用,數(shù)據(jù)項的單位統(tǒng)一以及轉(zhuǎn)換不可缺少。比如在儲量評估系統(tǒng)中原油凈產(chǎn)量的單位是噸,BIRT報表中要求原油凈產(chǎn)量統(tǒng)一顯示為桶。這就需要在報表生成時,需要有一個單位轉(zhuǎn)換的過程。作為專業(yè)軟件,系統(tǒng)中已有單位轉(zhuǎn)換的功能函數(shù),在導入POJO對象時調(diào)用相關(guān)功能函數(shù)即可。
Summary類型報表比General類型更加復(fù)雜,本質(zhì)是將多個資產(chǎn)的數(shù)據(jù)顯示在同一個表單中,每個資產(chǎn)占用一行或多行數(shù)據(jù)(單一字符串或分年的字符集)。不同于General類型,布局時可僅使用Table組件進行組合。Summary類型報表需要在Table中插入一個Group組件,同時增加一個Group字符集。將導入的POJO對象拖入Group組件的相應(yīng)方框后,同時將POJO對象與Group字符集的AbsoluteName進行綁定,然后選擇多個資產(chǎn)后,即可導出多條記錄。
需要注意的是,如果Group組件中的數(shù)據(jù)項混合有單一字符串和分年的字符集,需要將單一字符串導入至TableData字符集。這樣單一字符串才能與分年的字符集顯示多行,不過每行的數(shù)據(jù)都是相同的,與分年的字符集進行匹配。
實際工作中,Summary類型報表使用更廣泛,它能夠反映季度或者年度儲量評估的一個整體情況。Summary類型報表模板的設(shè)計開發(fā)的難度也更大。
上市儲量評估系統(tǒng)的建設(shè)和應(yīng)用的時間比較長,之前一直視為一個儲量評估和經(jīng)濟評價的工具軟件(類似一個復(fù)雜的計算器)。隨著用戶和資產(chǎn)數(shù)量的增長,系統(tǒng)也被外部審計納入了審計的范圍。報表的輸出作為數(shù)據(jù)的一個出口,按照審計要求,需要通過角色對員工的權(quán)限進行限制。在BIRT中,這個功能實現(xiàn)起來比較困難。BIRT沒有權(quán)限方面的輔助功能,想要實現(xiàn)權(quán)限,需要另外開發(fā)模塊來實現(xiàn)此項功能。這也是接下來需要解決的問題。
其次,上市儲量BIRT報表交互性比較差。上市儲量評估系統(tǒng)中引入的JAR包中的數(shù)據(jù)導入函數(shù),很好的起到了報表表格數(shù)據(jù)項與系統(tǒng)POJO對象的匹配關(guān)系,但是缺少異常處理和提示機制,不能與用戶進行交互。在開發(fā)報表的時候,只要有一處語法錯誤,整個報表的數(shù)據(jù)都無法顯示,無法進行調(diào)試。由于BIRT的報表數(shù)據(jù)的動態(tài)生成的,調(diào)試起來比較困難,只能逐個數(shù)據(jù)項手動檢查,不可避免會走很多彎路。但是一旦BIRT報表開發(fā)完成,在具體的應(yīng)該過程還是比較穩(wěn)定的,除非需要增加新的需求,需要更改報表的功能,其他方面基本不需要維護。
另外,BIRT的報表設(shè)計界面是傳統(tǒng)的條帶式界面,在設(shè)計報表樣式,需要的行和列需要畫出,對表頭比較復(fù)雜的中國式報表來說,實現(xiàn)起來有困難。上市儲量報表中的現(xiàn)金流相關(guān)數(shù)據(jù)需要按照15種分狀態(tài),按照分公司、總部層層匯總統(tǒng)計。這類處理簡單數(shù)據(jù)關(guān)系的統(tǒng)計分析功能在關(guān)系型數(shù)據(jù)庫中非常容易實現(xiàn),但是BIRT報表中難以實現(xiàn)。為解決這個問題,只能將上市儲量報表涉及的數(shù)據(jù)項導入基于關(guān)系型數(shù)據(jù)庫的儲量成果管理系統(tǒng)中,再通過編寫SQL語句來實現(xiàn)統(tǒng)計分析功能。
最后,BIRT報表相關(guān)教程和資料的獲取也比較困難,難以進一步深入學習相關(guān)知識。筆者也是在使用國外的石油專業(yè)軟件時,才接觸到BIRT報表。國內(nèi)沒有BIRT的官方技術(shù)交流平臺和技術(shù)支持人員,僅有的幾個網(wǎng)友自發(fā)組建平臺上,問題的更新還停留在2012年以前,活躍度很低??赡苓@也是BIRT報表在國內(nèi)企業(yè)中的使用率卻遠遠低于FineReport等報表工具的主要原因。筆者在設(shè)計上市儲量BIRT報表時,資料主要也是從外方工程師獲取。學習的進度也比較緩慢,經(jīng)常遇到問題遲遲得不到有效的解決方案。
上市儲量評估系統(tǒng)通過單井和油氣田的歷史產(chǎn)量數(shù)據(jù)計算出分年預(yù)測的毛產(chǎn)量和凈產(chǎn)量,再結(jié)合油價、稅費、費用等基礎(chǔ)數(shù)據(jù),計算經(jīng)濟評價的各項現(xiàn)金流,并最終通過BIRT報表輸出計算成果。利用BIRT報表生成的上市儲量報表使用簡單,數(shù)據(jù)呈現(xiàn)效果好,在公司上市儲量工作中得到了廣泛的應(yīng)用。相比較其他的報表工具,BIRT報表的功能比較簡單,能夠快速與系統(tǒng)集成,最大的優(yōu)點還是免費,在報表數(shù)量不多且報表簡單的項目里建議選用。