反饋已提交
網絡繁忙
使用參數進行報表資料查詢時,希望當參數值為空時,點選查詢後,顯示報表中的全部資料。即在沒有篩選條件的時候,顯示報表所有內容,相當於不選值就不過濾。
如下圖所示:
參數過濾查詢,一般都是透過範本參數或者資料集參數實現,所以要想實現此場景,就需要修改過濾條件和資料集定義方式。修改的原則:
資料集參數:當參數值為空時,查詢報表所有內容
範本參數:當參數值為空時,不進行過濾
正常定義 資料集參數 時,參數有值,則將值連接到 SQL 中執行查詢,參數無值,則 SQL 查詢語句查詢條件為一個空字元,查不出值。如下:
SELECT * FROM 銷量 where 地區 = '${area}'
area 參數有值時,如華東,則查詢語句為 SELECT * FROM 訂單 where 貨主地區='華東',查詢出華東地區的資料。area 參數無值時,則查詢語句為 SELECT * FROM 訂單 where 貨主地區='',查詢無資料。
現在要實現參數無值時查詢全部,則在查詢前,需要先判斷參數是否有值,有值則執行帶有查詢條件的查詢;無值則查詢資料。
即有值時:SELECT * FROM 銷量 where 地區 = '${area}'
無值時:SELECT * FROM 銷量
這時就要考慮判斷條件如何實現了,因為定義資料集參數時,支援使用 FineReport 所有內建函式,所以就可以透過 IF 函式來構造判斷;參數為空如何判斷呢,參數為空即參數值長度為 0,所以就可以使用 Len 函式來判斷參數是否為空。
組合起來,定義資料集參數的SQL語句如下:
SELECT * FROM 銷量 ${if(len(area) == 0,"","where 地區 = '" + area + "'")}
這樣,當參數有值和無值時,將分別執行不同的 SQL 語句。當參數值為空時執行 SELECT * FROM 銷量 ,不加任何條件即查詢所有資料。
範本參數實現查詢時,是透過報表的過濾功能實現。如下圖所示
給儲存格新增過濾條件,過濾條件為 地區值=area值,這時若 area 參數為空,則過濾條件為地區='',所以過濾後就沒有對應地區的資料。
現在要實現參數無值時查詢全部,則在查詢前,需要先判斷參數是否有值,有值則執行過濾;無值則不過濾。可以透過 IF 函式來構造判斷;參數為空可以使用 Len 函式來判斷,參數長度為 0 時參數即為空,FineReport 過濾條件中,nofilter 表示不過濾,如此結合則得到過濾條件:
if(len($area)==0,nofilter,$area)
這樣,當參數有值和無值時,就分別執行不同過濾機制。當參數值為空時不過濾,即查詢出所有資料。
定義好資料集參數後,在參數面板新增一個「下拉框元件」,給元件綁定好資料字典,查詢時元件不選擇值,即參數值為空查詢時查詢出所有報表資料。如下圖所示:
詳細實現步驟可見:下拉框參數為空選擇全部
定義好範本參數、設定好過濾條件後,在參數面板新增一個「下拉框元件」,給元件綁定好資料字典,查詢時元件不選擇值,即參數值為空查詢時查詢出所有報表資料。效果如 3.1 節所示。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