反饋已提交

網絡繁忙

資料集參數

1. 概述

1.1 應用場景

類似通訊、監視行業,每天都有海量資料生成,資料庫表中總資料量非常大,而報表中往往只要獲取當天的幾百筆資料就可以了。

如果使用範本參數,就需要先取出所有資料,再進行過濾,取數+過濾,將消耗大量時間,極大影響報表的查詢效率。而資料集參數在資料庫查詢時就已經完成了資料過濾,所以使用資料集參數設計的查詢報表會比使用範本參數的效率高。 

1.2 功能簡介

定義資料集時,透過在 SQL 語句中新增 ${para} 格式的內容,即可定義資料集參數,定義完成後,使用方法和範本參數一緻。如下圖所示,下拉框選擇【華東】,點選【查詢】,只查詢出報表中華東地區的銷售資訊。

注:資料集參數不與資料集綁定,多個資料集中的同名參數為同一個參數,參數值以最後一次指派為準。

2. 使用說明

資料集 SQL 查詢語句中可以使用參數  ${} 動態地生成過濾條件, ${}  執行結果與 SQL 語句連接起來形成最終的查詢語句,傳遞給資料庫執行。SQL 語句中可以使用多個  ${} ,定義多個參數使用。

使用 ${}  定義參數時,{ }內寫入的內容即為定義參數的內容,其中可以使用 FineReport 所有內建函式,如 if 函式、len 函式等。{ }中除了 FineReport 內建函式名、常數、字串連結文法外,其他變數就是資料集參數。

譬如: SELECT * FROM {銷量} where 地區 = '${地區}'  中定義的資料集參數為 地區

注:定義資料集參數時,盡量不要在${}中直接使用{ 、},可能會無法決議。若必須在${}中直接使用{ 、},需要使用 函式 CONCATENATE 轉義,例如:SELECT * FROM 銷量${'{'}語句會出現報錯,需要將語句改為 SELECT * FROM ${CONCATENATE("銷量{")},即可正常查詢。 

帶有資料集參數的 SQL 語句寫好後,點選資料集定義介面【預覽】按鈕時,若顯示出定義的資料集參數。則表明資料集參數定義成功。如下圖所示:

在參數位置輸入值後點選確定,參數值就會代入 SQL 語句中,查詢出資料。


如下給出幾種常見的應用方式,使用者在使用時按實際場景調整即可。注意,因為資料集參數用在 SQL 查詢語句中,所以在使用時,特別要注意文法和對應資料庫型別的 SQL 文法匹配。

2.1 簡單應用

如要定義一個【地區】參數,透過此參數過濾資料。建立資料集時,就可以在 SQL 查詢語句中定義一個資料集參數 地區SELECT * FROM 銷量 where 地區 = '${地區}'

SQL 語句中,其他內容都是確定的,唯有 地區 不確定,當地區對應不同值時,資料集也將查詢出不同地區的資料。

如果要實現多選查詢,就可以結合 SQL 語句  in  的用法定義一個參數,如:SELECT * FROM 銷量 where 地區 in ('${地區}')

輸入參數值時注意要和資料庫文法一緻,如查詢華東華北的資料 SQL 文法為 SELECT * FROM 銷量 where 地區 in ('華東','華北'),輸入參數值形式應該為 '華東','華北',這樣加上定義時的 ('${地區}') 就會連結成正確的文法。

2.2 帶公式的應用

定義資料集參數時,可以使用 FineReport 所有內建函式。如需要定義一個地區參數,當地區為空時,查詢所有地區的資料;當 地區 不為空時,查詢對應地區的資料:SELECT * FROM 訂單 where 1=1 ${if(len(地區) == 0,"","and 貨主地區 = '" + 地區 + "'")}

定義時,先使用函式 len 獲取參數的長度,然後使用 if 函式進行判斷。

如果地區參數的長度為 0,則內容為空,SQL 連接後為 SELECT * FROM 訂單 where 1=1

如果地區參數的長度不為 0,則將字串 and 貨主地區 = '參數地區連結成一句 SQL ,如地區的值為華東,那麼參數定義部分的執行結果為and 貨主地區='華東',完整的 SQL 語句就變成:SELECT * FROM 訂單 where 1=1 and 貨主地區='華東'

2.3 定義多個參數

如果在資料過濾中,需要多個過濾條件,則可以定義多個資料集參數,如:SELECT * FROM 訂單 where 1=1 ${if(len(地區) == 0,"","and 貨主地區 = '" + 地區+ "'")} ${if(len(province) == 0,"","and 貨主省份 = '" + province + "'")}

