當前位置:
首頁 > 知識 > 數據蔣堂 中國報表漫談

數據蔣堂 中國報表漫談

作者:蔣步星

來源:數據蔣堂

本文共7100字,建議閱讀10+分鐘。

中國的報表到底複雜在哪裡?號稱能對付中國報表的工具到底靈不靈?我們就來胡亂聊聊中國報表的這些閑事。

[ 導讀 ]在敏捷BI橫行的年代,報表這個概念也有了更大的外延,很多用戶甚至技術人員都會將由複雜格式報表與BI系統中拖拽出來的報表混為一談。這是一篇2004年底寫的老文,現在重讀,對於理解複雜報表仍有意義,不過對於相關工具的評說確實有些過時了,但也不做修改了,簡單修訂一下重發。

這兩年來雨後春筍般地冒出二三十家做報表工具的公司,統統號稱能處理中國式報表,大概是這中國報表複雜得都世界聞名了,但凡能搞得定中國的報表,那也就沒什麼搞不定的報表了。弄到後來有好些所謂的報表只要能在格子里擺條斜線就敢說能對付中國報表(這也太小瞧祖國文化了),而且老外也開始揚言適合於中國報表了,這時髦,不趕怕是不行了。

可話說回來,這中國的報表確實夠複雜、巨費勁。用戶拿出一撂紙往咱面前一堆:「就照這個做吧」,立馬頭就暈了,隨便選一張搞個兩三天是家常便飯,運氣壞了折騰一禮拜也不是多罕見的事,手裡握著世界排名前三的高檔武器(這裡不方便點名批評,大家心領神會吧)依然搞得人垂頭喪氣,末了還是得拿出看家工夫——寫代碼!誰讓咱是程序員呢,就這命唄。

那到底啥才算是中國式報表?中國的報表到底複雜在哪裡?號稱能對付中國報表的工具到底靈不靈?中國人是不是吃錯了什麼葯非要把報表搞這麼費勁?

我們就來胡亂聊聊中國報表的這些閑事。

中國報表的特點和當前報表工具的問題

先從樣子上看,中國人的報表好象很少有沒有格線的,不僅有格線,還恨不得搞它三五層,大格套小格,更不要說大夥津津樂道的斜線了。可人家老外的報表真地很少有線喲,就那麼幾個數對得倒也整齊。不過,老外的表層數不多,不容易看花眼,中國的表頭比較亂,沒有格線容易看走眼的,所以格線確實是非常必要的。

格線既然是為了令數據對齊的,那線本身更是應當橫平豎直、一貫到底,小學生畫表都是拿尺子比著,一氣畫老長一條。可老外的武器中卻沒順便帶上尺子,只是把一些數連同其框框擺來擺去,美其名曰拖拽,號稱只要用滑鼠簡單拖拽就可畫出報表。

這麼一來,一條長線就要靠十幾個甚至幾十個小框框拼出來了,一個挨一個。哎,本來一筆就畫得出來的線,要堆上幾十段,你說煩不煩?單層的還可說,偏偏我國人民喜歡一層套一層,這樣就得上下左右全面對齊,這麼多小框框指不定哪個不太老實偏出去一點點,直線就變階梯,中國報表還經常特寬,搞得顧了左顧不了右,哪天用戶心血來潮要加減幾個框框,那可累死人了(用戶反正不幹活,眼不見心不煩),而且這種純粹的機械勞動叫我等來搞,真有愧於國家多年的栽培,此時那三字經是不由得要脫口而出的。這還沒算完,辛辛苦苦畫整齊的表,怎麼列印到紙上又不齊了,敢情這東西還和解析度相關,哎,這印表機何苦要比屏幕解析度高這許多。

這種所謂先進的「拖拽式」其實可以用來畫任何東西,是一個一般性的圖元編輯器模型,半點也沒有體現出表格的規律性,什麼都能畫,可什麼畫起來都不大方便。

