小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

明確一些報表中的基礎(chǔ)問題

 WindySky 2007-09-21

寫這篇文章的目的是為象我一樣想系統(tǒng)研究報表的人做一些概念上的指導(dǎo),我不會給這些概念下定義,只是盡量用自己的語言解釋得清楚些。我的文筆很差,思維也不太連貫,只能時時來BLOG記錄一些思想的火花,希望這不斷積累的星星之火能成為燎原之勢。假如讀者有任何感想,請做個簡單的評論,幫助我再碰撞出一些火花。

什么是報表
報表這個詞在日常生活中,一般是指下級向上級的數(shù)據(jù)匯報,比如,全國各地疾病控制中心或防疫站會定期向上級匯報傳染病發(fā)病和死亡情況等,類似的報表,在信息系統(tǒng)中,屬于數(shù)據(jù)采集的部分,具體來說,就是應(yīng)用中增、刪、改、查中增加記錄功能。
在我們的IT系統(tǒng)里,我把報表分兩類:一是固定格式的,或者是有規(guī)范可循的,一般常見于為事業(yè)單位做的系統(tǒng)中,比如衛(wèi)生統(tǒng)計報表,人力資源、稅務(wù)系統(tǒng)的報表等;二是自由格式的統(tǒng)計分析,一般稱為統(tǒng)計分析,是由為方便用戶分析數(shù)據(jù)而開發(fā)的模塊,有的也提供給用戶自定義報表的工具。所以,以后的敘述中,我將把統(tǒng)計分析和報表混為一談,甚至任何可以用報表工具實現(xiàn)的展示,我都把它歸到報表的范疇里。

為什么要使用報表工具
有兩個原因:一是為了簡化程序員的開發(fā)工作,二是為客戶提供自定義報表功能。
據(jù)我了解,現(xiàn)在仍然有許多項目中的報表模塊沒有用第三方的報表工具來實現(xiàn),大部分是因為項目經(jīng)理還不知道可以利用現(xiàn)成的工具來節(jié)省一部分工作,但只要是接觸過報表工具的人,都會自覺地在項目中使用。因為工具會把報表的主要工作——格式、計算和輸出——都幫你做好,節(jié)省你的一些時間。而沒使用工具之前,報表的格式,假如是頁面上的話,會用HTML的<TABLE>標簽來做,計算會寫到數(shù)據(jù)庫的存儲過程里或業(yè)務(wù)邏輯代碼里,而輸出則是用iText、POI之類的庫來完成。
其實,報表工具并不如想象得那么萬能,一旦碰上復(fù)雜的表樣和復(fù)雜的計算,做起來并不輕松,甚至由于工具本身的限制,根本無法完全實現(xiàn)需求。這時,只能去說服客戶更改需求、換其他工具或改回到手工實現(xiàn)。好在這么變態(tài)的報表并不是總有機會碰得到,只要你肯動腦筋,大部分都可以解決。

打印
說報表,不能不提到打印。我目前總結(jié)出來的解決方案有三種:一是用瀏覽器的打印功能,雖然這是一直被唾棄的方式,但對于不考慮分頁和不是超寬超長的報表,還是可以去嘗試說服客戶接受的,更何況,假如你的應(yīng)用只考慮IE的話,可以用腳本去調(diào)用一些IE功能來實現(xiàn)比較完美的打印;二是用Applet,雖然有點不怎么流行Applet了,又有一點安全方面的小影響,但你可以在程序里完全控制打??;三是輸出為其他格式,如PDF,XLS等,用已安裝在客戶端機器的插件來打印,現(xiàn)在的報表工具一般都是可以輸出這樣的格式。另外,有的報表工具在服務(wù)器端提供打印支持,這種方式似乎并不是我們想要的。

“中國式”報表
這大概是近來才發(fā)展起來的一個詞,其中包含了許多的無奈和憤怒以及對中國特色的無處不在的感慨:-)
概括起來,中國式報表一般是指表頭復(fù)雜的表格式報表,這種表格的列頭(表格上端)和行頭(表格左端)會分成多個層次,而且還帶有大量的總計和小計的計算,樣式的復(fù)雜導(dǎo)致了計算的復(fù)雜,因此做起來異常困難。這類報表的格式一般都來自某種強制性的規(guī)范的,比如國家某些部委的統(tǒng)計報表標準等。造成這種復(fù)雜格式的原因,一是為了統(tǒng)計分析方便,最大限度地展示數(shù)據(jù),二是因為以前MS-Excel普及使用的結(jié)果。所以一些類Excel的報表工具被宣傳為最適合做中國式報表。也曾聽人說過,中國式報表大部分是交叉表,我同意。而且我進一步分析發(fā)現(xiàn),許多這樣所謂的交叉表,其實行或列的擴展范圍是有限的,也就是說,有可能做成固定數(shù)目行或列,固定好行列后,為每個單元格做不同的計算,這樣一來,又是Excel的長項了。

報表中計算的處理
報表中除了格式讓人頭疼外,計算也是挺麻煩的。簡單的一些匯總統(tǒng)計,報表工具會支持。但對于一個數(shù)據(jù)庫表中全是基礎(chǔ)數(shù)據(jù),而統(tǒng)計需要關(guān)聯(lián)多個表來進行,還要根據(jù)外部條件來判斷,除了整列做匯總外,可能行涉及到其他列參與其中。說得的確很復(fù)雜,解決方案可以分為下面三種:
一是把計算放在數(shù)據(jù)庫端,寫成存儲過程或?qū)懙揭晥D里,這樣的報表工具只要把記錄集拿過來顯示一下就OK了。工具的使用只是用來定義顯示和輸出的。二是把計算寫進SQL查詢,一般的工具只能支持一條SELECT語句(通過子報表可以支持多個SELECT),要把復(fù)雜的計算寫出來,很考驗SQL的功底,這樣做,雖然可以避免把邏輯寫到數(shù)據(jù)庫里,移植性好點,但工具仍舊只是用來顯示和輸出的。三是完全用工具來實現(xiàn),一般的工具都提供腳本編程的功能,做到對復(fù)雜計算的最靈活的控制。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多