Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 |
Outra coisa seria fazer um gráfico tipo esse abaixo separado por idade tenho a data de nascimento no campo Nascimento :
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
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
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
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...... )
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,
Gustavo
Tens como disponibilizar um modelo pequeno?
Boa Tarde Alessandro,
Segue um modelo conforme solicitado.
Desde já agradeço,
Abraço,
Gustavo Amorim
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.
Bom dia Alessandro,
Muito obrigado!
Abraço,
Gustavo Amorim