Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Turn Over

Boa tarde,

Gostaria de uma ajuda...

Preciso da quantidade total que tinha de funcionários ativos no mês, pois o sistema só me da a quantidade atual na data de hoje.

Tenho como ajuda a data de admissão, e a data de demissão de funcionários, porem os ativos só me da na data atual e pra fazer o turn over preciso do historico... quantos tinham naquele determinado mês.

Alguem pode me ajudar??

Obrigada!!

Labels (5)
1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

Você pode fazer de duas formas, criando os dados na base ou via set analise.

Segue script:

//Criação de Período para filtro

Periodo_Filtro_TMP:

LOAD * Inline [

Ano

1964

1971

1972

1973

1974

1976

1977

1978

1979

1980

1981

1982

1983

1984

1985

1986

1987

1988

1989

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

2001

2002

2003

2004

2005

2006

2007

2008

2009

2010

2011

2012

2013

2014

2015

2016

2017

2018

2019

2020

2021

2022

2023

2024

2025

2025

2025

2025

2025

];

Join(Periodo_Filtro_TMP)

LOAD * Inline [

Mes

01

02

03

04

05

06

07

08

09

10

11

12

];

join(Periodo_Filtro_TMP)

load * Inline [

Dia

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28 

29

30

31

];

NoConcatenate

// >>>>>>> Criação de períodos para ativos

PERIODO:

load Distinct

MonthName(makedate(Ano,Mes,Dia)) AS dPERIODO_TURNOVER

Resident Periodo_Filtro_TMP

Where Ano<= Year(Today()) and MonthName(makedate(Ano,Mes,Dia)) <= MonthName(Today());

DROP Table Periodo_Filtro_TMP;

join (PERIODO)

LOAD

  %CHAVE_COLABORADOR,

  monthname(dDAT_ADMIS)    AS dPERIODO_ADMIS,

  monthname(dDAT_DEMIS)    AS dPERIODO_DEMIS,

  nSITUACAO_FUNC,

  cTIPO_CONTRATO

FROM $(vPathTransformados)tFuncionario.qvd (qvd)

Where (nSITUACAO_FUNC = 'Demitido' and  len(dDAT_DEMIS) > 0) or (nSITUACAO_FUNC <> 'Demitido');

NoConcatenate

PERIODOS_TURNOVER:

load

*

Resident PERIODO

where dPERIODO_TURNOVER >= dPERIODO_ADMIS  

AND (if(len(dPERIODO_DEMIS)= 0 ,dPERIODO_TURNOVER <= MonthName(Today()),dPERIODO_TURNOVER <=dPERIODO_DEMIS )); // >>>>>> Criando calendário apenas com ativos nos períodos

DROP Table PERIODO;

DROP Field dPERIODO_ADMIS, dPERIODO_DEMIS FROM PERIODOS_TURNOVER;

// >>>>>>> Incluindo Periodos de admissão

Left JOIN(PERIODOS_TURNOVER)

LOAD

%CHAVE_COLABORADOR,

  monthname(dDAT_ADMIS)      AS dPERIODO_TURNOVER,

    '1'      AS cFLAG_ADMISSAO

FROM $(vPathTransformados)tFuncionario.qvd (qvd);

// >>>>>>> Incluindo Periodos de Demissão 

Left JOIN(PERIODOS_TURNOVER)

LOAD

%CHAVE_COLABORADOR,

  monthname(dDAT_DEMIS)    AS dPERIODO_TURNOVER,

  '1' AS cFLAG_DEMISSAO

FROM $(vPathTransformados)tFuncionario.qvd  (qvd);

NoConcatenate

PERIODOS_TURNOVER_TMP:

LOAD

%CHAVE_COLABORADOR,

dPERIODO_TURNOVER,

     nSITUACAO_FUNC, 

     cFLAG_ADMISSAO,

     cTIPO_CONTRATO,

     cFLAG_DEMISSAO

Resident PERIODOS_TURNOVER;

DROP Table PERIODOS_TURNOVER;

Via set analisys você pode criar os períodos de analise em uma tabela separada e contar os funcionários em que a data de adm <= data_analise<= data demissão

Aguardo, eu resolvi meu problema usando o primeiro


