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