最近遇到一个问题有点小郁闷,为客户开发的一张监控日志报表,里面涉及到一个日志的记录日期,比如2011-05-10。报表设计是现在页面上拖放了一个日期提示控件,然后在报表里设置了一个参数?day?(cognos的经典写法)。把日期控件的参数属性设置为day,那么每次在页面上选择了日期以后,就可以根据该日期来过滤数据。查询中该过滤器是必需的。现在有一个问题,每次打开报表浏览数据,总会弹出一个让你选择日期的提示页面而且默认还是当天,我只需要点击完成按钮后页面才会显示。也许一天点一次这个报表,我还不会有所抱怨,但是当我每天要点10-50次的时候,这个时候我就发现了,那个完成按钮我实在不想点,因为我想看的就是今天的。为什么要做这一个多余的操作呢,就算点一次1秒,我一个人点50次就能节省50秒,但是如果这张报表是1000多号人都要点,这么算少说也要点1000次以上吧,那就是1000秒,呵呵超过1刻钟了。到后面我发现自己右手的食指开始隐隐生疼。没办法,干it久了就会得的职业病。痛定思变吧。我就想要是它默认帮我直接用系统时间(当天)该多好啊,那我每次点击该报表,他都默认的把今天的数据显示出来。我要看昨天的话,再在页面上的日期提示控件中选择昨天就ok了啊。于是萌生了修改该报表的想法。我首先想起该日期提示控件是有一个默认值的,于是我打开一看,完了,它只能选择特定的一天,比如2011-05-10。也许我每天早上编辑下这张报表的默认值,设为当天,那这一天就不用在选择日期了,但是这也很麻烦啊。
于是google了一下:发现我们这个论坛seo还是做的比较好的。第一条就是,有图为证。
参照里面的另一个帖子的链接,根据里面提供的思路,我也模仿了一下。居然报表验证通过了,我自己都觉得不可思议。我在那个帖子里面回了。
具体做法是:
1、给日期控件一个默认值:建议使用历史日期,比如2011-3-22
2、在查询中做一个过滤器:
[YourDateField]= to_char(trunc(if(?day? ='2011-3-22' )then({sysdate}) else(?day?),'dd')-1,'yyyymmdd')
其中[YourDateField]是查询里要对日期进行过滤的字段,?day?是时间提示里的参数。你把这两个换成你自己的就行了。另外,如果想默认为今日,只需要把那个-1去掉就行。
上面的写法验证通过的前提是:你用的后台是oracle数据库,否则请使用你对应的的数据库供应商函数代替{sysdate},或者cognos内置的函数current_date。
不知道大家注意到没,报表页面展示后,细心的人应该会发现日期控件的值是你设定的默认值,也就是2011-3-22,但是报表数据确实是system date的,而不是2011-3-22的数据。这种做法的一个不好的地方就是会给人造成错觉,感觉看到日志是历史的日志信息。
因为控件框里的时间只是一个展示,所以后面就想用js来修改一下该控件的值。大家要是有什么好的方法可以互相交流。
添加新评论19 条评论
2014-08-15 12:02
2013-04-15 14:49
2013-02-06 10:08
2013-02-04 14:33
2013-02-04 10:31
2012-03-19 16:36
2011-07-25 20:05
2011-07-25 15:56
2011-06-02 10:09
2011-05-19 09:44
2011-05-18 16:38
2011-05-18 14:56
2011-05-17 15:27
2011-05-16 23:50
2011-05-13 14:12
2011-05-12 18:19
2011-05-12 16:28
2011-05-12 00:50
2011-05-11 11:13