Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Posting on Qlik Community is temporarily paused for some users. Thank you for patience and we'll update you soon!
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.