老外的不行,國人造的如何?可惜,絕大多數國貨都在抄老外,誰叫人家發達呢,咱也分不清好不好,都給抄來了。

難道就沒什麼可使的兵器了?有!當然有,光是擺樣子又沒多難,人家老外也有這種兵器,而且好使得很。

那就是大名鼎鼎的EXCEL了。EXCEL採用網格線把格子圍出來的畫法,配合以合併格和邊框,好比給大家配上了尺子,這下爽了,一個看似複雜的表格三下五除二就搞定了。EXCEL的畫法充分體現了表格的規律性,所以特別方便,方便得連用戶自己都會搞了。

這下又壞事了,用戶太喜歡EXCEL了,於是要求所有報表都要能生成EXCEL的格式,更有甚者,以後不再給咱一撂紙了,給咱一批EXCEL文件,揚言要咱直接讀進去,省得再畫。

這可更苦了用老外工具(或抄老外的國貨)的人,拖拽式和EXCEL的搞法完全不同,定要生成EXCEL文件的話,大都會喪失格式(國貨大抵如此),個別使了大勁的可以搞得很象(老外的一般有這個本事),又還是依賴於您的對齊工夫,稍有不慎,嘿嘿,一行變N行。至於讀入EXCEL文件,那更是想都別想,還不如打到紙上再對著描著舒坦呢。

那咱乾脆直接就用EXCEL好了,不用這些羅里巴索的工具了。哎,這還是有點不大行,EXCEL的格式上是頂呱呱沒得說,可沒什麼數據匯總方案,基本上沒法從資料庫中讀出數據自動產生報表,這畢竟是咱用報表工具的主要目的,否則又得編程序往格子里填數據。

剛才說了,絕大多數國貨在抄那種「拖拽式」的老外,那剩下的小部分就在抄EXCEL了,同樣抄得倍兒象,沒什麼數據匯總功能,只能畫畫樣子,也還是沒法用。

不過,也真有被這可惡的「拖拽式」折磨過頭的,自已編程去準備數填入EXCEL(或類似產品)。這現象其實也還得怪這些報表工具不爭氣,不僅畫起來費勁,統計匯總的本事也就比EXCEL強一點點,離中國報表的要求差得遠。這就是我們要談的第二個方面,也是中國報表真正最複雜的地方。堆框框雖費勁,可有道是只要功夫深,鐵杵磨成針,但統計匯總本事不行的話那就沒治了,無論功夫有多深,木杵總也磨不成針。

中國報表統計重要特徵之一:多數據源

數據統計方面的問題要比報表樣式的問題多得多,也嚴重得多,要分幾個方面來研討。這些研討主要且只能針對拖拽式的報表工具進行,畢竟這些東西還算有點自動化本事。

中國報表統計方面第一個重要特徵是多數據源

所謂多數據源是指同一張報表的數據會來自多個不同的數據表或視圖,甚至來自多個不同的異構資料庫!這東西空口說有點費勁,咱上倆例子。

1. 人員信息表

沒有特殊情況下,智商正常或以上的人都會在資料庫中設計兩張數據表來保存這個表格中的數據,那麼這張表格的數據就會同時來自這兩個表。

2. 成本銷售表

一般為了業務系統處理方便,購進和銷出信息在資料庫中也會是兩個數據表,這張報表中不僅有兩組來源不同的數據,而且之間還要運算(餘額)。

可惜,不知怎麼搞的,這些老外和抄老外的武器全都是單數據源的。不論你的數據來源(SQL語句或存儲過程)搞得多複雜,到了報表這一端都必須變成單個的二維表了。

那這些工具是咋對付多源問題的?

