Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
valerioms
New Contributor III

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.

Tags (1)
11 Replies
vinieme12
Esteemed Contributor II

Re: Tempo de Casa

20012 and 2016 were leap years

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

valerioms
New Contributor III

Re: Tempo de Casa

I'm sorry but i not understand.

iwryrozemberg
New Contributor II

Re: Tempo de Casa

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
New Contributor III

Re: Tempo de Casa

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

iwryrozemberg
New Contributor II

Re: Tempo de Casa

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

valerioms
New Contributor III

Re: Tempo de Casa

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
Esteemed Contributor II

Re: Tempo de Casa

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 !!

iwryrozemberg
New Contributor II

Re: Tempo de Casa

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
New Contributor III

Re: Tempo de Casa

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'