开始时间、结束时间
问题描述 若数据库中存在一列数据是日期型的,希望查询某一段时间内的数据,此时要如何实现呢?
实现思路 定义两个报表参数(一个开始时间一个结束时间),然后设置过滤条件为日期列大于开始时间并且日期列小于结束时间。
打开模板 打开模板:%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”。
参数设计 点击参数界面面板,按照下图设置参数界面:
分页预览 点击分页预览,输入开始时间,结束时间,间隔数就可以查询了。