其中使用了兩次 ${},定義了兩個資料集參數 地區province,定義過程解譯可參考第二章第2節。

2.4 嵌套應用

定義資料集參數時,也可以透過一些邏輯判斷巢定義多個資料集參數。如:SELECT  * FROM 銷量 where 1=1 ${if(len(地區)!=0," and 地區='"+地區+"'",if(len(product)=0,""," and 産品='"+product+"'"))}

if 函式是 FineReport 內建公式,變數地區product是資料集參數,如果len(地區)!=0,即地區參數不為空,即以SELECT * FROM 訂單 where 1=1 and 貨主地區='地區'查詢,如地區為空,則要判斷 len(product),若product參數為空,則不連結任何查詢條件,即查出所有資料,否則以 SELECT * FROM 訂單 where 1=1 and 産品='product'查詢。

3. 範例

3.1 定義資料集參數

建立資料集 ds1,資料庫查詢對話框中寫入 SQL 查詢語句 【SELECT * FROM {銷量} WHERE 地區='${地區}'】,相當於在資料庫查詢語句中定義一個資料集參數【地區】。點選右下角【重新整理】按鈕,下方資料集參數管理面板會顯示已經建立好的資料集參數【地區】,設定它的預設值為【華東】。點選【確定】,即同時完成了資料準備和定義資料集參數的工作。如下圖所示。

3.2 表格樣式設計

設定表格樣式,其中給表格選擇預定義樣式 【Head】型別的樣式,標題字體自動置中。如下圖所示。

將資料集中的欄位拖入到對應儲存格中,字體【置中】,給表格整體新增預定義樣式預設天藍色內外框。如下圖所示。

選中 C2 儲存格,右邊屬性面板選擇【儲存格元素】→【基本】。資料設定下拉框選擇【匯總】→【求和】。如下圖所示。

3.3 參數新增元件

點選參數面板的【編輯】按鈕,進入參數面板設定介面。如下圖所示。

右上角元件設定面板會顯示沒有新增元件的參數,點選 【地區】或者點選【全部新增】,將參數的預設元件新增到參數面板。

注1:參數與元件是透過參數名稱進行綁定的,也就是說當元件名稱與參數名稱一緻時,參數與元件就進行了綁定,即在 Web 端給元件指派就相當於給參數指派。

注2:如果不想點選【全部新增】或【參數】快捷新增預設元件,也可以直接從元件欄中將元件拖拽到參數面板中,修改元件的名稱與參數名稱一緻,即可將元件與參數進行綁定。


點選自訂元件的【編輯】按鈕,選擇【下拉框元件】型別,讓使用者透過下拉框選擇參數值。如下圖所示。


要想報表預覽時點選【下拉框】可以出現參數值的選項,則需要設定下拉框的資料字典為銷量表下的地區欄位。參數面板選中【下拉框元件】,右邊屬性面板選擇【屬性】→【資料字典】,點選資料字典【編輯】按鈕,彈出資料字典設定對話框。資料字典的型別設定為【資料庫表】,資料庫為 【FRDemoTW 】,選擇資料庫表為【銷量】,欄名實際值和顯示值都為【地區】。如下圖所示。

注:元件綁定資料字典時,當資料集中有和元件同名的參數時,不要使用,否則將造成循環引用,使得範本出錯,譬如這裡的 ds1 。

點選【標簽元件】,將元件值命名為【地區:】。將【查詢】按鈕往左邊拖拽,形成緊湊式佈局,讓元件面板更加美觀。再次點選參數面板的【編輯】按鈕,完成參數元件的設定。如下圖所示。

3.4 效果預覽

3.4.1 PC 端

儲存報表,點選【分頁預覽】查看報表。

下拉框選擇【華東】,點選【查詢】,只查詢出報表中華東地區的銷售資訊。

下拉框選擇【華北】,點選【查詢】,只查詢出報表中華北地區的銷售資訊。


3.4.2 行動端

行動端查看報表的方式參見 報表行動端預覽

下拉框選擇【華東】,點選【查詢】,只查詢出報表中華東地區的銷售資訊。下拉框選擇【華北】,點選【查詢】,只查詢出報表中華北地區的銷售資訊。

4. 已完成範本

已完成範本可參見:【%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Primary\Parameter\資料集參數.cpt】

點選下載範本:資料集參數.cpt

附件列表


主題: 參數應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

文 檔回 饋

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

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

不再提示

10s後關閉