帶隱藏格報表的性能優化方案

報表中可以通過隱藏格進行有效的輔助計算,但如果報表攜帶大量隱藏格,又會對性能產生很大影響。這是因爲大量隱藏格會佔用內存、降低運算速度。而且隱藏單元格除了單元格值外,還同時記錄了很多顯示屬性值,比如:字體、顏色、顯示方式等等。雖然隱藏單元格並不顯示,但是這些屬性還在,如果帶着這些屬性計算,同樣也會影響計算速度。

下面這個《1997 年訂單情況統計》報表就是一個典型的隱藏格影響性能的例子:

帶隱藏格報表的性能優化方案

這個報表的“比去年同期”是指與去年同月份的比值,無對應月份則爲空;要求只顯示本年數據。

實現這個報表需要通過格間計算,將 1996 年的數據讀取到報表單元格中,以便完成比上期、比去年同期的計算,但 1996 年的單元格並不顯示,因此需要隱藏起來。所以,這個報表的實際單元格數量要比客戶看到的多的多。我們可以通過潤乾報表的格間計算來看一下具體的實現:

帶隱藏格報表的性能優化方案

從上圖可以看到,1996 年的行也在報表中,只是隱藏了起來。另外還有“年”列也是隱藏的。

針對這種情況,可以考慮採用潤乾報表的解決方案,將格間計算轉移到集算引擎,從而避免大量隱藏格和顯示屬性對計算性能的影響。潤乾報表方案和傳統方案在體系結構上的對比如下圖所示:

帶隱藏格報表的性能優化方案
具體的實現方式如下:

1、先在集算器設計同期比、上期比的腳本(sales.dfx):

帶隱藏格報表的性能優化方案
代碼說明:

A1:連接數據源 demo。

A2:取出兩年的訂單數據,按照年月彙總、排序,arg_year 是腳本(及報表)的輸入參數。

A3:關閉數據連接。

A4:計算比上期,這裏注意到使用 [-1] 來引用上一條記錄。

A5:按月份排序。

A6:計算相同月份和上一年的比值,即同期比。

A7:只選出本年數據,通過 A8 爲報表返回結果集。

2、再在潤乾報表中定義報表參數和集算數據集:
帶隱藏格報表的性能優化方案

帶隱藏格報表的性能優化方案

3、在潤乾報表設計器中設計報表如下:
帶隱藏格報表的性能優化方案

4、最後運行報表,輸入參數即可得到前面的報表。從上圖中可以看到,設計的報表中沒有隱藏格和複雜的公式,設計變得很簡單,實際運行性能也得到了提高。

更多性能優化相關問題請查看:性能優化相關問題分類導航

存儲過程性能低怎麼破?
如何提高報表的取數性能
數據量大計算複雜時,數據預處理該怎麼做
各種多表關聯嵌套子查詢的性能問題怎麼破

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章