View solution in original post

4 Replies
Anonymous
Not applicable
Author

Você pode fazer de duas formas, criando os dados na base ou via set analise.

Segue script:

//Criação de Período para filtro

Periodo_Filtro_TMP:

LOAD * Inline [

Ano

1964

1971

1972

1973

1974

1976

1977

1978

1979

1980

1981

1982

1983

1984

1985

1986

1987

1988

1989

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

2001

2002

2003

2004

2005

2006

2007

2008

2009

2010

2011

2012

2013

2014

2015

2016

2017

2018

2019

2020

2021

2022

2023

2024

2025

2025

2025

2025

2025

];

Join(Periodo_Filtro_TMP)

LOAD * Inline [

Mes

01

02

03

04

05

06

07

08

09

10

11

12

];

join(Periodo_Filtro_TMP)

load * Inline [

Dia

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28 

29

30

31

];

NoConcatenate

// >>>>>>> Criação de períodos para ativos

PERIODO:

load Distinct

MonthName(makedate(Ano,Mes,Dia)) AS dPERIODO_TURNOVER

Resident Periodo_Filtro_TMP

Where Ano<= Year(Today()) and MonthName(makedate(Ano,Mes,Dia)) <= MonthName(Today());

DROP Table Periodo_Filtro_TMP;

join (PERIODO)

LOAD

  %CHAVE_COLABORADOR,

  monthname(dDAT_ADMIS)    AS dPERIODO_ADMIS,

  monthname(dDAT_DEMIS)    AS dPERIODO_DEMIS,

  nSITUACAO_FUNC,

  cTIPO_CONTRATO

FROM $(vPathTransformados)tFuncionario.qvd (qvd)

Where (nSITUACAO_FUNC = 'Demitido' and  len(dDAT_DEMIS) > 0) or (nSITUACAO_FUNC <> 'Demitido');

NoConcatenate

PERIODOS_TURNOVER:

load

*

Resident PERIODO

where dPERIODO_TURNOVER >= dPERIODO_ADMIS  

AND (if(len(dPERIODO_DEMIS)= 0 ,dPERIODO_TURNOVER <= MonthName(Today()),dPERIODO_TURNOVER <=dPERIODO_DEMIS )); // >>>>>> Criando calendário apenas com ativos nos períodos

DROP Table PERIODO;

DROP Field dPERIODO_ADMIS, dPERIODO_DEMIS FROM PERIODOS_TURNOVER;

// >>>>>>> Incluindo Periodos de admissão

Left JOIN(PERIODOS_TURNOVER)

LOAD

%CHAVE_COLABORADOR,

  monthname(dDAT_ADMIS)      AS dPERIODO_TURNOVER,

    '1'      AS cFLAG_ADMISSAO

FROM $(vPathTransformados)tFuncionario.qvd (qvd);

// >>>>>>> Incluindo Periodos de Demissão 

Left JOIN(PERIODOS_TURNOVER)

LOAD

%CHAVE_COLABORADOR,

  monthname(dDAT_DEMIS)    AS dPERIODO_TURNOVER,

  '1' AS cFLAG_DEMISSAO

FROM $(vPathTransformados)tFuncionario.qvd  (qvd);

NoConcatenate

PERIODOS_TURNOVER_TMP:

LOAD

%CHAVE_COLABORADOR,

dPERIODO_TURNOVER,

     nSITUACAO_FUNC, 

     cFLAG_ADMISSAO,

     cTIPO_CONTRATO,

     cFLAG_DEMISSAO

Resident PERIODOS_TURNOVER;

DROP Table PERIODOS_TURNOVER;

Via set analisys você pode criar os períodos de analise em uma tabela separada e contar os funcionários em que a data de adm <= data_analise<= data demissão

Aguardo, eu resolvi meu problema usando o primeiro


srchagas
Creator III
Creator III

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Thalita,

penso que a melhor saida seria usar o iterno() tendo a data de admissao e de demissao como intervalos (se nao tiver data de demissão seria o today()).

Assim, mes a mes vais ter quem estava ativo.

Segue um exemplo similar........

furtado@farolbi.com.br
Anonymous
Not applicable
Author

Deu certo!!

Muito obrigada!!!!