首页 文章

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

提问于
浏览
2

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

[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 回答

  • 1

    另一个公式

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

    最简单的解决方案是创建我称之为“月份密钥”的东西,它是一年和一月的整数表示 . 然后,您可以将其转换为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))
    

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

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

    两个问题 . 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
    

相关问题