1. 概述
1.1 問題描述
有時報表形式非常簡單,只是簡單的單數據源明細報表,但是數據量非常大,百萬、千萬甚至更多。報表取數及計算時間相當長。
希望能夠提高報表展示速度,對於用戶來說,查詢報表不會有滞後的感覺。
1.2 解決方案
對於單數據集的明細報表,可以啓用 ,提高報表展示速度,優化用戶體驗。
2. 行式引擎簡介
2.1 原理
取出全部數據後再執行報表,最後返回整體的報表結果給浏覽器,用戶訪問到看到結果的時間=報表取數時間+報表執行時間。
邊取數邊執行報表,執行到哪頁用戶就可以看到哪頁,用戶訪問到看到結果的時間=首頁數據讀取時間+首頁計算時間。
2.2 報表引擎屬性
默認報表不啓用行式引擎,當報表數據量大且報表不複雜時,可以啓用該屬性。
按頁取數執行報表,能夠大大縮短報表執行時間,提高用戶體驗。
點擊菜單「模板>報表引擎屬性」,會彈出報表引擎屬性界面,如下圖所示:
2.3 注意事項
1)行式引擎不支持部分功能
行引擎報表注重的是性能,由原理可知,對於行引擎報表,每頁的計算必須是獨立的,即報表不能有單元格關聯的複雜運算等。
爲了提高行引擎報表的性能,FineReport 舍棄了一些複雜的功能,如下所示:
不支持單元格過濾,不支持單元格字段彙總求和。
不支持重複結尾行。
條件屬性不支持行高、列寬、超級鏈接、行後分頁、形态、控件。
僅支持從上到下擴展屬性,其他屬性設置均不支持。
不支持懸浮元素,層次坐标,分欄,sheet 間運算。
不支持分頁預覽展示圖表,不支持子報表。
不支持單元格内容提示使用公式。
不支持分頁分 sheet 導出 Excel 。
不支持數據列的結果集篩選。
不支持報表的分組展示。
不支持使用「$$$」進行傳參。
2)行式引擎按頁取數
行式引擎按頁取數只适用於 Oracle,MySQL,HSQL 和 SQL Server 2012 及以上數據庫。
如 Sqlite,Access,SQL Server 2005 等其他數據庫必須手動編寫分頁 SQL,才能實現按頁取數。
對於需要編寫分頁 SQL 的數據庫,請參考 單數據集分頁 SQL 實現層式報表 章節。
注:SQL Server 2012 及以上是支持行式引擎的,但是 SQL 中一定要寫 order by。
注:數據量較大時,請勾選「使用按頁運算分段執行報表」,以防出現卡頓現象。
3)多數據集報表
行式引擎只适用於單數據源報表,對於多數據集報表,行式引擎無法實現對其進行分頁顯示,多數據源的層式報表的實現請查看 多數據集實現層式報表。
4)引擎插件
如果用戶所在場景行式引擎無法支持,則可以試用 新計算引擎插件 ,該插件實現了多數據源情況下的分頁查詢功能,用戶無需再寫複雜的分頁 SQL 或 JS 按鈕,就可以讓報表快速完成首頁加載。
注:該插件支持 Oracle、SQL Server、MySQL、HANA、PostgreSQL、Impala、DB2 等大部分主流 JDBC 數據源。