我正在使用Cognos 10.1.1
我要求62列表报告按列不同。
如果我们根据类别对它们进行分组,31个报告显示BOD,31个显示EOD数据。
EOD(T-2数据)和BOD(T-1数据)。
这是要求。为了减少我们计划将这两个日期逻辑混合在一个报告中的报告数量。
Case
when [Time Selection] = 'EOD' then
[As of date] = _add_days(current_date,-2)
else
[As of date] = _add_days(current_date,-1)
end
这很好但报告性能有所下降。它的运行时间比单独的报告要长。
我尝试使用宏,但在生成sql时,上述情况condtion和宏之间没有区别。
请为我提供一个提高报告效果的解决方案。
我们正在使用db2。
提前致谢。
答案 0 :(得分:-1)
在不知道问题的情况下查看代码,我不会怀疑您的代码会产生性能问题。那说我避免使用=,<>处理日期时等。相反,我使用内置的日期数学函数。
尝试以下方法:
CASE
WHEN [Time Selection] = 'EOD' THEN
_days_between([As of date],current_date) = -1
ELSE
_days_between([As of date],current_date) = -2
END
还有另一种语法也可能比现有代码执行得更好。我们可以消除CASE语句并在过滤器中使用简单的布尔逻辑:
([Time Selection] = 'EOD' AND _days_between([As of date],current_date) = -1)
OR
([Time Selection] <> 'EOD' AND _days_between([As of date],current_date) = -2)
这种语法利用了大多数语言的优化,包括SQL,如果AND的第一项返回false,则跳过该行而不评估第二项,因为AND的结果永远不会为真。