Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
20012 and 2016 were leap years
Also dividing by a static number would not be the best way to do this
I'm sorry but i not understand.
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)
)
)
Olá Iwry, está a mostrar erro no IIF.
COPIE DO SQL NO QLIK É SÓ 'IF', TIRA UM 'I'.
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.
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 !!
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é,
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'