摘 要:水晶報表(Crystal Reports)是當前業內廣泛應用的報表系統,有很強的專業性與功能性。本文以一重型機械廠為例,首先介紹水晶報表系統在企業實際運行中的應用情況,進一步探討在使用過程中的一些問題及解決策略。
關鍵詞:水晶報表、視圖、SP、 數據庫
[中圖分類號]:F231.5 [文獻標識碼]:A
[文章編號]:1002-2139(2012)-03-0244-01
水晶報表(Crystal Reports)本身是一個集應用與設計為一體的報表平臺。用戶在使用報表時,可以直接通過界面操作,不需要編寫一行代碼即可完成報表對數據表數據的操作。它支持大多數流行的開發語言,通過將 Crystal Reports 的報表處理功能整合到自己的數據庫應用程序中,可以方便地在任何應用程序中添加報表。水晶報表擁有可視化的設計環境,提供直觀的、可拖放對象的、交互性用戶界面,公式語言強大,內置超過了160種函數和操作符,以控制報表的格式、復雜的邏輯和數據選擇,是一個強大的報表設計工具。
1、水晶報表的實際操作與應用
該機械公司原各種業務數據存在數據冗余、結構混亂的問題,同樣的數據被多次維護,效率比較低,各個報表之間的冗余數據和不一致性比較大。報表沒有經過系統的規劃,沒有實現數據庫存儲,不利于信息的統計分析和數據挖掘,同時由于信息不共享造成了重復工作。
公司所使用的RS10系統報表以處理報表的數據存儲和數據生成為主線,實現了數據分部門填報,部分數據導入的方式,采用水晶報表設計工具后,生成的報表分權限管理,在報表中心定時生成,實現了數據的動態更新,并可發送到用戶指定的報箱,用戶可隨時享用報表打印、導出、刷新和搜索的功能,并可保存為Word、Excel、PDF等多樣的文檔格式。目前系統中人力報表共有30張,各勞資員可隨時打印工資條、工資匯總等相關報表,運營報告報表48張,形象報產、工時定額、設備報表等8張。設備報表和人力報表還在不斷增加中,以后還會涉及到財務、銷售等報表。手動生成的報表在各相關功能頁面顯示,可直接點擊查看;自動生成的報表在報表中心生成報表樹,分類顯示,每訂閱一次報表,要在報表訂閱中選中查看的報表。報表的數據時時生成,而不需要用Excel粘粘貼貼。當財務、采購、銷售模塊正式上線后,將不用在運營報告錄入財務、生產等數據,而是從這些模塊中直接提取,減少錯誤率。同時增加了Excel導入功能,可直接把Excel數據導入,而不需要每月通過Access導,減少了報表維護量。
從使用情況來看,水晶報表的功能強大,水晶報表與電子表格最大的區別是它的數據處理能力強大。它是通過數據庫而不是讀取單元格的數據來完成諸如排序、統計、分類匯總、查詢、更新等功能,使得報表對數據處理的性能可以得到很大的提高。
2、水晶報表使用中的一些問題
(1)使用視圖對系統效率的影響
水晶報表由于設計模型的局限,只能進行橫向計算和簡單的縱向跨行計算,而無法處理更加復雜但又非常常見的計算(如跨組計算,名次計算等),這樣就造成了許多報表很難實現。這時需要編寫大量的視圖、SP,通過視圖鏈接到數據源,來消除不必要的復雜連接、篩選器或公式,使用戶不必在基礎數據結構變動時重新定義報表,但同時視圖也對系統效率產生了影響。
視圖可以被看成是虛擬表或存儲查詢,但通過視圖訪問的數據不作為獨特的對象存儲在數據庫內。它相當于一張虛擬的表,在運行時可以當作表Table來進行查詢(增刪改是不行的),其目的是用來呈現數據。大多數情況下,視圖是通過兩個或多個表的鏈接取出記錄,對于簡單的數據查詢可以提高檢索速度,但要進行數據的計算,如求和、平均等,大量的數據計算操作就會影響數據庫的效率。特別是該公司系統的工資、人力檔案數據多,計算復雜,查詢條件多,數據庫執行得比較慢,導致在頁面打開水晶報表時,速度慢,沒有反應,出現空白頁。如汽輪機制造部人員703個,在做工資匯總表時,先要選出當前核算期的數據,再對這些數據進行車間處室分組求和,后臺數據庫執行需要一分鐘左右,在前臺頁面完全打不開。有的報表甚至需要七八個視圖,視圖套視圖的結構影響了數據的計算速度。
解決這一問題,可以多用系統的高級查詢、排序、分組、篩選功能,導出到Excel,到Excel表中去隨意處理數據。再有就是編寫存儲過程,存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中。用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。在服務器上執行存儲過程,可以改善應用程序的性能,這樣可以避免把大量的數據下載到客戶端,減少網絡上的傳輸量,提高網頁瀏覽速度。所以應努力把所有復雜的視圖改為SP,盡量減少視圖量,減輕數據庫的負擔,提高數據庫的執行速度。
(2)對于復雜報表的支持有限
水晶報表工具擁有直觀圖形化的設計界面和強大的公式處理能力,但對復雜報表的支持還不夠。由于水晶報表不是采用單元格的方式,當用戶需要合并或拆分單元格時,沒有直接的方法支持。同時,很難實現橫向報表。水晶報表是以節(Section)的形式縱向顯示的。數據表的列名顯示在頁眉節,列的內容在詳細資料節中顯示,水晶報表根據條件自動讀出數據表數據縱向顯示并分頁,這樣就造成了很多報表需要寫大量的視圖和公式才能實現。如做員工學歷、職稱等報表時,需要統計26個子序列中各學歷、職稱的人數,還需統計其中女員工、退休返聘、非城鎮人口的數量,由于分類條件不是來自一個字段,寫了好多公式都無法實現,只能插入三個子報表,造成報表的格式不好看。再有,工資報表數據量大,字段多,選用A3的紙還是有點擠,只能不斷地縮小字體才能顯示完全。在打印工資報表時,紙張不是標準的A3,B4,報表格式、頁邊距需要反復調試,連續打印報表很困難。這個問題,通過導成PDF格式,自定義連續紙紙張大小,得到了解決。
通過以上分析,使用水晶報表,要充分考慮到它的優勢與不足,要與企業自身情況相結合,在實際應用中不斷總結,實現它的使用價值。
參考文獻:
[1]、張榮圣.Crystal Reports 2008水晶報表從入門到精通.電子工業出版社,2010.2