0

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

4

2 回答 2

0

从日期

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

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

迄今为止

从那里您可以获取 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 将是当前日期之前的星期日。

于 2015-01-30T19:10:58.293 回答
0

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

为了通过 Cognos JavaScript API 引用提示对象,您必须为提示指定一个唯一的名称。对于以下代码,我假设您的“起始日期”提示已命名为“FromDate”,而“截止日期”提示已命名为“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>
于 2015-02-02T18:43:38.600 回答