Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Problema com IF - Qlik Sense

Boa tarde pessoal,

Estou com mais uma dúvida, é o seguinte:

Eu tenho os seguintes IF

if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Closed' and (Interval(Date(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c,'DD-MM-YYYY hh:mm:ss') - Date(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c,'DD-MM-YYYY hh:mm:ss'),'D') = 0),'Cumprido',

    if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Closed' and (Interval(Date(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c,'DD-MM-YYYY hh:mm:ss') - Date(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c,'DD-MM-YYYY hh:mm:ss'),'D') >= 1) and (Interval(Date(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c,'DD-MM-YYYY hh:mm:ss') - Date(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c,'DD-MM-YYYY hh:mm:ss'),'D') <= 2),'No Prazo',

    if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Pending' and (Interval(Date(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c,'DD-MM-YYYY hh:mm:ss') - Date(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c,'DD-MM-YYYY hh:mm:ss'),'D') > 2),'Atrasado','Estourado'))) as SLA,

Eu ainda não descobri mas o problema é que ele só considera o segundo IF e o Else... não sei oque acontece mas os outros dois IF são desconsiderados.

É um simples calculo da quantidade de dias entre abertura e fechamento e dependendo do status ele mostra o SLA.

Atenciosamente,


Rafael Lima.

Labels (2)
1 Solution

Accepted Solutions
Not applicable
Author

Boa tarde Alessandro,

Consegui fazer com que funcionasse como esperado, utilizei a dica do nosso amigo Nilton Barcelos

e acabei modificando os IF, ele disse que todo campo data na maioria das vezes é numérico então em vez de usar o Interval e date acabei usando o floor como abaixo, ai neste caso agora esta fazendo a conta certa e mostrando de acordo com cada situação, veja:

    if( BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Closed' and

  (Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c) - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c) = 0),

  'Cumprido',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Closed' and

  (Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c) - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c) >= 1) and

  (Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c) - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c) <= 2)

  ,'No Prazo',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Pending' and

  ( (Today() - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c)) <= 1)

  ,'No Prazo',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Pending' and

  ( (Today() - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c)) >  1) and

  ( (Today() - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c)) <= 2)

  ,'Atrasado',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Open','Sem SLA','Estourado'

  )

  )

  )

  )

  ) as SLA,

Mesmo assim agradeço muito pelo seu apoio.

Atenciosamente,

Rafael Lima.

View solution in original post

4 Replies
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Rafael, boa tarde.

Olhando o if  não consigo ver erro de logica, visto que se um if não for valido, ira ao próximo....

Eu "renomeei" os campos para facilitar...

if(ID = 'Closed' and

   (Interval(DataFechamento - DataAbertura,'D') = 0),'Cumprido',

     if(ID = 'Closed'

    and (Interval(DataFechamento

         - DataAbertura,'D') <= 2) ,'No Prazo',

    if(ID = 'Pending'

    and (Interval(DataFechamento

         - DataAbertura,'D') > 2),'Atrasado','Estourado'))) as SLA,

O que eu faria seria colocar as linhas abaixo no LOAD

Interval(DataFechamento - DataAbertura,'D')     as Campo,

ID,

para analisar o resultado que esta no SLA e verificar os campos que compõe o if para descobrir o que houve.

Se puderes disponibilizar um pequeno modelo ajuda.....

Outro if que poderia tentar seria....

if(ID = 'Pending',

  // Se for Pendente....

  if(Interval(DataFechamento - DataAbertura,'D') > 2,'Atrasado','Estourado'),

  // Se nao....

  if(ID = 'Closed',

     //

     if((Interval(DataFechamento - DataAbertura,'D') = 0),'Cumprido',if((Interval(DataFechamento - DataAbertura,'D')<= 2),'No Prazo' ,'Estourado')))

,'Sem Definicao.....') as SLA,

furtado@farolbi.com.br
Not applicable
Author

Então Alessandro,

Utilizando seu modelo simplificado eu ainda não consegui descobrir porque ele só reconhece o If do Pending

if(ID = 'Closed' and

   (Interval(DataFechamento - DataAbertura,'D') = 0),'Cumprido',

     if(ID = 'Closed'

    and (Interval(DataFechamento

         - DataAbertura,'D') <= 2) ,'No Prazo',

    if(ID = 'Pending'

    and (Interval(DataFechamento

         - DataAbertura,'D') > 2),'Atrasado','Estourado'))) as SLA,

eu ja tinha colocado no load pra carregar um campo para verificar como ficou, veja no print:

qlik_sense_1.png

Os campos estão renomeados para facilitar o entendimento e o conteudo do status tambem.

Veja que no caso do if em que o status é fechado e o dias é menor que 2 funciona mas ai ja cai depois no "se não"

Atenciosamente,

Rafael Lima.

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Tens como disponibilizar um modelo reduzido?

furtado@farolbi.com.br
Not applicable
Author

Boa tarde Alessandro,

Consegui fazer com que funcionasse como esperado, utilizei a dica do nosso amigo Nilton Barcelos

e acabei modificando os IF, ele disse que todo campo data na maioria das vezes é numérico então em vez de usar o Interval e date acabei usando o floor como abaixo, ai neste caso agora esta fazendo a conta certa e mostrando de acordo com cada situação, veja:

    if( BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Closed' and

  (Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c) - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c) = 0),

  'Cumprido',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Closed' and

  (Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c) - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c) >= 1) and

  (Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__closeDateTime__c) - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c) <= 2)

  ,'No Prazo',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Pending' and

  ( (Today() - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c)) <= 1)

  ,'No Prazo',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Pending' and

  ( (Today() - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c)) >  1) and

  ( (Today() - Floor(BMCServiceDesk__Incident__c.BMCServiceDesk__openDateTime__c)) <= 2)

  ,'Atrasado',

  if(BMCServiceDesk__Incident__c.BMCServiceDesk__Status_ID__c = 'Open','Sem SLA','Estourado'

  )

  )

  )

  )

  ) as SLA,

Mesmo assim agradeço muito pelo seu apoio.

Atenciosamente,

Rafael Lima.