對於第一張表,上下部分格式完全不同,只能採用子報表的法子了, 也就是把下半部分造成一個子表貼進去。這樣倒是解決了多源問題,可新問題又來了,首先讓原本就極難對齊的格線變得更難對齊,目前這個還算簡單,如果搞上三五個子表橫七豎八的排起來,每個子表都不知會變得有多大(表會根據資料庫中數據擴展),那就要充分考驗您當初平面幾何念得如何了;其次主子表之間除了簡單的參數傳遞外,互相沒法溝通,要想把幾個子表中的數加一加,對不起,您得自個兒呆一邊重算去。所以,子報表是能不用就甭用的。

而第二張表,樣子看起來倒不複雜,用不著搞子表。不就倆數據表嗎,咱會叉乘呀,寫個麻煩一點的SQL不就得了嗎。那是,倆表時這麼搞一下還行,可指不定會有幾個源呢,中國報表中有七八個數據源的並不罕見,甚至十幾個的也不過份,您總不能把這一大堆表都讓可憐的資料庫去叉乘吧,如果真這麼搞,稍有不慎把語句寫的不合適(比如偷懶先JOIN後GROUP),算一個表您就可以沏杯茶歇一下了,茶喝完了還不定能算完;

而且,這SQL越寫越複雜,和寫代碼好象也沒什麼差別了,那天書般的SQL語句要是出點錯誰來查(筆者就見過長達三頁紙的SQL,那確是天人所書,真虧資料庫居然算得出來)。這還不算,如果這幾個源來自多個不同的資料庫那可就徹底完了,想喝茶都沒戲了。

怎麼辦?只好祭出最後的法寶——寫代碼!咱畢竟是程序員嘛,還會寫存儲過程準備中間數據表,無論多少源、來自多少庫,只要肯寫代碼,統統搞得定。哎,可這麼搞,還要這些報表工具幹嗎呢?

怎麼樣,折騰得夠嗆吧,不過,您可別鬆氣,麻煩人的還在後面呢。

中國報表統計重要特徵之二:分片

中國報表的第二個重要特徵是分片,與多源相關,但又不完全一樣。多源一般都會是分片的,但分片卻不一定是多源的。

還是上面這兩個例子,兩個報表都很明顯地分成了兩片,每片都有自己獨立的規則,很難統一成一種規則處理。而我們手中的報表工具,如果不考慮採用子報表的話(其危害在上面已經說過了),都要求報表有統一的規則,整個報表只有一片可以重複的條子(細節區和相鄰的分組區),因為是單源的,想當然地以為只要一片重複區就夠了,理論上就不可能做到分片規則了。

但中國報表中分片現象太常見了,同一批數據也可能按不同的主題統計匯總,比如人事表中並列著按民族劃分再按學歷劃分。事實的情況還遠不止分作兩片,常常是豎著五六片,橫著也是五六片,整個報表乘起來就有二十五六片。而且片與片之間又不是完全獨立,橫向的分片在縱向規則卻又是一致的,反之也是如此,這樣既算想搞成子表,嘿嘿,怕是也不大容易,每個分片的表頭都要重複編排,對齊則更是要命。

如果運氣好,雖然分片了,但整個表的樣式看起來還是一致的(比如上面的第二個表),那還可以使出咱最後的殺手鐧——寫代碼!咱寫程序把分片的數據搞成一片不就完了,那還是那個話,咱花錢買這這報表工具幹嗎來了?

運氣不會時時都好,如果碰到那種上下(或左右)幾個分片中分組層數都不一樣的表,那就連最後的法寶都不管用了,就算代碼能把數給算好,可格子卻拼不出那種上下不同的樣子,這會兒您就會特別想念EXCEL了,至少樣式是可以很隨意的,寫代碼也就可以搞定了。哎,直接做是做不出來了,用子報表也太恐怖了,想法和用戶商量吧,搞表格簡化一點吧,別老搞這麼怪的樣子,我做得煩,您看著也暈吧,咱改簡單點吧。

夠煩心了吧,嘿嘿,您可甭急,分片問題這才說了一半。

