luxiao1223
作者luxiao12232011-05-10 17:48
软件开发工程师, aia

cognos日期提示默认为今天或昨天

字数 1269阅读 6242评论 19赞 22
最近遇到一个问题有点小郁闷,为客户开发的一张监控日志报表,里面涉及到一个日志的记录日期,比如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来修改一下该控件的值。大家要是有什么好的方法可以互相交流。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

22

添加新评论19 条评论

cognossulirongcognossulirong软件开发工程师, 新大陆软件工程有限公司
2014-08-15 12:02
说的不清楚
天蓝佯伶天蓝佯伶其它, 红有软件
2013-04-15 14:49
想法挺好的,就是报错了,也不知道报的啥错
luxiao1223luxiao1223软件开发工程师, aia
2013-02-06 10:08
爱上零点半: [YourDateField]= to_char(trunc(if(?day? ='2011-3-22' )then({sysdate}) else(?day?),'dd')-1,'yyyymmdd')  这个好像不行咧,会报错,“ReporterModeProvider”不
我是在cognos8.4.1里可以测试通过,不知道10行不行。
爱上零点半爱上零点半软件开发工程师, 1234
2013-02-04 14:33
[YourDateField]= to_char(trunc(if(?day? ='2011-3-22' )then({sysdate}) else(?day?),'dd')-1,'yyyymmdd')  这个好像不行咧,会报错,“ReporterModeProvider”不支持函数“providerQuery”  应该就是说过滤器中不能存在这样的条件判断吧
爱上零点半爱上零点半软件开发工程师, 1234
2013-02-04 10:31
期待后面修改日期控件值的解决方案
ginger_zxginger_zx
2012-03-19 16:36
这个方法好像不太管用
luxiao1223luxiao1223软件开发工程师, aia
2011-07-25 20:05
jchen: 我是用一种方法实现的 但要怎么去控制 时间控件的显示值呢 2099-1-1
时间控件是有个默认值属性的,你只要选一个合适自己的值就行,比如2011-1-1
jchenjchenBI开发工程师, tisson
2011-07-25 15:56
我是用一种方法实现的 但要怎么去控制 时间控件的显示值呢 2099-1-1

2011-06-02 10:09
很不错的思路,以前我老是想给参数赋值,总是不成功,用了很笨的方法实现默认值的问题,谢谢分享!
biqinyuhebiqinyuhe商业智能工程师, IBM
2011-05-19 09:44
谢谢分享
luxiao1223luxiao1223软件开发工程师, aia
2011-05-18 16:38
sunyt: 不明白呢,是在数据库里面做改动吗,还是什么,有没有一步一步的教程呢
只需要修改你的rs报表里的过滤器的写法,不过该写法跟你报表数据源使用的数据库有关。
sunytsunyt信息技术经理, WBSN
2011-05-18 14:56
不明白呢,是在数据库里面做改动吗,还是什么,有没有一步一步的教程呢
jeongspearjeongspear其它, 华腾软件
2011-05-17 15:27
非常感谢!
FIR1987FIR1987软件开发工程师, ibm
2011-05-16 23:50
不错,如果可以有基于cube的就好了~
siqi610siqi610软件开发工程师, 汉端
2011-05-13 14:12
好东西。。。
巴乔bq巴乔bq软件开发工程师, here
2011-05-12 18:19
很好的东西,谢谢
ieydqepwqieydqepwqBI实施工程师, 保密
2011-05-12 16:28
好方法,谢谢分享
macheratermacherater软件开发工程师, 塔塔信息技术中国公司
2011-05-12 00:50
此方法,颇具有创新意识
小牛小牛商业智能工程师, 自由职业
2011-05-11 11:13
学习一下,谢谢分享
Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广