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

2021-09-23 18:25:36 字數 1818 閱讀 7079

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

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

這個報表的「比去年同期」是指與去年同月份的比值,無對應月份則為空;要求只顯示本年資料。

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

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

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

具體的實現方式如下:

1、先在集算器設計同期比、上期比的指令碼(sales.dfx):a1

=connect(「demo」)

2=a1.query(「select year( 訂購日期) 年,month(訂購日期) 月,sum(單價 * 數量) 金額,null 比上期,null 比去年同期 from 訂單, 訂單明細 where 訂單. 訂單 id = 訂單明細. 訂單 id and (year( 訂單. 訂購日期)=? or year(訂單. 訂購日期)=?)group by year( 訂購日期) ,month(訂購日期) order by year(訂購日期) ,month(訂購日期)」,arg_year-1,arg_year)

3=a1.close()

4=a2.run(比上期 = 金額 / 金額 [-1])

5=a4.sort(月)

6=a5.run(比去年同期 =if( 年 == 年 [-1]+1 && 月 == 月 [-1], 金額 / 金額 [-1],null))

7=a6.select(年:arg_year)

8return a7

**說明:

a1:連線資料來源 demo。

a2:取出兩年的訂單資料,按照年月彙總、排序,arg_year 是指令碼(及報表)的輸入引數。

a3:關閉資料連線。

a5:按月份排序。

a7:只選出本年資料,通過 a8 為報表返回結果集。

2、再在潤幹報表中定義報表引數和集算資料集:

3、在潤幹報表設計器中設計報表如下:

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

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

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

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

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

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

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