前一周的第一天和最后一天在Cognos中实施

时间:2015-01-28 21:39:12

标签: cognos-10

我在Cognos中有两个日期提示FromDate和Todate。 FromDate应该始终是Pre Week第一天(即星期一),ToDate应该是该星期的最后一天(即星期日)。任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:0)

<强> FROM日期

以下表达式将返回上周的星期一:

_add_days(current_date, (-1 * _day_of_week(current_date,2)) - 7)

<强> TODATE

从那里你可以获得FromDate值之后的星期日:

_add_days([FromDate],6)

唯一的问题是在星期一运行报告时您想要的范围。使用上面的表达式,报告将在星期一运行时返回额外的一周。要解决此问题,您可以测试星期一并相应地更改FromDate表达式:

CASE _day_of_week(current_date,1) 
WHEN 1 THEN _add_days(current_date, -1 * _day_of_week(current_date,2)) 
ELSE _add_days(current_date, (-1 * _day_of_week(current_date,2)) - 7) 
END

使用此表达式在星期一运行时,上一个星期一FromDate将是上一个星期一,而ToDate将是当前日期之前的星期日。

答案 1 :(得分:0)

动态设置日期提示的提示默认值的唯一方法是使用JavaScript。值得庆幸的是,Cognos在10.2.1及更高版本中提供了完全支持的JavaScript提示API。

为了通过Cognos JavaScript API引用提示对象,您必须为提示提供唯一的名称。对于以下代码,我假设您的“from date”提示符已命名为“FromDate”,而“to date”提示符已命名为“ToDate”。

将以下代码插入新的HTML对象中。确保HTML对象出现在任何提示对象之后。

<script>
var report = cognos.Report.getReport('_THIS_');
var FromDate = report.prompt.getControlByName('FromDate');
var ToDate = report.prompt.getControlByName('ToDate');

var today = new Date();
var fromdate = new Date();
var todate = new Date();

fromdate.setDate(today.getDate() - (today.getDay() + 6));
todate.setDate(today.getDate() - today.getDay());

var fromdatestring = fromdate.getFullYear() + '-' + ("0" + (fromdate.getMonth() + 1)).slice(-2) + '-' + ("0" + fromdate.getDate()).slice(-2);
var todatestring = todate.getFullYear() + '-' + ("0" + (todate.getMonth() + 1)).slice(-2) + '-' + ("0" + todate.getDate()).slice(-2);

FromDate.addValues([{'use':fromdatestring}]);
ToDate.addValues([{'use':todatestring}]);
</script>