具體到每個分片也不是省油的燈,不象老外弄得那麼簡單,一下把所有的數都列出來,或者把所有的分組一個不落一個不重的列出來,這種搞法我們叫做「完全劃分」。對應的就還有「不完全劃分」,也就是分組中並不是把所有出現的情況都列出來(這種很常見),而且還可能重複列出(這個相對少見些)。比如我們按民族劃分人員時,不大可能把五十六個民族全來一遍,一般也就是列幾個大的民族再加個其它。比較典型的不完全劃分現象就是固定行列,無論資料庫中有多少記錄多少分組,咱就只關心這幾種情況,表格永遠只有這幾行(列)。

這可奇了,會變多的行列得能做出來,固定的還搞不定嗎?嘿,還真是這麼回事,老外這些東西天生就是和資料庫綁定的,固定行的倒不是搞不出來,可又要寫代碼或者複雜的SQL去準備數據了,象著名的資產負債表,用這些報表工具去搞簡直就是有點摧殘生命了。

而且就算是會變動的,這些工具也還有個行列不對稱的問題,由於和資料庫貼得太緊,大家只見過記錄數會變的數據表,都沒怎麼見過欄位數也會變的數據表,於是這堆工具也就專心處理行方面的變化了,拒絕去處理列數會變的表,後來總算有了一些打補丁的交叉表模板,能對付點事了,但總是用起來不那麼得心應手。可咱中國報表才不管這些,想往下長就往下長,想往右長就往右長,咱沒覺得行和列有那麼大的差別,至多列數可以少一點,總不能不讓咱動呀。這麼一搞,只要碰到變列的交叉表,除非特別規整的,這些大牌武器就又要蝦米了。

中國報表統計重要特徵之三:格間運算

中國報表統計方面的第三個複雜點是格間運算,特別是跨行組的運算。

要統計就要有運算,所有的報表工具都提供了計算匯總的功能,運算只有兩種,一種是行內各列之間的運算,另一種是針對某組(或全體)所有數據進行的匯總(可能帶條件),兩種運算可以組合。但是,在中國的報表中只有要時間序列的,多半就要涉及到比上期、比去年同期之類的運算,這種運算跨行甚至跨組了,這個本事,咱手上這些報表工具又沒有了。這是有原因的,大體這類工具都和資料庫的概念匹配得很好,而資料庫的行是沒有次序的,搞不清誰是誰的上一行,比上期就沒法定義了,比去年同期這種跨組運算更是想不明白了。

為了解決這些問題,有些工具添加了一些引用上行或累積值的特殊函數,但跨組運算依然沒法處理,您只好再一次使出編程序的法寶,自己寫代碼把數據準備好吧。

這種比較有規律的東西倒還不算太難辦,編程序準備數據或是寫個複雜些的SQL都還是可以搞定的。但中國報表中常常還會有些獨獨的格子,其運算方法和誰都不搭界,或是胡亂從表格中東西南北挑幾個格子加減乘除一番,或是乾脆自個兒到資料庫中再搞一句SELECT算一把,完全與其它格子之間無規律可循,整一個十三不靠。

這下可就費大勁了,這不是在後台寫點程序準備好資料庫就完了的,要生成完表格再編程序計算出這些數填進去,這種搞法一般就得採用報表的腳本或者宿主開發語言來寫代碼了,弄得代碼滿天飛,維護時找不到北。

這三個較大的數據統計問題已經把大夥折磨得差不多吧,其它相關的還有一些次要問題,比如參數和宏的引入、交叉表的表頭向右對齊問題等等,咱就不細說了。

報表的填報要求

不過,事還沒算完。中國報表還有填報的要求。

所謂填報,顧名思義,就是填了再報,那報表不是統計匯總完了就完了的,還要能填能改,改完的結果還可以再存起來,咱從小不就常常填表嗎?可老外哪裡想過這種問題,造出來的工具統統沒有這個本事,人家覺得報表是報表,就是不可改的,填的表是另一種東西,根本不能叫報表。但咱中國人天生就認為表都是可以填的,這世上哪有不能填的表,那還叫表格嗎?

