我需要的是一个数据项表达式,它输出去年当前季度的开始日期。找到当前年份很简单,从该日期开始减去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内置日期函数的东西。
如何操作日期以将年份添加到已知的日/月组合并将其用作日期对象?
答案 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)。
如果仍有问题,请尝试通过在新的简单列表报告上尝试此表达式来隔离问题。