FineReport DEMO

Author

Bennie Liu

Published

November 15, 2023

資料來源

本份範例中所使用資料為FileReport中內建資料庫FRDemoTW中的訂單資料集,使用欄位如圖,

複合式報表呈現資料視覺化及資料集內容。

複合式報表

複合式報表指一個報表中包含多個模組,每一塊都類似一張單獨的報表或者一張圖表,塊與塊之間相對獨立,互不影響。
複合式報表特點:空白畫布式設計介面,每個模組相互獨立,專門解決大報表難題,儲存格擴展分離,互不影響。
複合式報表還存在一些不足:不支援自適應,儲存格擴展分離但組件依舊相互推開。

完成的報表cpt檔可點此下載,學習資源: FileReport11.0文檔

SQL Code

範例呈現基本數據分佈外,另套用RFM模型分析客群面向,主要表格由訂單資料集轉換如下:

WITH RFM_Scores AS (
    SELECT
          客戶ID
        , CAST(ROUND(SUM(應付金額)) AS INT) AS 總應付金額
        , COUNT(DISTINCT 訂單ID) AS 購買次數
        , MIN(CAST((JulianDay(date('2012-01-01')) - JulianDay(SUBSTR(訂購日期, 1, 10))) AS INTEGER)) AS 最近購買至今天數
    FROM 
        訂單
    WHERE 
        SUBSTR(訂購日期, 1, 4) >= '2000' AND
        CAST(SUBSTR(訂購日期, 1, 4) AS INT) IN (${Year})
    GROUP BY 
        客戶ID
), Averages AS (
    SELECT
          AVG(總應付金額) AS 平均應付金額
        , AVG(購買次數) AS 平均購買次數
        , AVG(最近購買至今天數) AS 平均最近購買至今天數
    FROM 
        RFM_Scores
), Final AS (
SELECT
      RFM.客戶ID
    , RFM.總應付金額
    , AVG.平均應付金額
    , RFM.購買次數
    , AVG.平均購買次數
    , RFM.最近購買至今天數
    , AVG.平均最近購買至今天數
    , CASE WHEN RFM.總應付金額 >= AVG.平均應付金額 THEN 1 ELSE 0 END AS Monetary_Score
    , CASE WHEN RFM.購買次數 >= AVG.平均購買次數 THEN 1 ELSE 0 END AS Frequency_Score
    , CASE WHEN RFM.最近購買至今天數 <= AVG.平均最近購買至今天數 THEN 1 ELSE 0 END AS Recency_Score
    , (CASE WHEN RFM.總應付金額 >= AVG.平均應付金額 THEN 1 ELSE 0 END) +
      (CASE WHEN RFM.購買次數 >= AVG.平均購買次數 THEN 1 ELSE 0 END) +
      (CASE WHEN RFM.最近購買至今天數 <= AVG.平均最近購買至今天數 THEN 1 ELSE 0 END) AS Total_Score
    , CAST(CASE WHEN RFM.總應付金額 >= AVG.平均應付金額 THEN 1 ELSE 0 END AS TEXT) || 
      CAST(CASE WHEN RFM.購買次數 >= AVG.平均購買次數 THEN 1 ELSE 0 END AS TEXT) || 
      CAST(CASE WHEN RFM.最近購買至今天數 <= AVG.平均最近購買至今天數 THEN 1 ELSE 0 END AS TEXT) AS RFM_String
FROM 
    RFM_Scores RFM,
    Averages AVG
)

SELECT
    *,
    CASE 
        WHEN RFM_String = '111' THEN '高價值客戶'
        WHEN RFM_String = '011' THEN '忠誠客戶'
        WHEN RFM_String = '101' THEN '消費潛力客戶'
        WHEN RFM_String = '001' THEN '新近客戶'
        WHEN RFM_String = '110' THEN '常規客戶'
        WHEN RFM_String = '100' THEN '流失風險客戶'
        WHEN RFM_String = '010' THEN '低價值忠誠客戶'
        ELSE '其他類型客戶'
    END AS Customer_Type
FROM 
   Final;

複合式報表內容截圖

資料年度2010-2011

資料年度2011

資料年度2010

訂單分析

訂單中訂購日期僅有2010年1~6月及2011年1~6月

比較2010年及2011年訂單分佈,可發現:

  1. 業績持平,同比沒有增加。
  2. 流失部分2010年高價值客戶,但流失業績由西部地區訂單填補。
  3. 高價值及忠誠客戶佔合併業績50%以上。