說得也是,人家EXCEL就可以填,而且填著還方便得很,搞得按照EXCEL抄的國貨也統統有填的本事。不過,話說回來,這些工具還是有上面說的問題,沒有數據模型,填完的數不知怎麼寫進資料庫,於是常常只能放進文件中(就象EXCEL文件本身),等著您再編程序處理吧。

填報功能說起來其實也挺複雜的,首先要允許表格和資料庫欄位的隨意對應,我可能整表一條記錄,也可能一行一條記錄,甚至可能一格一條記錄(交叉表填寫),這幾種情況還可能是組合出來的,同一張表一下子寫進好幾個數據表。填的過程中還應當有自動計算能力(比如EXCEL就很強了),提交時應當有合法性的檢查功能,看看您填的數是否合理;更有甚者,中國要填的表經常是一套一套的,十幾張之多,那不是一時半會兒填得完的,咱得下載下來回家慢慢填,這又需要多頁填報或離線填報的功能。這每條功能搞起來都沒那麼容易,夠狠吧!

除此之外,中國報表還有不少折磨人的小地方,特別是在列印輸出方面,比如一張紙上列印幾個小票據,橫向分欄,橫向分頁時左表頭的重複,末頁補足空行,票據套打等等,這些比較頭痛但還不算什麼根本的問題,這裡就不仔細評說了。

產品的集成性

還有一個和中國報表特徵沒啥關係但是程序員常常碰到的頭痛問題,就是產品的集成性。

在國內做應用開發,報表只是應用的一個部分而非全部,報表總是要被集成到應用系統中去,如果某個報表工具能力超強,但卻不可被集成,那也是沒啥意義的。

考慮到當前國內應用開發的現狀,我們只研討基於J2EE機制下的B/S應用的報表集成。

現在流行的報表工具幾乎都是獨立伺服器形式。咱可能資質愚鈍,想了許久,楞沒想出獨立伺服器的半點好處來,倒是想出一大堆壞處,下面就來批判批判:

報表伺服器與應用程序不在同一個進程空間內,數據溝通都需要通過網路協議進行,即算是同一台機器上,也要把數據傳來傳去,無端浪費時間降低性能;這種獨立的伺服器常常還自己搞一套用戶許可權管理機制,設計得還很複雜,咱的程序必須向這個規矩上靠,可這套規矩從來也不會夠用,應用系統的用戶管理啥時候也沒那麼規整過,就乖乖地按它家設計的樣子來,比如您何曾見過這樣的系統,把應用系統中的櫃員、科長、局長這種業務角色建立在ORACLE的用戶上?這種費了勁又嚴重影響集成度的東西其實不搞也罷,常常因此浪費巨多的時間還是和應用接上不口。

然後還有問題,獨立伺服器又沒法充分應用伺服器的本事,比如資料庫連接就不能和應用系統的其它模塊共享,非要獨獨地自己搞一攤,更過分的是集群能力,也還得聽命於這個報表伺服器。靠,我就不信,Weblogic的平衡負載能力會比你的報表伺服器要差勁?人家專吃這碗飯的會搞不過你?可沒辦法,也只好由著它折騰了。還有部署方案,本來所有的程序數據打個WAR包很方便就上去了,可它偏要與眾不同,要獨自戰鬥,還是搞得咱沒脾氣。

想來想去,估計美國人可能不大需要被集成的報表工具,所以老外的產品也不是為了被集成而設計,這也就情有可願了。可嘆的是,國人抄老外時也沒怎麼想想,大多一古腦地把體系結構也抄了過來,特別是海歸派的新興企業,抄得有鼻子有眼的,費了老勁還沒落到好;有系統集成經驗的國產報錶廠商就還稍好一點,沒去費那沒用的勁。

尾語

