所謂報(bào)表工具,核心本質(zhì)的功能,就是它的制表能力,即是否能夠不寫代碼而制作出自己需要的各種報(bào)表。但用戶在考察報(bào)表工具時(shí)往往很注重打印輸出、繪制方案、管理調(diào)度等外圍因素,而忽視了報(bào)表工具本質(zhì)的制表能力。當(dāng)然不可否認(rèn)這些外圍的功能對(duì)一個(gè)報(bào)表工具來說也是很重要的衡量標(biāo)準(zhǔn),但是報(bào)表工具的主要用途是制作報(bào)表。目前市場(chǎng)上的主流產(chǎn)品能夠處理處理復(fù)雜報(bào)表的只有FineReport和潤(rùn)乾報(bào)表。
通過對(duì)這兩個(gè)產(chǎn)品的研究,我們認(rèn)為,報(bào)表工具對(duì)復(fù)雜報(bào)表的處理能力應(yīng)該體現(xiàn)在如下幾個(gè)方面:
首先是多源分片。
傳統(tǒng)的報(bào)表工具只支持單源報(bào)表,即使是數(shù)據(jù)來自于多個(gè)物理數(shù)據(jù)表或者物理數(shù)據(jù)庫,也需要在報(bào)表設(shè)計(jì)前將多源通過寫SQL,存儲(chǔ)過程等轉(zhuǎn)化成單源處理。
多源往往帶來分片,正是由于分片,使得報(bào)表設(shè)計(jì)必須直接基于多源進(jìn)行,而不能先將多源轉(zhuǎn)成單源進(jìn)行。有相當(dāng)一部分分片報(bào)表無論如何也不可能換成單源處理,部分能轉(zhuǎn)成單源的報(bào)表處理也非常繁瑣。
其次,是不規(guī)則劃分機(jī)制。
傳統(tǒng)的分組是完全規(guī)則劃分的,即劃分標(biāo)準(zhǔn)一致且有規(guī)則(一般都按某個(gè)字段或表達(dá)式),所有字段都必須出現(xiàn)且只出現(xiàn)一次,分組值次序與原數(shù)據(jù)記錄次序一致。
但是與完全劃分相對(duì)應(yīng)的,在報(bào)表匯總中卻常常需要不規(guī)則劃分,即劃分標(biāo)準(zhǔn)看不出規(guī)律(常常只能窮舉),所有事實(shí)不一定全部出現(xiàn)在分組結(jié)果中、個(gè)別事實(shí)還可能重復(fù)出現(xiàn),次序也與原數(shù)據(jù)記錄無關(guān)。
然后,還有動(dòng)態(tài)格間運(yùn)算的能力。
所有的報(bào)表工具都會(huì)提供一些計(jì)算列的功能,在原始數(shù)據(jù)基礎(chǔ)上再計(jì)算出一些別的列值或統(tǒng)計(jì)值,這是報(bào)表展現(xiàn)中是不可缺少的功能。
一般的報(bào)表工具一般只提供同行內(nèi)的格間運(yùn)算和針對(duì)某組(或全體)的集合運(yùn)算,對(duì)于常見的比如累計(jì),取名等跨行組運(yùn)算則相當(dāng)困難。
除了有規(guī)律的跨行組運(yùn)算外,報(bào)表中還可能會(huì)有一些隨意的獨(dú)立格運(yùn)算,其值可能是報(bào)表中的任意幾個(gè)其它格運(yùn)算出來,甚至還可能會(huì)引用到報(bào)表外的數(shù)據(jù)(比如和數(shù)據(jù)庫中的數(shù)據(jù)再次運(yùn)算等)。所以運(yùn)算后報(bào)表數(shù)據(jù)項(xiàng)命名機(jī)制就很重要,傳統(tǒng)工具只能用列名命名設(shè)計(jì)階段的數(shù)據(jù)單元,隨意的獨(dú)立格運(yùn)算會(huì)就使傳統(tǒng)工具無法處理,而報(bào)表外的數(shù)據(jù)引用更是只能借助腳本或外圍應(yīng)用程序,導(dǎo)致代碼極為混亂。
另外,所有以上的討論中還貫穿了一點(diǎn),即行列對(duì)稱。縱方向上擁有的自動(dòng)復(fù)制擴(kuò)展的能力需要完全實(shí)現(xiàn)在橫方向上。報(bào)表可以橫向分組、橫向分片,對(duì)于橫向變列的報(bào)表可以定義跨列組運(yùn)算等。
上面我們提到目前市場(chǎng)上的主流產(chǎn)品能夠處理處理復(fù)雜報(bào)表的只有FineReport和潤(rùn)乾 。其它的產(chǎn)品都沒有這種無編碼處理復(fù)雜報(bào)表的能力。包括潤(rùn)乾的另一個(gè)產(chǎn)品:快逸報(bào)表, 因?yàn)?快逸不包含潤(rùn)乾核心的非線性報(bào)表,不能夠設(shè)計(jì)復(fù)雜報(bào)表的情況下,其帶來的工作量與開源工具不相上下,反而會(huì)提升項(xiàng)目成本。
所以個(gè)人認(rèn)為這個(gè)產(chǎn)品商業(yè)考慮大于產(chǎn)品實(shí)際價(jià)值。因?yàn)橥粋€(gè)公司無論如何不會(huì)提供兩個(gè)功能相同,價(jià)格卻相差十倍以上的產(chǎn)品,無非是以低價(jià)產(chǎn)品吸引用戶的注意力,然后再極力推薦另外一個(gè)高價(jià)的產(chǎn)品而已。