1. 概述
1.1 版本
報表伺服器版本 | 功能變更 |
---|---|
11.0 | - |
1.2 預期效果
若資料庫中存在一欄資料是日期型的,希望查詢某一段時間內的資料,此時要如何實現呢?
1.3 實現思路
定義兩個報表參數(一個開始時間一個結束時間),然後設定過濾條件為日期欄大於等於開始時間並且日期欄小於結束時間。
2. 範例一:資料欄過濾
2.1 範本準備
1)建立普通報表,建立範本資料集 ds1 ,SQL 語句為:SELECT * FROM 訂單
2)表格設計如下圖所示:
3)點選「範本>範本參數」,新增兩個報表參數,分別為 starttime 和 endtime。如下圖所示:
2.2 新增控件
進入參數面板,點選右上角「全部新增」按鈕,新增兩個日期元件,如下圖所示:
2.3 過濾條件設定
雙擊 A2 儲存格,選擇
,給 A2 儲存格增加如下圖所示的過濾條件,過濾條件的意思是訂購日期大於等於開始日期並且小於結束日期。注:資料庫日期或時間為文字型時,建議使用者轉換為日期型或者時間型,因為文字型比較大小的原則,會不符合日期比較的情況。
2.4 效果查看
2.4.1 PC端
儲存範本,點選「分頁預覽」,選擇好開始日期和結束日期後,點選查詢按鈕,效果如下圖所示:
2.4.2 行動端
App 及 HTML5 端效果如下圖所示:
2.5 已完成模板
已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Parameter\TimeScale\開始結束時間.cpt
點選下載範本:開始結束時間.cpt
3. 範例二:資料集SQL過濾
3.1 範本準備
1)建立普通報表,建立範本資料集 ds1 ,SQL 語句為:SELECT * FROM 訂單 where 1=1 ${if(len(starttime)=0,""," and 訂購日期>='"+starttime+"'")}${if(len(endtime)=0,""," and 訂購日期<'"+endtime+"'")}
公式中語句的註釋如下:
where 1=1 表示條件永真,防止沒有參數條件時,where 後面沒有有效內容導致出錯。
len(starttime)==0 表示參數「starttime」為空。
and 訂購日期>='"+starttime+"'"中間的「starttime」表示參數,'+' 為字串連接符號。
${if(len(starttime)=0,""," and 訂購日期>='"+starttime+"'")}表示:定義了參數 starttime,如果參數值為空,則查詢全部資料;如果不為空,查詢日期大於等於 starttime 的資料,這裏這樣定義主要是為了實現參數為空時查詢全部。
endtime 原理一致,不再做贅述。
2)表格設計,如下圖所示:
3.2 新增元件
進入參數面板,點選右上角「全部新增」按鈕,新增兩個日期元件,如下圖所示:
3.3 效果查看
效果與本文 2.4 節相同。
3.4 已完成範本
已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Parameter\TimeScale\開始時間結束時間.cpt
點選下載範本:開始時間結束時間.cpt
4. 擴展
1. 通常我們需要要校驗:開始日期與結束日期不能為空、結束日期必須在開始日期之後、結束日期必須在開始日期後的某個時間段內,否則提示相關資訊,詳細設定點選 JS實現日期元件查詢天數控制
2. 如果想實現同一張報表中可實現分別按年、月、日來查詢資料,可參考:動態顯示參數元件