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