【问题标题】:Using case when in Cognos data item在 Cognos 数据项中使用 case
【发布时间】:2015-03-30 19:53:48
【问题描述】:

我已将它放在数据过滤器表达式中,它在运行报告时会导致错误。我在这里想要实现的是,当 Force Expired 列的值为 Force 时,其他两个列上的操作,例如 ([Policy Expiration Date] 和 [Policy Effective Date] 应该使用针对 current_date 的逻辑.

case when [Force Expired] = 'Inforce' then ([Policy Expiration Date] >= current_date and [Policy Effective Date] <= current_date) else end

【问题讨论】:

    标签: cognos-10


    【解决方案1】:

    Cognos 对过滤器中条件的确切语法很挑剔。出于这个原因,我通常避免在过滤器中使用 CASE 语句。您可以将过滤器转换为以下两种语法之一:

    IF ([Force Expired] = 'Inforce')
    THEN ([Policy Expiration Date] >= current_date and [Policy Effective Date] <= current_date) 
    ELSE (1=1)
    
    ([Force Expired] = 'Inforce' AND [Policy Expiration Date] >= current_date AND [Policy Effective Date] <= current_date) 
    OR 
    [Force Expired] <> 'Inforce'
    

    如果您坚持使用 CASE 语句,那么我相信您可以在 WHEN 子句周围加上括号并为 ELSE 提供结果,它应该可以工作:

    CASE 
    WHEN ([Force Expired] = 'Inforce') 
    THEN ([Policy Expiration Date] >= current_date AND [Policy Effective Date] <= current_date) 
    ELSE (1=1) 
    END
    

    出于某种原因,Cognos 坚持使用 ELSE 子句。

    【讨论】:

      【解决方案2】:

      当您使用案例时,您必须指定满足要求时要执行的操作 - 而不是给出另一个条件。 就像是: [bla] = "foo" then "return_value" else "nothing" end 请记住 - 无论您在数据项中的计算值中写入什么,都会被转换为 sql,而这正是它在 sql 中的方式......

      【讨论】:

      • 在数据项中使用 CASE 语句时,您的答案是正确的。在过滤器中使用它是不正确的。在过滤器中,它应该在他尝试时输出过滤条件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2022-07-15
      相关资源
      最近更新 更多