反饋已提交

網絡繁忙

參數為空查詢全部

一、概述

1
預期效果。
  1. 使用參數進行報表資料查詢時,希望當參數值為空時,點選【查詢】後,顯示報表中的全部資料。即在沒有篩選條件的時候,顯示報表所有內容,相當於不選值就不過濾。如下圖所示。

2
解決思路。
  1. 參數過濾查詢,一般都是透過範本參數或者資料集參數實現,所以要想實現此場景,就需要修改過濾條件和資料集定義方式。修改的原則:

    ①資料集參數:當參數值為空時,查詢報表所有內容。

    ②範本參數:當參數值為空時,不進行過濾。

二、實現方法

1
資料集參數
  1. 正常定義 資料集參數 時,參數有值,則將值連接到 SQL 中執行查詢,參數無值,則 SQL 查詢語句查詢條件為一個空字元,查不出值。如下:【SELECT * FROM 銷量 where 地區 = '${area}'】。

  2. area 參數有值時,如華東,則查詢語句為 【SELECT * FROM 訂單 where 貨主地區='華東'】,查詢出華東地區的資料。area 參數無值時,則查詢語句為 【SELECT * FROM 訂單 where 貨主地區=''】,查詢無資料。

  3. 現在要實現參數無值時查詢全部,則在查詢前,需要先判斷參數是否有值,有值則執行帶有查詢條件的查詢;無值則查詢資料。

    ①有值時:【SELECT * FROM 銷量 where 地區 = '${area}'】;

    ②無值時:【SELECT * FROM 銷量】。

  4. 這時就要考慮判斷條件如何實現了,因為定義資料集參數時,支援使用 FineReport 所有內建函式,所以就可以透過 IF 函式來構造判斷;參數為空如何判斷呢,參數為空即參數值長度為 0,所以就可以使用 Len 函式來判斷參數是否為空。

  5. 組合起來,定義資料集參數的SQL語句如下:

    【SELECT * FROM 銷量  ${if(len(area) == 0,"","where 地區 = '" + area + "'")} 】。

  6. 這樣,當參數有值和無值時,將分別執行不同的 SQL 語句。當參數值為空時執行【 SELECT * FROM 銷量 】,不加任何條件即查詢所有資料。

2
範本參數
  1. 範本參數實現查詢時,是透過報表的過濾功能實現。

  2. 給儲存格新增過濾條件,過濾條件為 【地區值=area值】,這時若 area 參數為空,則過濾條件為【地區=''】,所以過濾後就沒有對應地區的資料。

  3. 現在要實現參數無值時查詢全部,則在查詢前,需要先判斷參數是否有值,有值則執行過濾;無值則不過濾。可以透過 IF 函式來構造判斷;參數為空可以使用 Len 函式來判斷,參數長度為 0 時參數即為空,FineReport 過濾條件中,nofilter 表示不過濾,如此結合則得到過濾條件:【if(len($area)==0,nofilter,$area) 】。

  4. 這樣,當參數有值和無值時,就分別執行不同過濾機制。當參數值為空時不過濾,即查詢出所有資料。如下圖所示。

三、範例

1
資料集參數
  1. 定義好資料集參數後,在參數面板新增一個【下拉框元件】,給元件綁定好資料字典,查詢時元件不選擇值,即參數值為空查詢時查詢出所有報表資料。如下圖所示。

  2. 詳細實現步驟可見:下拉框參數為空選擇全部

2
範本參數
  1. 定義好範本參數、設定好過濾條件後,在參數面板新增一個【下拉框元件】,給元件綁定好資料字典,查詢時元件不選擇值,即參數值為空查詢時查詢出所有報表資料。效果如 第三章第1節 所示。

  2. 詳細實現步驟可見:下拉框為空選擇全部

附件列表


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

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

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

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