報表性能優化方案之善用參數注入

1. 問題描述web

對於多數據集關聯報表,當數據很大時報表的展示速度就會很慢,或經過寫sql語句又很複雜。爲此FineReport提供一種,既可加快報表的展示速度,又不用編寫複雜的sql語句的方案。即便用動態參數注入功能。sql

2. 原理數據庫

動態參數注入,是經過注入的值對數據庫中的數據進行操做的,只是取對應的數據,因此會提升報表的性能。性能

3. 示例大數據

  • 新建模板spa

展示多個關聯數據表的數據設計

SQL語句,ds1:SELECT * FROM [訂單]日誌

SQL語句,ds2:SELECT * FROM 訂單明細orm

  • 報表樣式產品

 

傳統作法:先定義多個數據集,而後在報表中設置過濾條件,或使用鏈接將多個數據表定義成一個sql,但這兩種方案會產生的一系列問題(具體下面有介紹)。而使用動態參數注入的功能可解決大數量報表展示的速度,下面對比看下這三種作法。

3.1 設置過濾

此方法是定義兩個數據集查詢出全部數據,而後在報表中設置過濾條件。

分頁預覽query_like.cpt,從日誌中可看出,是將第二個數據集中的數據所有取出了,以下所示:

 

注:對於數據量大的報表,若將數據所有取出會下降報表的性能,所以會下降報表的展示速度。

3.2 定義sql

如果採用將兩個數據集定義成一個數據集,則SQL語句爲:select a.訂單ID,訂購日期,到貨日期,發貨日期,產品ID,單價,數量,進價,折扣 from 訂單 a,訂單明細 b where a.訂單ID=b.訂單ID

注:當數據集不少時, 這樣定義sql很麻煩,看了也以爲很複雜。

3.3 使用動態參數注入

  • 修改sql語句

將上述模板中,數據集ds2的sql語句,修改爲:SELECT * FROM [訂單明細] where 訂單ID =${orderid},並將參數orderid設置個默認值爲訂單ID中的一個值,如:10248。

  • 參數注入設置

雙擊原進行過濾的E2單元格,在彈出數據列對話框中,點擊動態參數注入按鈕,彈出動態參數注入對話框,而後點擊插入:名字和值分別爲數據集ds2的參數:orderid和數據集ds1對應數據列所在的單元格:A2,且同時刪除過濾條件。

點擊設計器預覽是,日誌中可看出每執行一行就只是取出的對應訂單ID的那條數據,以下圖所示:

 

注:動態參數注入功能適用於大數據量報表,可以明顯的體現出速度優點,而上文中的模板只是介紹其方法的。

相關文章
相關標籤/搜索