我需要的是一个数据项表达式,它输出去年当前季度的开始日期。找到当前年份很容易,就像从该日期减去1年一样。但除此之外,我陷入了困境。
我现在每个季度都有一个丑陋的if
表达式,比如:
if(extract(month,current_date)in(10,12,12))然后((摘录(年,_add_eyears(current_date,-1))||'-10-01')
但无论我做什么,我都无法将年份和日期连接到字符串中,我可以将其转换为日期对象。上面的代码给出了错误:
操作"add"对于以下数据类型的组合无效:"integer"one_answers"character">
尝试使用cast()
将整数强制转换为字符时出现此错误。当我试图将字符数组转换为日期时,我也会遇到这个错误:
操作"condexp"对于以下数据类型的组合无效:"character"one_answers"integer">
尝试使用SQL Server特定的函数(它是一个SQL Server数据库)只会给我一个错误,即这些函数不可用于本地处理,所以我似乎无法使用SS日期算术,并且在Cognos的内置日期函数中找不到任何特别适用的函数。
如何操作一个日期,将一年添加到已知的日/月组合中,并将其用作日期对象?
我使用的是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))
我会使用Cognos中存在的SQLSERVER内置函数
这里有一个对我有用的表达式:
DATEADD({month},(3)*((DATEPART({quarter},[FullDateAlternateKey]))-1),
DATEADD({YEAR}, DATEDIFF({YEAR}, 0, dateadd({year},-1,[FullDateAlternateKey])), 0))
FullDateAlternateKey字段是我的日期字段(来自ADVERTUREWORKS DW DB)
如果仍然存在问题,请尝试在新的简单列表报表上使用此表达式来隔离问题。