下面就通過表格製作軟件FineReport來簡單介紹一下。
工具/原料
表格製作軟件FineReport7.1.1
大小:148.2M 適用平臺:windows/linux
開始時間、結束時間
問題描述
若數據庫中存在一列數據是日期型的,希望查詢某一段時間內的數據,此時要如何實現呢?
實現思路
定義兩個報表參數(一個開始時間一個結束時間),然後設置過濾條件為日期列大於開始時間並且日期列小於結束時間。
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\DynamicSQL\DynamicSQL.cpt。
修改數據集
將數據集修改為:SELECT * FROM 訂單。
報表參數設置
點擊模板>報表參數,添加兩個報表參數,分別為starttime和endtime。
修改參數界面
點擊添加全部,將參數控件添加到參數界面中,並將參數界面設置為如下樣式:
設置參數starttime和endtime的控件類型為日期型,返回值類型都為默認的字符串型。
過濾條件設置
雙擊A2單元格,選擇過濾,給A2單元格增加如下圖所示的過濾條件:
注:過濾條件的意思是訂購日期大於等於開始日期並且小於等於結束日期。
效果查看
點擊分頁預覽,選擇好開始日期和結束日期後,點擊查詢按鈕,效果如下圖:
週報
問題描述
若數據庫中存在一列數據是日期型的,希望輸入某個日期的時候,查詢出當前日期所在周的數據即週報查詢如下圖所示,此時要如何實現呢?
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\TimeScale\TimeScale.cpt。
報表參數設置
將報表參數刪除,然後重新增加一個名為Date的報表參數。
修改參數界面
將參數界面設置為如下樣式:
參數Date的控件類型為日期型,返回值類型為默認的字符串型。
過濾條件設置
將原來A2單元格的過濾條件刪除,然後重新給A2單元格設置過濾條件,條件處選擇公式,如下圖所示:
第一個公式:=DATEDELTA($Date, if(tointeger(WEEKDAY($Date)) == 0, -7, 0 - WEEKDAY($Date)))即返回查詢日期所在周的第一天。
第二個公式:=DATEDELTA($Date, if(tointeger(WEEKDAY($Date)) == 0, 0, 7 - WEEKDAY($Date)))返回查詢日期所在周的最後一天。
保存模板
點擊分頁預覽,選擇某個日期後則只查詢該日期所在周的數據,效果如上圖。
季報
問題描述
數據庫中存在一列日期型的數據列,希望輸入一個日期時,查詢出該日期的所在季度的數據,如下圖所示,此時要如何實現呢?
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\TimeScale\TimeScale1.cpt。
參數界面設置
將參數界面中的週報改成季報即可,參數界面的表樣和參數類型不需要修改。
過濾條件設置
將原先的過濾條件刪除,然後增加如下圖所示的過濾條件:
第一個公式:YEAR(訂購日期)==YEAR($Date)表示訂購日期的年份要和查詢的年份相同。
第二個公式:TOINTEGER(MONTH(訂購日期)/3.3)+1==TOINTEGER(MONTH($Date)/3.3)+1表示訂購日期的季度與查詢的季度要相同。
注:TOINTEGER(MONTH(訂購日期)/3.3)+1表示獲取月份所在的季度,TOINTEGER是取整,為了使3的倍數的月份在對應的季度內,所以3.3這個數字可以是3到4中的任一小數。如若是6月,6除以3.3再取整的話則為1,則表示6在第二個季度內,依次類推。
保存模板
點擊分頁預覽,選擇某個日期後則只查詢該日期所在季度的數據,效果如上圖。
日期的加減
問題描述
在進行數據查詢時,經常會遇到查詢對應於某個日期的前後指定天數的數據,如下圖所示,此時要如何實現呢?
打開模板
打開模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\TimeScale\TimeScale2.cpt。
報表參數設置
將原來的Date參數增加一個默認值,默認值類型為字符串,值為2010-03-11。
再增加一個名為day的參數。
參數界面設置
將參數界面設置為如下樣式:
設置參數Date的控件類型為日期型,返回值類型為默認的字符串。
參數控件day的控件類型為下拉框,在右側上方的屬性表中選擇數據字典,數據字典如下圖所示:
過濾條件設置
將A2原來的過濾條件刪除。
給A2單元格增加如下兩個過濾條件:
保存模板
點擊分頁預覽,選擇某個日期後再選擇查詢範圍,效果如上圖。
根據時間間隔取數
問題描述
當數據庫裡面數據量很大的時候,有個時間字段,而且時間字段是每分鐘或者每秒鐘都會有一條數據生成的時候。我們可以通過時間間隔來篩選數據,從而顯示出來想要瀏覽的數據。例如實現如下效果:
在starttime和endtime裡面輸入查詢時間的範圍,然後在number裡面輸入間隔數為3,意思就是每隔3秒的數據才顯示出來。
增加數據集
新建工作簿,添加數據集ds1,SQL語句:
SELECT *,datediff(s,convert(varchar(100),datets,111),convert(varchar(100),datets,120))%${number} as jg FROM dbo.datetest where 1=1 ${if(len(starttime)==0,"","and CONVERT(varchar(100),datets,120)>='"+ starttime +"'")} ${if(len(endtime)==0,"","and CONVERT(varchar(100),datets,120)<='"+ endtime +"'")}
說明:datediff(s,convert(varchar(100),datets,111),convert(varchar(100),datets,120))%${number} as jg //DateDiff 函數可用來決定兩個日期之間所指定的時間間隔數目.${number}這個是參數傳過來間隔數。中間用%取模獲取值為0的。${if(len(starttime)==0,"","and CONVERT(varchar(100),datets,120)>='"+ starttime +"'")} //判斷一下如果starttime為空的時候查詢所有時間,否則根據CONVERT(varchar(100),datets,120)>='"+ starttime +"'傳過來參數進行篩選。
刷新參數,給number參數設置默認值為1。
表樣設計
依據下圖設置表樣:
給B4添加過濾條件“jg等於 0”。
參數設計
點擊參數界面面板,按照下圖設置參數界面:
分頁預覽
點擊分頁預覽,輸入開始時間,結束時間,間隔數就可以查詢了。