COGNOiSe.com - The IBM Cognos Community

IBM Cognos 8 Platform => COGNOS 8 => Report Studio => Topic started by: cbyrne123 on 08 Nov 2013 10:44:58 AM

Title: Case when condition
Post by: cbyrne123 on 08 Nov 2013 10:44:58 AM
Hi Please can you help  with the below code, i basically have a data item in a list view page and the below code works, however it doesn't work out the bottom two for some reason, is this because it is selecting the above <1 first?


case
when ([Cast Service Code])='6M EXAM' AND _days_between ([Service Date],CURRENT_DATE) >= 1 then 'STILL WITHIN FOR 6M EXAM'
when ([Cast Service Code])='6M EXAM' AND _days_between ([Service Date],CURRENT_DATE) <1 then 'OVER SERVICE FOR 6M EXAM'
when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE) >= 1 then 'STILL WITHIN FOR 12M INS'
when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE) <1 then 'OVER SERVICE FOR 12M INS'
when ([Cast Service Code])='TACKLE' AND _days_between ([Service Date],CURRENT_DATE) < 1 then 'OVER SERVICE FOR TACKLE'
when ([Cast Service Code])='TACKLE' AND _days_between ([Service Date],CURRENT_DATE) >= 1 then 'STILL WITHIN SERVICE FOR TACKLE'
when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE)<= +045 then 'SERVICE WITHIN 45 DAYS'
when ([Cast Service Code])='TACKLE' AND _days_between ([Service Date],CURRENT_DATE)<= +045 then 'SERVICE WITHIN 45 DAYS'
end
Title: Re: Case when condition
Post by: blom0344 on 09 Nov 2013 09:15:04 AM
A case is evaluated in the order of the defined WHEN parts. For each record the first WHEN that applies is used and the evaluation stops then and there.

+045


is a string , so the evaluation may not work as you expect in any case..
Title: Re: Case when condition
Post by: cbyrne123 on 09 Nov 2013 09:33:36 AM
Thanks for the reply, do you know of any other way i can get this to work properly? Will it work if i nest two case statements or maybe if i use case if.

Thanks in advance

Chris
Title: Re: Case when condition
Post by: blom0344 on 09 Nov 2013 01:48:05 PM

when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE) >= 1 then 'STILL WITHIN FOR 12M INS'
when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE) <1 then 'OVER SERVICE FOR 12M INS'


literally means that EVERY row will fall in EITHER category, provided:

1. [Cast Service Code])='12M INS'
2. [Service Date] is not a null (unknown) value

Which means the condition in red

when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE)<= 45 then 'SERVICE WITHIN 45 DAYS'


will never be evaluated and thus will never be true

when ([Cast Service Code])='12M INS' AND _days_between ([Service Date],CURRENT_DATE) between 1 and 45 then 'SERVICE WITHIN 45 DAYS'

would make sense, but you would need it in the CASE expression as the 1st condition to be evaluated