1. 概述
本文介紹如何在 FineReport 中使用計算功能。
將告訴使用者何時可使用計算、如何使用公式編輯器。
如果剛接觸 FineReport 的使用者,不瞭解函式,則非常適合從這裏着手。
2. 為什麼使用計算
透過計算,可以根據資料源中已存在的資料建立新資料,並對資料執行計算。
這樣可以執行復雜的分析,並且可以引用計算結果進行視覺化範本製作。
3. 何時使用計算
計算允許利用資料源中已存在的資料建立新資料。
有很多原因,可以使用函式進行計算。可能包括:
2.1 資料源中缺少分析所需的資料
內建 FRDemo 資料表「S訂單明細」中有「單價」、「數量」、「進價」、「折扣」欄位,但需要計算每個訂單ID的「利潤」以及所有訂單 ID 的「平均利潤」,則可以使用類似於以下內容的公式計算,如下圖所示:
利潤:C2 * (B2 - D2) * (1 - E2)
平均利潤:AVERAGE(F2)
結果如下圖所示:
2.2 想要在組件中轉換數值
例如可能要將字串「2021/02/07星期三」轉換為時間型,輸入公式:TODATE("2021/02/07星期三","yyyy/MM/ddEEE","zh"),如下圖所示:
2.3 想要設定圖表樣式顏色
例如設定表格隔行變色。
詳情參見:隱藏行後隔行變色
3. 函式計算支援的使用位置
3.1 在公式編輯框中使用函式
FineReport 中可以使用「公式編輯器」的位置有如下幾個:
使用位置 | 圖示 |
---|---|
條件屬性 | 範例:隔列/欄設定背景色 |
資料字典 | 範例:資料字典 2.4 節 |
篩選過濾 | |
填報設定提交條件 | |
圖表標題 | ![]() |
圖表軸定義 | |
定義圖表儲存格資料源 | ![]() |
報表頁首與頁尾 | ![]() |
儲存格內容提示 | ![]() |
3.2 在 SQL 編輯框中使用函式
3.2.1 SQL 中使用普通函式
在 SQL 中使用公式,可以將公式放在 ${} 中,例如參數為空傳回全部的 sql 語句:
SELECT * FROM 訂單 where 1=1 ${if(len(area) == 0,"","and 貨主地區 = '" + area + "'")} ${if(len(province) == 0,"","and 貨主省份 = '" + province + "'")}
參數/公式 | 說明 |
---|---|
area 和 province | 自訂的參數 |
if(len(area) == 0,"","and 貨主地區 = '" + area + "'") | 如果len(area)!=0,即 area 參數不為空,比如說 area 的值為華東,那麼 IF 語句的執行結果為and 貨主地區='華東',然後再把這句話連接到 SQL 語句當中,SQL 語句就變成: SELECT * FROM 訂單 where 1=1 and 貨主地區='華東' and 貨主省份='江蘇' |
3.2.2 SQL 中使用 SQL 函式
SQL 語句其實是字串。因此可以從資料庫呼叫一個 SQL 語句作為字串進行取數。此時即用到 SQL函式,例如公式:
=sql("FRDemoTW","SELECT * FROM 銷量 ",1,1) 匯出結果為華東
同時也可以把這個字串用在 SQL 公式中作為字串執行,因此建立資料集時可以定義為:SELECT * FROM where 地區='${sql("FRDemo","SELECT * FROM 銷量 ",1,1)}'
也就是 SELECT * FROM where 地區='華東'。
3.3 在 JS 編輯框中使用函式
作為一款 B/S 產品,browser 端的 JavaScript 是必不可少的。
如何在 JS 編輯框中使用公式詳情參見:在JS中使用FR公式