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