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

浏览: 2180

相信很多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'));

推荐 0
本文由 kingwang 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册