kingwang
作者kingwang·2015-08-03 16:19
商业智能工程师·前景科技有限公司

RS报表从按月图表追溯到按日报表

字数 2189阅读 1576评论 0赞 0

相信很多COGNOS开发人员看到这个标题就会感觉很轻松,追溯无非是COGNOS自带的一个下钻的功能,但是这里却是固定的条件:

 

要求1:A报表显示按月的图表B报表显示按日的明细

     2:追溯到B的时候B的开始日期控件和结束日期控件还可以随机选择

 

  

   设置追溯

   

 在报表Address2中添加提示页面,如下图所示

 

1处是导入xdate.js库

<script type="text/javascript" src="/iisroot/ewelljs/xdate.js"></script>

2处是div的开始

<div style="display:none">

3处是文本框提示,参数名为year 接收Address1传过来的年编码

4处是文本框提示,参数名为month 接收Address1传过来的月编码

5处是日期提示 参数名为begindate,名称为begindate

6处是日期提示 参数名为enddate,名称为enddate

7处是JS处理主体

<script>function setvalueforriqitishi()//该方法完成在提示页面运行时根据传过来的年份和月份对日期提示(开始/结束)赋值

{var form=getFormWarpRequest();//得到form表单

var year=form._textEditBoxyear.value;var month=form._textEditBoxmonth.value;var day='1';var datestr=year+'/'+month+'/'+day;var firstDate = new Date(datestr);//以下脚本需要xdate.js脚本支持

firstDate.setDate(1); //第一天

var endDate = new Date(firstDate);endDate.setMonth(firstDate.getMonth()+1);endDate.setDate(0);//alert("第一天:"+new XDate(firstDate).toString('yyyy-MM-dd') +" 最后一天:"+new XDate(endDate).toString('yyyy-MM-dd'));

pickerControlbegindate.setValue(new XDate(firstDate).toString('yyyy-MM-dd'));//下面三判断如果是当前月,结束日期提示为当前天

var myDate = new Date();var nowmonth=myDate.getMonth(); //获取当前月份(2位)

if(month!=nowmonth+1){pickerControlenddate.setValue(new XDate(endDate).toString('yyyy-MM-dd'));}promptButtonFinish();}function init(){setvalueforriqitishi();}</script>

<body onload="init()">

</body>

</div>


address2的页面1

8和9处的参数名一定要和5和6处的参数名保持一致,这样才可以赋值

过滤器

cast([门诊挂号].[日期].[年].[Date_SK].[Date_SK],date)
between
?begindate?
and
?enddate?

 简单的这么写就好了

 原理:虽然Address2处的必须参数为begindate和enddate,Address1处穿过来的是月份,但是我们可以利用传过来的年份和月份加上js脚本对Address2中的日期提示控件进行  赋值,如果是追溯过来的就查找传过来的整月的数据

 反之,如果是用户手工在address中选择的随机日期则按照随机日期进行查询

 此处的难点是:Address2追溯完成后还需要按照日进行随机查询,而不是按月,导致了按月过滤和按日过滤的冲突,而上面的方法就解决了这个问题

引入XDate.JS 这个小插件,不知道的百度谷歌吧

代码如下:

var firstDate = new Date();

firstDate.setDate(1); //第一天

var endDate = new Date(firstDate);

endDate.setMonth(firstDate.getMonth()+1);

endDate.setDate(0);

alert("第一天:"+new XDate(firstDate).toString('yyyy-MM-dd')+" 最后一天:"+new XDate(endDate).toString('yyyy-MM-dd'))

 

   

英文名:kingwang MSN : nidelanjiekou@hotmail.com

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

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广