Cognos 8中的日期算术

时间:2012-10-10 13:26:30

标签: cognos cognos-8

我需要的是一个数据项表达式,它输出去年当前季度的开始日期。找到当前年份很简单,从该日期开始减去1年。但除此之外,我陷入困境。

我目前每个季度都有一个丑陋的if表达式,如:

  

if(extract(month,current_date)in(10,12,12))   然后((提取(年,_add_years(current_date,-1))||'-10-01'))

但无论我做什么,我都无法将年份和日期连接成字符串,我可以将其转换为日期对象。上面的代码给出了错误:

  

对于以下数据类型组合,“add”操作无效:“integer”和“character”

尝试使用cast()将整数转换为字符我收到此错误。尝试将字符数组转换为日期时,我也会收到此错误:

  

对于以下数据类型组合,“condexp”操作无效:“character”和“integer”

尝试使用SQL Server特定的功能(它是一个SQL Server数据库)只是给我一个错误,那些功能不可用于本地处理,所以我似乎无法使用SS日期算术,我找不到任何特别适用于Cognos内置日期函数的东西。

如何操作日期以将年份添加到已知的日/月组合并将其用作日期对象?

2 个答案:

答案 0 :(得分:3)

我正在使用cognos 10.1.1,但它会起作用。

您可以使用以下代码获取值:

_make_timestamp(
  extract(year, _add_years(current_date, -1)),
  (floor((extract(month,current_date)-1)/3)*3+1),
  01
)

以下是获得本季度开始月份的简单方法。

(floor((extract(month,current_date)-1)/3)*3+1),

您可以将时间戳转换为日期或字符串。

cast(
  _make_timestamp(
  extract(year, _add_years(current_date, -1)),
  (floor((extract(month,current_date)-1)/3)*3+1),
  01
  ),
  date
)

cast(
  cast(
    _make_timestamp(
      extract(year, _add_years(current_date, -1)),
      (floor((extract(month,current_date)-1)/3)*3+1),
      01
    ),
    date),
    varchar(10)
)

此外,您可以在获得日期值时使用提取功能。

extract(day, _first_of_month (current_date))

答案 1 :(得分:0)

我会使用Cognos中存在的SQLSERVER内置函数。
这是一个适合我的表达式:

DATEADD({month},(3)*((DATEPART({quarter},[FullDateAlternateKey]))-1),
DATEADD({YEAR}, DATEDIFF({YEAR}, 0, dateadd({year},-1,[FullDateAlternateKey])), 0))

FullDateAlternateKey字段是我的日期字段(来自ADVERTUREWORKS DW DB)。
如果仍有问题,请尝试通过在新的简单列表报告上尝试此表达式来隔离问题。