Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá Amigos,
Poderiam me ajudar com este ponto:
Tenho uma tabela com o nome dos funcionários, data de admissão e demissão.
Preciso apresentar um gráfico com a quantidade de funcionários por mês.
Qual seria a foma mais inteligente de fazer isso?
Anexo um exemplo.
Abs.
Olá, veja se assim lhe ajuda.
Funcionarios:
LOAD * INLINE [
Funcionário, Admissão, Demissão
Egnaldo, 05/11/2013, 05/02/2014
Yuri, 05/10/2013,
Aderlon, 05/09/2013,
Clever, 05/08/2013, 05/03/2014
Pablo, 05/07/2013,
Tonial, 05/06/2013,
Kaauan, 05/05/2014,
];
DATA_TMP:
LOAD Distinct Admissão as DATA_TMP Resident Funcionarios;
LOAD Distinct Demissão as DATA_TMP Resident Funcionarios;
MaxMin:
LOAD
Max(DATA_TMP) as MaxData,
Min(DATA_TMP) as MinData
Resident DATA_TMP;
LET vMaxData = Peek('MaxData');
LET vMinData = Peek('MinData');
DROP Table DATA_TMP, MaxMin;
TMP_Calendario:
LOAD
Date(MonthStart('$(vMinData)')+(RowNo()-1)) AS Data
Autogenerate(Date('$(vMaxData)')-Date('$(vMinData)'));
Funcionarios2:
LEFT JOIN (Funcionarios)
IntervalMatch (Data) LOAD Admissão, Demissão RESIDENT Funcionarios;
Dados:
LEFT JOIN (TMP_Calendario)
LOAD DISTINCT Funcionário, Admissão, Demissão, Data RESIDENT Funcionarios;
DROP TABLE Funcionarios;
RENAME Table TMP_Calendario to Funcionarios;
Abraços.
Tonial.
Olá, veja se assim lhe ajuda.
Funcionarios:
LOAD * INLINE [
Funcionário, Admissão, Demissão
Egnaldo, 05/11/2013, 05/02/2014
Yuri, 05/10/2013,
Aderlon, 05/09/2013,
Clever, 05/08/2013, 05/03/2014
Pablo, 05/07/2013,
Tonial, 05/06/2013,
Kaauan, 05/05/2014,
];
DATA_TMP:
LOAD Distinct Admissão as DATA_TMP Resident Funcionarios;
LOAD Distinct Demissão as DATA_TMP Resident Funcionarios;
MaxMin:
LOAD
Max(DATA_TMP) as MaxData,
Min(DATA_TMP) as MinData
Resident DATA_TMP;
LET vMaxData = Peek('MaxData');
LET vMinData = Peek('MinData');
DROP Table DATA_TMP, MaxMin;
TMP_Calendario:
LOAD
Date(MonthStart('$(vMinData)')+(RowNo()-1)) AS Data
Autogenerate(Date('$(vMaxData)')-Date('$(vMinData)'));
Funcionarios2:
LEFT JOIN (Funcionarios)
IntervalMatch (Data) LOAD Admissão, Demissão RESIDENT Funcionarios;
Dados:
LEFT JOIN (TMP_Calendario)
LOAD DISTINCT Funcionário, Admissão, Demissão, Data RESIDENT Funcionarios;
DROP TABLE Funcionarios;
RENAME Table TMP_Calendario to Funcionarios;
Abraços.
Tonial.
Eu faria da mesma forma que o Fernando Tonial, mas colocaria apenas 1 linha por mês
Fernando, Obrigado até o momento.
Deu quase tudo certo, com uma pequena exceção, quando efetuo a recarga não é importado o Kaauan que no exemplo foi admitido em 2014.
Consegue me ajudar com este GAP?
Abs.
Retira a função MonthStart() desse load e adiciona a soma + 1.
TMP_Calendario:
LOAD
Date(MonthStart('$(vMinData)')+(RowNo()-1)) AS Data
Autogenerate(Date('$(vMaxData)')-Date('$(vMinData)'));
ficando assim:
TMP_Calendario:
LOAD
Date(('$(vMinData)')+(RowNo()-1)) AS Data
Autogenerate(Date('$(vMaxData)')-Date('$(vMinData)')+1);
Abraços.
Tonial.
Mais um código perfeito.
Porém no meu (não sei se é alguma falha minha) o campo de demissão estava NULL ou preenchido. Com isso, os funcionários que não foram demitidos não estavam aparecendo na lista.
Com essa alteração, ficou correto.
Antes:
TURNOVER_TEMP:
LOAD Distinct
COLABORADOR_KEY
, RA_ADMISSA AS Admissão
, RA_DEMISSA AS Demissão
FROM $(vDiretorioRH)Carga_T\CADASTRO_DE_FUNCIONARIOS_E_AUTONOMOS.QVD (QVD)
Depois
TURNOVER_TEMP:
LOAD Distinct
COLABORADOR_KEY
, RA_ADMISSA AS Admissão
, IF(ISNULL(RA_DEMISSA)='-1','',RA_DEMISSA) AS Demissão
FROM $(vDiretorioRH)Carga_T\CADASTRO_DE_FUNCIONARIOS_E_AUTONOMOS.QVD (QVD)
** o campo é tratada da seguinte forma para alimentar o CADASTRO_DE_FUNCIONARIOS_E_AUTONOMOS.QVD :
if(Trim(RA_DEMISSA) = '', null(), Date(Date#(RA_DEMISSA, 'YYYYMMDD'),'DD/MM/YYYY')) |
Exatamente. Quando o campo DEMISSAO está em branco, funciona o IntervalMatch, agora se ele estiver NULL, não funciona.
Abçs!!!
E era essa a forma que eu precisava: mensal.
Ficaria assim:
Funcionarios:
LOAD *,
MonthName(Admissão) as Admissão_mes,
If(Len(Trim(Demissão))=0, '', MonthName(Demissão)) as Demissão_mes;
LOAD * INLINE [
Funcionário, Admissão, Demissão
Egnaldo, 05/11/2013, 05/02/2014
Yuri, 05/10/2013,
Aderlon, 05/09/2013,
Clever, 05/08/2013, 05/03/2014
Pablo, 05/07/2013,
Tonial, 05/06/2013,
Kaauan, 05/05/2014,
];
DATA_TMP:
LOAD Distinct Admissão_mes as DATA_TMP Resident Funcionarios;
LOAD Distinct Demissão_mes as DATA_TMP Resident Funcionarios;
MaxMin:
LOAD
Min(DATA_TMP) as MinData,
Max(DATA_TMP) as MaxData
Resident DATA_TMP;
LET vMaxData = Peek('MaxData');
LET vMinData = Peek('MinData');
DROP Table DATA_TMP, MaxMin;
TMP_Calendario:
LOAD Distinct
MonthStart('$(vMinData)'+(RowNo()-1)) AS Data
Autogenerate(Date('$(vMaxData)')-Date('$(vMinData)')+1);
Left Join (Funcionarios)
IntervalMatch(Data) Load [Admissão_mes], [Demissão_mes] Resident Funcionarios;
Drop Table TMP_Calendario;
[Quantidade Funcionários Mensais]:
Load
Data,
Count(Funcionário) as Qtd
Resident Funcionarios
Group By Data;
Att,
Péricles.
Muito bom Péricles,
Só recomendo preencher o valor da demissão com o valor do mês atual. Isso eu mesmo não fiz no primeiro código, no qual eu deveria ter feito.
Don't worry, be Qlik.
Tonial.