報(bào)表和數(shù)據(jù)的關(guān)系
選擇報(bào)表工具時(shí),有一大誤區(qū),就是不重視報(bào)表與數(shù)據(jù)之間的關(guān)系.
出現(xiàn)這種情況也很正常,我們最早接觸的報(bào)表,可能就是MS Access里面帶的報(bào)表工具,以及VB里面捆綁的Crystal Report. 這些工具最典型的方法,就是,選擇數(shù)據(jù)庫(kù),選擇數(shù)據(jù)集,選擇字段,選擇條件,選擇排序,然后把字段向上擺.不光是Crystal Report是這樣,很多常見(jiàn)的報(bào)表工具,不論是國(guó)外的"高端"產(chǎn)品,還是現(xiàn)在在Google中一搜"報(bào)表工具"能見(jiàn)到的一大堆國(guó)內(nèi)的低端產(chǎn)品,基本上也都是這種方式.
這種方式不能說(shuō)沒(méi)有道理,它的理論是:
1、一張報(bào)表中的數(shù)據(jù),基本上是有關(guān)系的,因此可以利用關(guān)系型數(shù)據(jù)庫(kù)的特性,建立一個(gè)視圖所需要的數(shù)據(jù)都包括進(jìn)來(lái)。
2、可以用子報(bào)表的方法,將不同的數(shù)據(jù)分別處理。
然而,并不是這樣簡(jiǎn)單!
首先,如果表復(fù)雜一點(diǎn),建立一個(gè)復(fù)雜的視圖絕不是一個(gè)很輕松的工作,更不用說(shuō)除了建立視圖的效率,還要考慮數(shù)據(jù)庫(kù)與報(bào)表的運(yùn)行效率。
其次,子報(bào)表與主報(bào)表之間,既有可能在格式上有麻煩(比如表格的對(duì)齊),也有可能在計(jì)算上有困難(主子報(bào)表之間往往只傳遞參數(shù),無(wú)法直接引用數(shù)據(jù)進(jìn)行公式計(jì)算)
因此,對(duì)報(bào)表工具而言,最根本的問(wèn)題就是如何處理數(shù)據(jù),以不同的方法處理數(shù)據(jù),開(kāi)發(fā)效率,運(yùn)行效率可能都會(huì)相差十倍以上。而只有數(shù)據(jù)模型的改良,才是真正關(guān)乎報(bào)表工具效率的革命。象新一代報(bào)表工具如 FineReport,其最根本的優(yōu)勢(shì)也在于改進(jìn)的數(shù)據(jù)模型與報(bào)表模型。
建議大家在選擇報(bào)表工具時(shí),一定要重視如何提取數(shù)據(jù),這直接關(guān)系到未來(lái)的開(kāi)發(fā)成本,以及生成的報(bào)表的可用性(會(huì)不會(huì)運(yùn)行半天才能出來(lái)一張)。報(bào)表的開(kāi)發(fā)成本,不僅僅在于畫(huà)線、擺位置,更在于把數(shù)據(jù)表現(xiàn)出來(lái)。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
了解Java報(bào)表工具就從這里開(kāi)始