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: 
valerioms
Creator
Creator

Tempo de Casa

Olá, boa tarde!

No arquivo em anexo o cálculo não está correto, pois apresenta 8 anos, 2 meses e 2 dias. Entretanto o correto seria apenas 8 anos e 2 meses. A expressão usada é a seguinte:

Floor((DtDemitido.ComunicadoDispensa - DtAdmitido.ComunicadoDispensa)/365) & ' Anos '

&

Floor(Frac((DtDemitido.ComunicadoDispensa - DtAdmitido.ComunicadoDispensa)/365) *12) & ' Meses '

&

Floor(Frac(Frac((DtDemitido.ComunicadoDispensa - DtAdmitido.ComunicadoDispensa)/365) *12)*24) & ' Dias'

Há algo errado? se sim, o que?

No aguardo, obrigado.

11 Replies
vinieme12
Champion III
Champion III

20012 and 2016 were leap years

Also dividing by a static number would not be the best way to do this

Vineeth Pujari
If a post helps to resolve your issue, please accept it as a Solution.
valerioms
Creator
Creator
Author

I'm sorry but i not understand.

Anonymous
Not applicable

Boa tarde Valério,

Provavelmente pelos anos bissextos.

Tente com o código abaixo:

/*Anos*/

       (

           YEAR(DtDemitido.ComunicadoDispensa)

           - YEAR(DtAdmitido.ComunicadoDispensa)

           - IIF(

               MONTH(DtDemitido.ComunicadoDispensa) < MONTH(DtAdmitido.ComunicadoDispensa)

               OR (

                      MONTH(DtDemitido.ComunicadoDispensa) = MONTH(DtAdmitido.ComunicadoDispensa)

                      AND DAY(DtDemitido.ComunicadoDispensa) < DAY(DtAdmitido.ComunicadoDispensa)

                  ),

               1,

               0

           )

       )

/*Meses*/

       (

           MONTH(DtDemitido.ComunicadoDispensa)

           -MONTH(DtAdmitido.ComunicadoDispensa)

           + IIF(

               MONTH(DtDemitido.ComunicadoDispensa) -MONTH(DtAdmitido.ComunicadoDispensa)

               > 0,

               0,

               12

           )

           -IIF(

               DAY(DtDemitido.ComunicadoDispensa) < DAY(DtAdmitido.ComunicadoDispensa),

               1,

               0

           )

       )

/*Dias*/

       (

           DtDemitido.ComunicadoDispensa

           -MakeDate(

               YEAR(DtDemitido.ComunicadoDispensa),

               MONTH(DtDemitido.ComunicadoDispensa)

               -IIF(

                   DAY(DtDemitido.ComunicadoDispensa) < DAY(DtAdmitido.ComunicadoDispensa),

                   1,

                   0

               ),

               DAY(DtAdmitido.ComunicadoDispensa)

           )

       )

valerioms
Creator
Creator
Author

Olá Iwry, está a mostrar erro no IIF.

Anonymous
Not applicable

COPIE DO SQL NO QLIK É SÓ 'IF', TIRA UM 'I'.

valerioms
Creator
Creator
Author

Olá Iwry, está a funcionar parcialmente. Veja o resultado do seguinte cálculo:

Demissão (04/09/2017) - Admissão (06/09/2016) = 0 anos -1 meses 29 dias. Existem alguns casos, como este exemplo, em que o resultado para mês está negativo. Como resolver? Desculpe, pode parecer meio estúpida a pergunta mas é que sou novo nisto. Obrigado.

vinieme12
Champion III
Champion III

We had 366 days in year 2012 and 2016

so you are getting the difference of the two additional days in these two years as you are dividing by a static number 365 !!

Vineeth Pujari
If a post helps to resolve your issue, please accept it as a Solution.
Anonymous
Not applicable

Bom dia Valerio,

Testei aqui com estas datas e o resultado foi 0 anos, 11 meses e 29 dias.

Tente Copiar novamente.

E Carregue estas formulas pelo seu script separadas conforme exemplo abaixo, pois assim seu Dashboard fica mais "leve":

EXEMPLO_CARGA:

LOAD *,

       (

           YEAR(DtDemitido.ComunicadoDispensa)  - YEAR(DtAdmitido.ComunicadoDispensa)

           - IF(

               MONTH(DtDemitido.ComunicadoDispensa) < MONTH(DtAdmitido.ComunicadoDispensa)

               OR (

                      MONTH(DtDemitido.ComunicadoDispensa) = MONTH(DtAdmitido.ComunicadoDispensa)

                      AND DAY(DtDemitido.ComunicadoDispensa) < DAY(DtAdmitido.ComunicadoDispensa)

                  ),

               1,

               0

           )

       ) as Anos,

       (

           MONTH(DtDemitido.ComunicadoDispensa) - MONTH(DtAdmitido.ComunicadoDispensa)

           + IF(

               (MONTH(DtDemitido.ComunicadoDispensa) -MONTH(DtAdmitido.ComunicadoDispensa)) > 0,

               0,

               12

           )

           -IF(

               DAY(DtDemitido.ComunicadoDispensa) < DAY(DtAdmitido.ComunicadoDispensa),

               1,

               0

           )

       ) as Meses,

       (

           DtDemitido.ComunicadoDispensa

           -MakeDate(

               YEAR(DtDemitido.ComunicadoDispensa),

               MONTH(DtDemitido.ComunicadoDispensa)

               -IF(

                   DAY(DtDemitido.ComunicadoDispensa) < DAY(DtAdmitido.ComunicadoDispensa),

                   1,

                   0

               ),

               DAY(DtAdmitido.ComunicadoDispensa)

           )

       ) as Dias

Se não der certo, anexe seu exemplo aqui que verifico para você.

Até,

valerioms
Creator
Creator
Author

Olá Iwry, eu estava a utilizar o script como expressão. Agora o carreguei como o seu exemplo, a fazer o LOAD. O problema está em situações como este exemplo, 18/09/2017 - 11/09/2017 me trás o resultado = 0 anos, 12 meses e 7 dias. Concorda que deveria ser 1 ano, o meses e 7 dias?

OBS.: Esta é minha expressão agora: Anos & ' anos ' & Meses & ' meses ' & Dias & ' dias'