反饋已提交
網絡繁忙
使用參數進行報表資料查詢時,希望當參數值為空時,點選【查詢】後,顯示報表中的全部資料。即在沒有篩選條件的時候,顯示報表所有內容,相當於不選值就不過濾。如下圖所示。
參數過濾查詢,一般都是透過範本參數或者資料集參數實現,所以要想實現此場景,就需要修改過濾條件和資料集定義方式。修改的原則:
①資料集參數:當參數值為空時,查詢報表所有內容。
②範本參數:當參數值為空時,不進行過濾。
正常定義 資料集參數 時,參數有值,則將值連接到 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) 】。
這樣,當參數有值和無值時,就分別執行不同過濾機制。當參數值為空時不過濾,即查詢出所有資料。如下圖所示。
定義好資料集參數後,在參數面板新增一個【下拉框元件】,給元件綁定好資料字典,查詢時元件不選擇值,即參數值為空查詢時查詢出所有報表資料。如下圖所示。
詳細實現步驟可見:下拉框參數為空選擇全部。
定義好範本參數、設定好過濾條件後,在參數面板新增一個【下拉框元件】,給元件綁定好資料字典,查詢時元件不選擇值,即參數值為空查詢時查詢出所有報表資料。效果如 第三章第1節 所示。
詳細實現步驟可見:下拉框為空選擇全部。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