巧用參數注入

1. 概述

在實際應用會出現多資料集聯動報表,報表的展現速度會很慢,使用 SQL 語句聯動多個資料表又十分複雜。FineReport 提供「動態參數注入」功能,可加快報表的展現速度,又不用編寫複雜的 SQL 語句。

動態參數注入,是透過注入的值對資料庫中的資料進行操作的,只取對應的資料,進而提高報表的效能。本文將簡單對比資料欄過濾複雜 SQL 動態參數注入三種方法的展現效率。

注:動態參數注入只適用於「小資料量」的範本加快速度使用。大數據量的範本反而會降低載入速度。

       例如 4 萬筆資料注入到兩個資料集裏面,實際上會依次載入 8 萬筆資料,反而會變慢。

2. 範本準備

2.1 資料欄過濾

2.1.1 建立報表

建立兩個資料集,ds1:SELECT * FROM 訂單;ds2:SELECT * FROM 訂單明細

報表樣式如下圖所示:

2.1.2 設定過濾條件

選擇 D2 儲存格,對 D2 儲存格設定過濾條件,可選列為訂單 ID,運算子為等於,對應儲存格為A2。如下圖所示:

2.2 動態參數注入

2.2.1 修改 SQL 語句

將上述範本中,資料集 ds2 的 SQL 語句,修改成:SELECT * FROM 訂單明細 where 訂單ID =${orderid}

將參數orderid預設值設定為訂單 ID 中的一個值,如:10248

2.2.2 參數注入設定

雙擊原進行過濾的 D2 儲存格,在彈出資料欄對話框中,點選「動態參數注入」按鈕,彈出「動態參數注入對話框」。

插入參數orderid,設定值為 A2儲存格,同時刪除過濾條件。如下圖所示:

2.3 複雜 SQL 語句

建立資料集,SQL 語句為: select a.訂單ID,訂購日期,到貨日期,發貨日期,產品ID,單價,數量,進價,折扣 from 訂單 a,訂單明細 b where a.訂單ID=b.訂單ID

報表樣式參考本文 2.1.1 節。

3. 方法對比

3.1 資料欄過濾

分頁預覽本文 2.1 節制作的報表,從日誌中可看出,是將第二個資料集中的資料全部取出了,如下圖所示:

注:若將資料全部取出會降低報表的效能,因此會降低報表的展現速度。

3.2 複雜 SQL

若將兩個資料集定義成一個資料集,則 SQL 語句非常複雜,容易寫錯且難排查問題。

3.3 動態參數注入

分頁預覽本文 2.2 節制作的報表,日誌中可看出每執行一行就只是取出的對應訂單 ID 的那筆資料,如下圖所示:

4. 總結

方式推薦使用場景
資料欄過濾當資料量較小時,可使用資料欄過濾進行設定
複雜 SQL任意場景下均可使用,當資料量較大時推薦使用 新計算引擎 
動態參數注入當資料量較小或適中時,建議使用參數注入功能,可以降低寫 SQL 的時間,並使得範本運作速度有所提升


附件列表


主題: 效能優化
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙

反饋已提交

網絡繁忙