牢騷差不多發完了,這下您該知道中國報表到底是怎麼個麻煩法,為啥我們有了國際水平的先進武器依然過得很衰。這些流行的工具名頭雖響,確實是極其不適合中國報表的,號稱能適應中國報表的大都是胡說八道,趕趕時髦而已。

是不是中國人真地吃錯了什麼葯非要把報表搞這麼複雜,以後有沒可能簡單起來?

報表工具廠商中有一個較普遍的說法是中國現在的應用水平太差,用戶都不懂信息化,所以造成了報表複雜,一句話,就是咱的需求錯了,咱不夠高檔,人家高檔的美國用戶就不用這麼複雜的表格。

聽起來有點道理,其實是胡扯!明明是自己做不出來,偏偏要說用戶的需求不合理,象是《笑林》的那個笑話,和尚念錯了經卻指責人家死錯了人,真是豈有此理!

說老實話,由於沒有信息化經驗而設計出不合理的報表當然也是存在的,但大部分情況下即使信息化程度已很高,那報表還是複雜得很,而且信息化程度越高,EXCEL使得越熟,那報表就越複雜。比如銀行,在中國算是信息化進行最早的行業了,您去瞧瞧銀行的報表,嘿嘿,暈死人不賠命的;再如日本人,信息業夠發達了吧,那報表還是那樣複雜得沒商量。

至於說美國人的表為啥不太複雜,咱沒在美國生活過,還真一下子搞不清。不過,中國的報表複雜是很有道理的,各項信息在表上一目了然,就是省事。所以筆者認為,大概是東方文化傳統的因素讓中國報表複雜下去,如果真是這種原因,中國的報表還將一如既往的複雜下去,怕是沒什麼簡化的指望了。

所以呢,不要寄希望於報表會變簡單,那會被你的競爭者置於死地的,還是努力想法怎麼解決這些問題吧。

專欄作者簡介

潤乾軟體創始人、首席科學家

清華大學計算機碩士,中國大數據產業生態聯盟專家委員,著有《非線性報表模型原理》等,1989年,中國首個國際奧林匹克數學競賽團體冠軍成員,個人金牌;2000年,創立潤乾公司;2004年,首次在潤乾報表中提出非線性報表模型,完美解決了中國式複雜報表製表難題,目前該模型已經成為報錶行業的標準;2014年,經過7年開發,潤乾軟體發布不依賴關係代數模型的計算引擎——集算器,有效地提高了複雜結構化大數據計算的開發和運算效率;2015年,潤乾軟體被福布斯中文網站評為「2015福布斯中國非上市潛力企業100強」;2016、2017年,榮獲中國電子信息產業發展研究院評選的「中國軟體和信息服務業十大領軍人物」;2017年度中國數據大工匠、數據領域專業技術講堂《數據蔣堂》創辦者。

數據蔣堂

《數據蔣堂》的作者蔣步星,從事信息系統建設和數據處理長達20多年的時間。他豐富的工程經驗與深厚的理論功底相互融合、創新思想與傳統觀念的相互碰撞,虛擬與現實的相互交織,產生出了一篇篇的瀝血之作。此連載的內容涉及從數據呈現、採集到加工計算再到存儲以及挖掘等各個方面。大可觀數據世界之遠景、小可看技術疑難之細節。針對數據領域一些技術難點,站在研發人員的角度從淺入深,進行全方位、360度無死角深度剖析;對於一些業內觀點,站在技術人員角度闡述自己的思考和理解。蔣步星還會對大數據的發展,站在業內專家角度給予預測和推斷。靜下心來認真研讀你會發現,《數據蔣堂》的文章,有的會讓用戶避免重複前人走過的彎路,有的會讓攻城獅面對扎心的難題茅塞頓開,有的會為初入行業的讀者提供一把開啟數據世界的鑰匙,有的甚至會讓業內專家大跌眼鏡,產生思想交鋒。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數據派THU 的精彩文章:

一文讀懂Corda分散式記賬技術
2018年中國數字政府論壇——政務服務與政府數字化轉型

TAG:數據派THU |