Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Fala galera Guru do QlikView
Veja se existe uma forma de resolver esse caso:
O funcionário possui uma jornada fixa de trabalho que inicia as 19:00 e encerra às 4:45
Tabela de atividades:
DTINICIO - Inicio da atividade formato 00/00/0000 00:00:00
DTFIM - Fim da atividade formato 00/00/0000 00:00:00
Eu implementei o famoso recurso do calendário e funciona perfeitamente para seleções de atividades de mês, dia e ano
A questão do problema é: Como filtrar o funcionário e apenas (um único dia), exemplo, dia 30/10/2017 e o sistema retorna todas as atividades realizadas pelo funcionário considerando a jornada fixa de trabalho?
FUNCIONARIO | INICIO | FIM |
---|---|---|
MARCIO | 30/10/2017 19:30:00 | 30/10/2017 19:40:00 |
MARCIO | 30/10/2017 19:55:00 | 30/10/2017 20:30:00 |
MARCIO | 31/10/2017 03:30:00 | 31/10/2017 04:15:00 |
MARCIO | 31/10/2017 21:30:00 | 31/10/2017 22:30:00 |
Resultado esperado ao selecionarmos o dia: 30/10/2017
O funcionário iniciou a primeira atividade 30/10/2017 19:30:00 e terminou 31/10/2017 04:15:00
Repare que não podemos considerar o último registro (em vermelho) pois já se trata da Jornada de trabalho iniciada no dia 31
Obrigado!
E ai amigo tudo bom ?
Entao se teria algo para defirni o periodo dele ? pq se tiver implementa no Where aqui que deve funcionar.
Uma coisa: Voce precisa fazer carga diaria para funcionar esse codigo e so melhorar o que falta..segue modelo que fiz
DATA:
LOAD * INLINE [
FUNCIONARIO, INICIO, FIM
MARCIO, 30/10/2017 19:30:00, 30/10/2017 19:40:00
MARCIO, 30/10/2017 19:55:00, 30/10/2017 20:30:00
MARCIO, 31/10/2017 03:30:00, 31/10/2017 04:15:00
MARCIO, 31/10/2017 21:30:00, 31/10/2017 22:30:00
THIAGO, 30/10/2017 08:00:00, 30/10/2017 12:00:00
THIAGO, 30/10/2017 13:00:00, 30/10/2017 18:00:00
JOSE , 30/10/2017 14:00:00, 30/10/2017 16:00:00
JOSE , 30/10/2017 17:00:00, 30/10/2017 20:00:00
];
TmpDadosTrabalhaMesmoDia:
NoConcatenate
LOAD
Min(INICIO) as DtInicioTrabalho,
FUNCIONARIO
Resident DATA
Where INICIO >= '30/10/2017 06:00:00' and FIM <= '30/10/2017 20:00:00'
Group By FUNCIONARIO ;
Left Join
LOAD
Max(FIM) as DtFimTrabalho,
FUNCIONARIO
Resident DATA
Where FIM >= '30/10/2017 06:00:00' and FIM <= '30/10/2017 20:00:00'
Group By FUNCIONARIO ;
TmpDadosViradaNoite:
NoConcatenate
LOAD
Min(INICIO) as DtInicioTrabalhoExtra,
FUNCIONARIO
Resident DATA
Where INICIO >= '30/10/2017 19:00:00'
Group By FUNCIONARIO ;
Left Join
LOAD
Max(FIM) as DtFimTrabalhoExtra,
FUNCIONARIO
Resident DATA
Where FIM >= '31/10/2017 00:00:00' and FIM <= '31/10/2017 06:00:00'
Group By FUNCIONARIO ;
Concatenate(TmpDadosTrabalhaMesmoDia)
LOAD
*
Resident TmpDadosViradaNoite;
DROP Table TmpDadosViradaNoite;
FatoHorasTrabalhadas:
NoConcatenate
LOAD
FUNCIONARIO,
DtInicioTrabalho,
DtFimTrabalho
Resident TmpDadosTrabalhaMesmoDia
Where Len(DtInicioTrabalhoExtra) = 0
;
Concatenate(FatoHorasTrabalhadas)
LOAD
FUNCIONARIO,
DtInicioTrabalhoExtra as DtInicioTrabalho,
DtFimTrabalhoExtra as DtFimTrabalho
Resident TmpDadosTrabalhaMesmoDia
Where Len(DtInicioTrabalhoExtra) > 0
;
DROP Table TmpDadosTrabalhaMesmoDia;
DROP Table DATA;