1. 概述
1.1 背景
某集團長期使用 Finereport 製作報表看板,開發人員小A 在使用程式中發現一些問題:
由於使用 FineReport 直連業務庫,透過複雜sql實現報表取數,導致前端報表展示速度較慢;
不支援跨資料庫取數,因此一直都透過複雜程式程式碼來實現,開發成本高、取數也比較緩慢;
報表資料集無法被引用和聯動,無法進行資料集的複用。
本文主要介紹業務系統資料經過FDL處理落庫後,FineReport呼叫該資料進行報表開發的全流程,透過FDL+FR的組合方案解決以上三個問題。
1.2 思路
透過 FineDataLink 對需要複雜 SQL、跨資料庫聯動等的資料進行處理並匯出到應用資料庫;
然後直接使用處理好的資料進行 FineReport 報表開發;
使用 FineDataLink 視覺化的操作介面和方便的功能,簡化 FineReport 資料加工和處理步驟,提升看板的前端展示速度,同時資料集可以進行復用,提高報表開發速度。
2. 實現方法
2.1 場景說明
FRDemo 資料庫中存放着「S訂單」、「S訂單明細」、「銷售明細」、「FD_年度資產分類表」四張表。
現在希望對這些資料進行處理並用處理好的資料進行報表展示。
資料表 | 處理要求 | 問題 |
---|---|---|
「S訂單」、「S訂單明細」 | 跨資料庫聯動 | 原先只能透過複雜的程式程式碼實現 |
「銷售明細」 | 欄轉列處理 | SQL 較複雜,開發時間較長 |
「FD_年度資產分類表」 | 複雜的SQL | SQL 較複雜,開發時間較長,且報表資料集前端展示載入時間較長 |
2.2 方案說明
1)將複雜sql處理、跨庫聯動等步驟放在 FineDataLink 中進行,對資料庫 FRDemo 中存在資料表進行如下操作:
將 FRDemo 資料庫中的「S訂單」和FDLDemo資料庫中的「S訂單明細」資料透過「訂單ID」主鍵聯動後,匯出到FDLDemo應用庫;
將 FRDemo 資料庫中的 「銷售明細」進行欄轉列後,根據業務要求按照不同維度進行統計,並匯出到FDLDemo應用庫;
將 FRDemo 資料庫中的「FD_年度資產分類表」進行復雜 SQL 處理後匯出到 FDLDemo 應用庫;
2)在 FineDataLink 中,透過將三個任務設定統一的調度週期進行管理,保證該資料定時更新到 FDLDemo 應用庫;
3)使用 Finereport 設計器連結 FDLDemo 應用庫,使用簡單SQL語句進行取數後,製作報表。
3. 操作步驟
3.1 跨資料庫聯動
將 FRDemo 業務庫中的「S訂單」和 FDLDemo 資料庫中的「S訂單明細」資料透過「訂單ID」主鍵聯動後,落庫到 FDLDemo 應用庫中。
1)建立 ETL 任務命名為「跨庫聯動」,使用資料轉換,將FRDemo 業務庫中的「S訂單」和 FDLDemo 資料庫中的「S訂單明細」資料取出,便於後續進行資料聯動,如下圖所示:
2)新增「資料聯動」算子,將兩個資料表輸入算子連結至資料聯動,進行跨庫聯動製作新的資料表,設定連結方式和連結欄位,如下圖所示:
點選預覽即可查看跨資料庫聯動後的資料表,如下圖所示:
3)對聯動好的資料表進行欄位設定,比如去掉重複的合併依據「訂單ID1」等等,如下圖所示:
4)將製作好的跨資料庫取數資料表命名為「dingdanxiangxi」並匯出到「FDLDemo」資料庫中,如下圖所示:
3.2 資料欄轉列
將 FRDemo 資料庫中的 「銷售明細」進欄轉列後,根據業務要求按照不同維度進行統計,並匯出到 FDLDemo 資料庫。
欄轉列希望實現的效果對比如下圖所示:
1)建立 ETL 任務命名為「資料欄轉列」,使用資料轉換,將FRDemo 業務庫中的「銷售明細」取出,便於後續進行列轉欄處理,如下圖所示:
2)對「銷售明細」資料進行欄轉列,將二維表地區銷售資料轉為一維表,如下圖所示:
3)此時希望對已經欄轉列的資料繼續進行處理,計算每個城市的總銷售金額,可以使用Spark SQL,編寫 SQL 語句,如下圖所示:
得到每個城市的總銷售金額,點選「資料預覽」,如下圖所示:
4)將處理好的資料命名為「sum_xs」並匯出到 FDLDemo 資料庫中,如下圖所示:
3.3 複雜 sql 查詢
將 FRDemo 資料庫中的「FD_年度資產分類表」進行復雜 SQL 處理後匯出到 FDLDemo 應用庫,以此減輕設計器直接取數造成的載入緩慢問題。
1)建立 ETL 任務,新增資料同步,在資料來源中新增較複雜的 SQL 語句進行取數,如下圖所示:
2)將查詢好的資料命名為「zichanbiao」,匯出至 FDLDemo 資料庫中,如下圖所示:
3.4 設定調度週期管理任務
三個任務均設計完成,此時希望能定時進行資料更新,就需要設計調度週期,對任務進行管理。
設計思路:
1)建立 ETL 任務命名為「FDL&FR組合應用」,新增呼叫任務,命名為跨庫聯動,即呼叫了操作步驟中跨資料庫聯動的任務,如下圖所示:
同理,對資料欄轉列和複雜查詢同樣設定調傭任務,如下圖所示:
2)新增訊息通知,設定若三個任務執行失敗,則通知某個任務執行失敗,如下圖所示:
${prepose.failedInfo} 為內建參數,詳情參見:內建參數
3)使用遠端將三個任務與失敗執行的訊息通知相連,設定在任務執行失敗時,執行「訊息通知-失敗執行」,如下圖所示:
3)同理,設定任務執行成功時的訊息通知,如下圖所示:
${prepose.successInfo}為內建參數,詳情參見:內建參數
4)設定任務的執行頻率,如下圖所示:
3.5 執行任務
設定完成後,即可儲存並運作任務,如下圖所示:
3.6 FineReport 直接取數製作報表
使用 FineReport 設計器連結 FDLDemo 資料庫,取出跨庫聯動資料表「dingdanxiangxi」、欄轉列資料表「sum_xs」、複雜查詢資料表「zichanbiao」,如下圖所示:
截圖為dingdanxiangxi,其他資料表同理。
製作報表,如下圖所示:
4. 效果查看
FineDataLink 中的資料處理程式,詳情參見:https://demo.finedatalink.com/ 「FineDataLink&FineBI組合方案」。
報表範本參見:销售库存周转.frm