润乾报表分组求和_实现报表数据预先计算
報表應用中,如果數據量較大或計算過程較復雜,往往會導致報表數據源準備過慢,從而影響報表性能。這種情況下可以預先計算報表需要的數據,在呈現時直接引用,使得用戶在訪問報表時可以迅速地獲得響應。
一、當前的手段及弊端
由于報表在訪問時常常需要參數,因此顯然不可能把所有參數組合對應的報表數據源都準備好,所以預先計算通常只生成中間數據,在呈現時仍然要再進行一些后續的簡單計算(如過濾、分組匯總、排序等)。不過即便如此,也不太可能完全由報表工具在中間數據基礎上完成所有后續運算,因此報表工具通常只能完成一些小數據量的運算。也就是說,存儲的中間數據還需要有有再次計算的能力,所以一般情況下會將中間數據以中間表的形式存儲在數據庫中,以便在呈現時再借用數據庫的計算能力。
采用中間表進行預先計算會存在以下弊端:首先,將過多的計算工作交給數據庫做,無疑會加大數據庫的壓力,甚至反而造成性能不升反降;其次,中間表太多容易導致管理混亂,由于數據庫采用非層次結構(與文件系統的樹形結構不同),因此大量存在的中間表往往會增加數據庫管理難度。此外,從數據庫中讀取較大的中間表還會出現 I/O 瓶頸,同樣會導致報表性能不佳。
二、潤乾報表的解決方案
潤乾報表的預先計算方案(結合集算器實現)不需要使用數據庫中間表,從而可以避免上述弊端。潤乾報表內置的運算引擎擁有完整的計算能力,一方面可以將中間數據存放在文件中,另一方面還可以對文件進行再計算后作為報表數據源,縮短報表計算時間,提升報表性能。
這種方式看上去和使用數據庫中間表類似,都需要事先計算準備數據,但也有很大的不同:第一,不會占用昂貴的數據庫空間,不會增加數據庫負擔;第二,中間數據的組織管理基于文件系統,清晰明了;第三,數據量大時不會出現 IO 瓶頸。
潤乾報表能夠做到這些,得益于內置了專門用于數據計算的集算引擎。集算引擎與文件系統可實現無縫交互(讀入和輸出),可以讀取多種文件格式,如常見的文本、Excel 等,也包括效率更高的二進制文件,從而使文件具備再計算的能力,輕松實現報表預先計算。
下面用一個例子說明潤乾報表進行預先計算的步驟:
1、將需要的中間結果保存成文件
潤乾報表支持常見的文本文件格式,例如可以將訂單明細分組匯總后的數據直接存放在文本(orderDetail.txt)中。如果希望提高性能,潤乾報表還支持更高效的二進制文件格式,比文本能快出 2-5 倍,在集算器中執行如下代碼就能將文本文件轉換成二進制格式文件。
file(“E:/ 訂單明細.b”).export@b(file(“E:/ 訂單明細.txt”.cursor())
當然,生成中間數據的過程本身也可以采用集算器實現,但非本文關注點,此處不再詳述。
2、 基于中間數據文件生成報表源
潤乾報表可以直接基于文件進行再次計算,從而獲得報表數據源,比如下面的過濾算法。
腳本中使用的參數及其含義如下:
其中 cols 為選出列名,where 為過濾條件(參數傳遞時拼接成上述格式),num 為取出的記錄數。
腳本內容:
上述腳本基于文件進行過濾和分組匯總操作,其中:
A1:通過文件游標(流式處理)讀入大文本數據,此處支持選擇列,用戶可以根據參數控制選出的數據列。
A2:按照參數進行條件過濾,結果仍然是游標。
A3:按照參數限制記錄數,取出游標中的記錄。
A4:為報表返回結果集。
上述腳本只處理了一個中間文件,如果需要從多個文件同時查詢數據,腳本可以這樣編寫(以 2 個為例):
其中中間數據文件按年份存儲,每 5 年一個。如果查詢 1996 到 2005 年間的數據,就需要讀取 2 個文件。腳本中 A3 對兩個文件的游標進行了縱向拼接,合并成一個游標,然后采用與第一個腳本相同的方式進行處理。當查詢的數據范圍繼續擴大,需要多個文件的時候,可以通過循環的方式將多個文件游標進行縱向拼接合并。
3、設計報表
這一步包括在潤乾報表中調用集算腳本,編輯報表表達式完成報表制作等等,這些是報表制作的常規動作了,不再贅述。
與一般優化方式類似,使用預先計算來提高報表性能要充分考慮使用場景。對某些計算過程容易拆分的場景特別適合使用預先計算,如大表匯總數據與其他表做連接,這時可以先將大表匯總數據預先存成文件,再與其他表做連接計算。此外,數據的實時性要求也需要充分考慮,比如在歷史查詢類的報表中就比較適合使用預先計算,當然潤乾報表還提供了其他手段來保證數據的實時性要求。
總結一下,由于一般報表工具不具備文件計算能力,因此要實現預先計算往往要借助數據庫進行;而潤乾報表擁有完整的文件計算能力,可以避免數據庫中間表帶來的各種弊端,這一點對用戶極具實用價值。
更多性能優化相關問題請查看:性能優化相關問題分類導航
總結
以上是生活随笔為你收集整理的润乾报表分组求和_实现报表数据预先计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 印度禁用小米浏览器:官方推定制版MIUI
- 下一篇: android 获取app自启动权限状态