Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Cenario Intervalo de Datas

Bom dia a todos!

Estou com uma dúvida ao montar um cenário

Estou desenvolvendo um Painel no Layout no qual no meu banco de dados possuo as informações (Abaixo:

( os campos que estão em amarelo eu coloquei direto na carga no QV com as funções YEAR, Month, Day

Cadastro

Nome

Admissão

Ano Admissão

Mês Admissão

Dia Admissão

Data Afastamento

Ano Afastamento

Mês Afastamento

Dia Afastamento

1

A

03/09/2012

2012

9

3

17/09/2014

2014

9

17

2

B

20/09/2012

2012

9

20

01/08/2013

2013

8

1

3

C

20/09/2012

2012

9

20

00/00/0000

0

0

0

4

D

01/10/2012

2012

10

1

00/00/0000

0

0

0

5

E

20/09/2012

2012

9

20

00/00/0000

0

0

0

6

F

10/07/2012

2012

7

10

19/08/2013

2013

8

19

7

G

16/04/2013

2013

4

16

29/05/2013

2013

5

29

8

H

22/05/2013

2013

5

22

00/00/0000

0

0

0

9

I

17/06/2013

2013

6

17

00/00/0000

0

0

0

10

J

02/09/2013

2013

9

2

02/01/2015

2015

1

2

11

K

18/09/2013

2013

9

18

00/00/0000

0

0

0

12

L

10/11/2014

2014

11

10

00/00/0000

0

0

0

13

M

10/11/2014

2014

11

10

00/00/0000

0

0

0

  • Gostaria de montar um gráfico onde o mesmo me traria por ano e/Ou Mês todos os empregados ativos . Dúvida: Qual seria a melhor forma de fazer esta limitação por período como por Ex.: Jan/2014 quem estão ativos?
  • Gostaria também de ter um lista dos ANOS e uma lista de MES para que fosse possível a seleção independente. Dúvida: Tenho que criar uma lista independente tipo InLine? Se sim como associá-la? Se não qual seria a melhor solução?

Outra coisa seria fazer um gráfico tipo esse abaixo separado por idade tenho a data de nascimento no campo Nascimento :

Age Distribution.png

Como faço para realizar estas separações por intervalo de anos? Da mesma forma teria que associar o intervalo de seleção tipo que estas informações estivessem associados com os ativos do período selecionado tipo Janeiro/2014 .

Sei que são muitas perguntas mas acredito que as associações irão acontecendo com o tempo e com estas definições vou conseguir dar continuidade no meu projeto.

Desde já agradeço,

Abraço,

Gustavo

1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Boa tarde Gustavo.

Trabalho com modelos de RH e particularmente, acredito que criar mês a mês os registros vale a pena.

Assim, se o funcionário foi admitido em 01/2014, sera criado um registro com ano e mês para 01/2014 , 02/2014 .....01/2015 , 02/2015 ou ate o ano e mês da demissão.  Assim em qualquer mês e ano que for selecionado, você saberá quais os funcionários que estavam naquele mês ativos e os demitidos. Um menos o outro te dará os ativos.

Como fazer?    While e iterno().

Segue um exemplo de código.

//========================================================================

TmpEscala:

LOAD

    NUMEMP & '-' & NUMCAD     as Funcionario_Codigo,

    date(DATALT,'DD/MM/YYYY') as FuncEscala_Data,

    CODESC                    as FuncEscala_Codigo,

    if(Previous(NUMEMP & '-' & NUMCAD)=NUMEMP & '-' & NUMCAD,Previous(DATALT),Today()) as FuncEscala_DataFim ;

SQL SELECT NUMEMP,NUMCAD,DATALT,CODESC FROM "Vetorh".dbo.R038HES order by NUMCAD,DATALT DESC;

//

ResumoEscala:

LOAD

     Funcionario_Codigo,

     year(AddMonths(FuncEscala_Data,IterNo()-1)) & '.' & num(month(AddMonths(FuncEscala_Data,IterNo()-1)),'00')  AS Escala_Periodo,

     FuncEscala_Codigo                                                                                           as Escala

Resident TmpEscala

While  num(AddMonths(FuncEscala_Data,IterNo()-1)) <= num(FuncEscala_DataFim);

//========================================================================

Neste caso eu leio em ordem de funcionário e data descendente (importante isto...) e vejo sobre o registro anterior ,se do mesmo funcionário a data, senão a atual.  Como lê em ordem descendente ficaria como exemplo assim

Funcionário   Data

Alessandro    01/01/2015

Alessandro    01/06/2014

Então, ao ler Alessandro 01/01/2015, como o previous não vai ser verdadeiro pois não tem, a data sera a atual. Ao ler Alessandro 01/06/2015, o previous dará como data o 01/01/2015, gerando registros mês a mês de 06/2014 a 01/2015

AMF

furtado@farolbi.com.br

View solution in original post

7 Replies
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Boa tarde Gustavo.

Trabalho com modelos de RH e particularmente, acredito que criar mês a mês os registros vale a pena.

Assim, se o funcionário foi admitido em 01/2014, sera criado um registro com ano e mês para 01/2014 , 02/2014 .....01/2015 , 02/2015 ou ate o ano e mês da demissão.  Assim em qualquer mês e ano que for selecionado, você saberá quais os funcionários que estavam naquele mês ativos e os demitidos. Um menos o outro te dará os ativos.

Como fazer?    While e iterno().

Segue um exemplo de código.

//========================================================================

TmpEscala:

LOAD

    NUMEMP & '-' & NUMCAD     as Funcionario_Codigo,

    date(DATALT,'DD/MM/YYYY') as FuncEscala_Data,

    CODESC                    as FuncEscala_Codigo,

    if(Previous(NUMEMP & '-' & NUMCAD)=NUMEMP & '-' & NUMCAD,Previous(DATALT),Today()) as FuncEscala_DataFim ;

SQL SELECT NUMEMP,NUMCAD,DATALT,CODESC FROM "Vetorh".dbo.R038HES order by NUMCAD,DATALT DESC;

//

ResumoEscala:

LOAD

     Funcionario_Codigo,

     year(AddMonths(FuncEscala_Data,IterNo()-1)) & '.' & num(month(AddMonths(FuncEscala_Data,IterNo()-1)),'00')  AS Escala_Periodo,

     FuncEscala_Codigo                                                                                           as Escala

Resident TmpEscala

While  num(AddMonths(FuncEscala_Data,IterNo()-1)) <= num(FuncEscala_DataFim);

//========================================================================

Neste caso eu leio em ordem de funcionário e data descendente (importante isto...) e vejo sobre o registro anterior ,se do mesmo funcionário a data, senão a atual.  Como lê em ordem descendente ficaria como exemplo assim

Funcionário   Data

Alessandro    01/01/2015

Alessandro    01/06/2014

Então, ao ler Alessandro 01/01/2015, como o previous não vai ser verdadeiro pois não tem, a data sera a atual. Ao ler Alessandro 01/06/2015, o previous dará como data o 01/01/2015, gerando registros mês a mês de 06/2014 a 01/2015

AMF

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

No caso da idade, podemos ter duas. uma a atual e a outra no ano e mes selecionado.   Imagina voce selecionar Janeiro de 2014.  As idades deveriam estar calculadas para Janeiro de 2014 (meu ponto de vista...).  Se for assim

    floor(age(makedate(Ano,Mes),Dt_Nasc))  as Folha_Func_Idade

sendo que o Ano e Mes seriam os gerados mes a mes (que no exemplo acima seria o campo Escala_Periodo para efeito de entendimento...... )

furtado@farolbi.com.br
Not applicable
Author

Bom Alessandro,

Esta questão da Data não entendi onde posso colocar esse comando... e quando você fala que o ano e Mês seriam os gerados mês a mês você quer dizer o campo gerado junto que o no Escala_Período ficou assim

2014.01

utilizei o código conforme abaixo:

LOAD

Cadastro as Funcionario_Codigo,

date(Admissão,'DD/MM/YYYY') as FuncEscala_Data,

//CODESC as FuncEscala_Codigo,

if(Previous(Cadastro)=Cadastro,Previous(Admissão),Today()) as FuncEscala_DataFim ,

Não utilizei o CODESC as FuncEscala_Código isso influencia em algo no meu cenário?

Outra coisa como consigo fazer esta quebra abaixo para este tipo de gráfico?

Abraço,

GustavoAge Distribution.png

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Tens como disponibilizar um modelo pequeno?

furtado@farolbi.com.br
Not applicable
Author

Boa Tarde Alessandro,

Segue um modelo conforme solicitado.

Desde já agradeço,

Abraço,

Gustavo Amorim

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Boa noite Gustavo.

Salvei a tabela em um QVD e rodei novamente (visto que você tinha já tentado a rotina).

Como tenho a data admissão e de demissão na mesma tabela não precisa usar o peek.

Uso o peek para pegar de algum outro registro da mesma tabela quando as datas estão em registros diferentes e neste caso uso order by func e data desc por exemplo.

Para cada funcionário você terá um registro para cada mês trabalhado ate a demissão.

Se quiser saber a idade em cada mês, basta no script colocar a linha

     floor(age(makedate(year(AddMonths(Admissão,IterNo()-1)),month(AddMonths(Admissão,IterNo()-1))),Nascimento))  as Funcionario_Idade,

e para cada mês sera calculado a idade. Assim, ao selecionar o ano e mês você sabe quantos a idade que o funcionário tinha.

2015-02-17 23_38_04-QlikView x64 - [C__tmp_Gestão HR_teste.qvw_].png

furtado@farolbi.com.br
Not applicable
Author

Bom dia Alessandro,

Muito obrigado!

Abraço,

Gustavo Amorim