Cognos Report Studio ver 10中当前月份和年份的自动过滤器

时间:2014-06-27 16:23:10

标签: cognos cognos-8 cognos-bi cognos-10

我有一个查询项,按日期列格式过滤记录,格式为'YYYYMM'。截至目前,我已对[DateCol] = '201406'中的值Detail filters进行了硬编码,以获取当前的月份和年份记录。但我想动态地改变这个价值。对于下个月,它应该按'201407'过滤记录。我该如何实现这一目标? 我通过在[DateCol]中拖动Detail filters来尝试此操作:

[DateCol] = extract(year, current_date) + extract(month, current_date)

但是它返回了一个错误:

UDA-SQL-0460 The operation "equal" is invalid for the following combination of data types: Character and Integer

请指导

3 个答案:

答案 0 :(得分:3)

另一个公式

[DateCol] = cast(extract(year, current_date) * 100 + extract(month, current_date) as varchar(6))

答案 1 :(得分:2)

最简单的解决方案是创建我称之为“月份密钥”的密钥。这是一年和一月的整数表示。然后,您可以将其转换为char以进行比较。它实际上很简单:

extract(year, current_date) * 100 + extract(month, current_date)

将任意数字乘以100会导致在末尾添加两个零。本年度是2014年所以2014年100次等于201400.然后您可以自由添加月份以获得“月份”键。 201400 + 6 = 201406.然后,您可以将此整数转换为char并进行比较。最终的过滤器表达式变为:

[DateCol] = cast(extract(year, current_date) * 100 + extract(month, current_date), char(6))

注意:制作整数键的技巧'对于日期也可以延长到几天,并有许多应用程序,即排序。下面的表达式将为您提供一个整数的日期密钥'它保留了原始日期的数字顺序和层次结构:

extract(year, current_date) * 10000 + extract(month, current_date) * 100 + extract(day, current_date)

答案 2 :(得分:1)

两个问题。 DateCol的数据类型是字符。提取函数返回整数。 其次,你没有正确地使用你的提取物构建你的YYYYMM。您拥有它的方式,您将年份提取为数字,并将月份添加到它。你最终会得到像'201406'= 2020这样的东西,但是不行。因此,您需要转换两个提取并连接它们:

[DateCol] = cast(extract(year, current_date) as varchar(4) 

+ cast(extract(month,current_date)as varchar(2))

编辑: 实际上,它可能比那更复杂。提取不会返回6月6日,只有6.因此,您需要确定该提取是否是一个或两个字符。如果它是一个,你需要在投射后向前面加上'0'。确切的语法将取决于您的数据库,但类似这样:

[DateCol] = cast(extract(year, current_date) as varchar(4)
+ case when cast (extract(month, current_date) as varchar(2) = 1
    then '0' + cast (extract(month, current_date) as varchar(2)
  else cast (extract(month, current_date) as varchar(2)
end