在 Cognos 数据项中使用案例

Using case when in Cognos data item

我已经把它放在数据过滤器表达式中,当 运行 报告时它会导致错误。我在这里想要实现的是,当 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

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

中的方式

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 子句。