在傳統(tǒng)的報表應(yīng)用中,源數(shù)據(jù)的計算一般有三種方式:1、報表工具直接連接數(shù)據(jù)庫取數(shù),源數(shù)據(jù)的計算是提交SQL由數(shù)據(jù)庫完成的;2、報表工具利用自身的計算能力(單元格函數(shù)或格間計算),實現(xiàn)部分?jǐn)?shù)據(jù)計算;3、報表工具通過API調(diào)用Java程序?qū)崿F(xiàn)數(shù)據(jù)計算。 下面
在傳統(tǒng)的報表應(yīng)用中,源數(shù)據(jù)的計算一般有三種方式:1、報表工具直接連接數(shù)據(jù)庫取數(shù),源數(shù)據(jù)的計算是提交SQL由數(shù)據(jù)庫完成的;2、報表工具利用自身的計算能力(單元格函數(shù)或格間計算),實現(xiàn)部分?jǐn)?shù)據(jù)計算;3、報表工具通過API調(diào)用Java程序?qū)崿F(xiàn)數(shù)據(jù)計算。
下面,我們比較一下這三種方式,并探討最佳方案。
首先,來看數(shù)據(jù)庫計算。
數(shù)據(jù)庫計算的優(yōu)勢是:數(shù)據(jù)一致性較好,安全性較高。
但是,采用數(shù)據(jù)庫計算報表源數(shù)據(jù)的問題也比較多:1、報表工具從數(shù)據(jù)庫中取出數(shù)據(jù)時,要通過JDBC,因為需要做數(shù)據(jù)流的對象轉(zhuǎn)換,所以關(guān)系數(shù)據(jù)庫的JDBC都比較慢,這是一個始終沒有解決的問題;2、簡單SQL語句執(zhí)行的速度較快,但復(fù)雜SQL則不容易優(yōu)化。如果是存儲過程中用for循環(huán)來fetch計算的話有可能要比Java慢;3、數(shù)據(jù)庫是扁平結(jié)構(gòu),不能以多級目錄的形式來管理數(shù)據(jù),只適合管理數(shù)量較少的表。數(shù)據(jù)庫計算會產(chǎn)生大量相互關(guān)聯(lián)的中間表,出現(xiàn)很多容易混淆的表名,可管理性較差。4、Sql存在:不支持分步計算、集合化不徹底、缺乏有序集合、不支持對象引用的問題。這就造成SQL和存儲過程不符合自然思維習(xí)慣,編程比較困難。5、數(shù)據(jù)庫的建設(shè)和維護(hù)成本都比較高。
第二,來看報表工具計算。
由于數(shù)據(jù)庫計算方案的上述不足,很多報表程序員會直接利用報表工具的單元格函數(shù)和格間計算等方式來實現(xiàn)源數(shù)據(jù)計算。報表工具計算的不足是:1、為了完成計算,報表不得不采取隱藏行列的方式儲存中間結(jié)果,會增加內(nèi)存消耗,降低性能;2、報表單元格除了存儲單元格值,還保留了很多顯示格式屬性(比如:字體、大小、背景色等等),帶著這些屬性計算,也會降低性能;3、有些復(fù)雜計算是報表工具本身無法完成的,比如:不規(guī)則運算、需要多個步驟完成的計算等。
第三,來看Java程序計算。
Java程序計算的優(yōu)勢是在數(shù)據(jù)庫和報表工具之間形成了中間計算層,好處是:1、可以訪問文件中的數(shù)據(jù),并采用多線程計算,能夠提升報表性能和容量;2、支持多樣性數(shù)據(jù)源;3、有效減輕數(shù)據(jù)庫負(fù)擔(dān);4、實現(xiàn)T+0大數(shù)據(jù)實時查詢,可以在報表中看到最新產(chǎn)生的數(shù)據(jù)。但是,由于Java程序在結(jié)構(gòu)化和半結(jié)構(gòu)化計算方面的類庫較少,實現(xiàn)上述計算很復(fù)雜。而且,Java程序和報表模板是分離的,在代碼管理上也很麻煩。如果是對數(shù)據(jù)集的少量調(diào)整計算,也要折騰Java的開發(fā)環(huán)境、代碼管理、打包部署等,就太麻煩了。
因此,Java程序計算實際上形成了報表應(yīng)用的計算中間層,是三個方式中比較具備優(yōu)勢的。但是,Java程序計算問題也還是很多。
可以考慮采用潤乾集算報表的源數(shù)據(jù)計算方案,可以在報表應(yīng)用和數(shù)據(jù)庫之間形成顯式的計算中間層,具備上面所說的Java程序的4個優(yōu)勢。同【本文來自鴻網(wǎng)互聯(lián) (http://www.68idc.cn)】時,集算報表又解決了Java程序計算的不足,體現(xiàn)在:1、集算腳本提供了大量的結(jié)構(gòu)化和半結(jié)構(gòu)化計算類庫,特點是:分步計算、完全的集合運算、有序集合運算和對象引用機(jī)制等,更接近自然思維,編程更簡單,代碼量更少。2、集算腳本可以直接在報表文件中編寫,也可以保存為dfx文件和報表文件成對存放在目錄中,代碼管理簡單。3、集算腳本是解釋執(zhí)行的,無需編譯、打包。4、集算腳本封裝了Java的多線程編程,化繁為簡,提高了開發(fā)效率。
潤乾集算報表和傳統(tǒng)方案的結(jié)構(gòu)對比示意圖如下:
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com