Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Feras.
Eu tenho dados de horário de impressão de documentos conforme a tabela abaixo.
Como minha equipe trabalha em turnos, eu preciso saber quais impressões foram feitas nestes turnos.
Então, eu preciso separar em ranges de impressão feitas das 06h31 às 12h30, 12h31 às 18h30, 18h31 às 00h30 e 00h31 às 06h30.
Percebam que os dados da data e hora estão juntos numa mesma coluna. Se tiver como separar em duas colunas, melhor ainda.
Se não der, pelo menos que o Clikview pegue apenas o string com a hora e que eu possa separar em turnos como citei acima.
Aceito sugestões.
Antecipadamente obrigado.
HORA |
8/4/2013 13:25:11 |
8/4/2013 13:25:11 |
8/4/2013 13:25:10 |
8/4/2013 13:25:08 |
8/4/2013 13:25:07 |
8/4/2013 13:25:07 |
8/4/2013 13:25:07 |
8/4/2013 13:25:06 |
8/4/2013 13:25:06 |
8/4/2013 12:55:02 |
8/4/2013 12:55:01 |
8/4/2013 12:55:01 |
8/4/2013 12:40:02 |
8/4/2013 12:40:01 |
8/4/2013 12:40:00 |
8/4/2013 12:25:05 |
8/4/2013 12:25:04 |
8/4/2013 12:25:04 |
8/4/2013 12:25:04 |
8/4/2013 12:25:03 |
8/4/2013 12:25:01 |
8/4/2013 12:10:05 |
8/4/2013 12:10:04 |
8/4/2013 12:10:04 |
8/4/2013 12:10:03 |
Olá Luis,
Estou sem tempo de responder na community, infelizmente.
Dá uma olhada no código abaixo, não testei muito, espero que seja útil, abraço.
Turnos:
LOAD * INLINE [
Ini, Fim, Início, Término, Descrição
0030, 0630, 00:30, 06:30, Turno 1
0630, 1230, 06:30, 12:30, Turno 2
1230, 1830, 12:30, 18:30, Turno 3
1830, 2430, 18:30, 00:30, Turno 4
];
Marcações:
LOAD *,
If(KeepChar(Hora,'0123456789')<30,
2400+KeepChar(Hora,'0123456789'),
KeepChar(Hora,'0123456789')
) as Hor
INLINE [
Hora, Post, Usuário
00:35, 0, Altamir Brun
08:45, 1, Altamir Brun
08:54, 2, Rebeca Gums
13:15, 3, Aderlan Rodrigues
16:47, 4, Altamir Brun
18:31, 5, Luiz Carlos Lorenzo
00:20, 6, Aderlan Rodrigues
];
IntervalMatch (Hor) LOAD Ini, Fim Resident Turnos;
Bom dia!
Se os turno forem definidos, use um if mesmo. Se o que te interessar for apenas o turno, faça isso na extração dos dados mesmo.
Att.
Rebeca Gums
Bom dia Brunpipo,
Dá uma olhada no anexo.
Primeiro você extrai o serial da hora, depois usa os ifs para determinar os turnos.
Essa é minha sugestão, espero que sejá útil.
Abraço.
Para quem usa o QlikView Personal Edition:
DataHora:
LOAD DataHora,
Date(DataHora,'HH:mm') as Hora,
Frac(Date(DataHora)) as HoraSerial
INLINE [
DataHora
1/1/2013 00:31:00
1/1/2013 06:31:00
1/1/2013 12:31:00
1/1/2013 18:31:00
7/3/2013 13:25:10
9/3/2013 13:25:08
8/4/2013 13:25:07
8/4/2013 13:25:07
8/4/2013 13:25:07
8/4/2013 13:25:06
8/4/2013 13:25:06
8/4/2013 12:55:02
8/4/2013 12:55:01
8/4/2013 12:55:01
8/4/2013 12:40:02
8/4/2013 12:40:01
8/4/2013 12:40:00
8/4/2013 12:25:05
8/4/2013 12:25:04
8/4/2013 12:25:04
8/4/2013 12:25:04
8/4/2013 12:25:03
8/4/2013 12:25:01
8/4/2013 12:10:05
8/4/2013 12:10:04
8/4/2013 12:10:04
8/4/2013 12:10:03
];
LOAD DataHora,
if(HoraSerial<=0.27152,
'1º Turno',
if(HoraSerial<=0.52152,
'2º Turno',
if(HoraSerial<=0.77152,
'3º Turno',
'4º Turno'
)
)
) as Turno
Resident DataHora;
Aderlan.
Funcionou.
O único problema é que eu fui infeliz em não mencionar que aquela tabela era apenas um pedaço dela. Nós fazemos mais de 1.500 impressões por dia. Então o comando INLINE neste caso, não dará para usar. Vou tentar substituir por um LOAD FROM 'arquivo' mesmo. Depois te conto.
Mesmo por enquanto, valeu a dica. A ideia de separar os turnos por um string serial foi legal. Não tinha pensado nisso.
Abraços.
Olá brunpipo,
A carga INLINE é apenas para demonstração, você tem mesmo que mudar para from, não tem como eu criar um exemplo "pronto" para você, não conheço tua estrutura e regras de negócio. Rsrsrs...
Para chegar a 1.000.000 de impressões por ano, vocês vão ter que imprimir ~2.740 impressões por dia, isso é pouco, se mesmo assim tiver problemas de desempenho, use carga incremental.
Abraço.
* se foi útil, marque como ajuda, se resolvolveu, marque como resposta, tem mais gente com dúvidas parecidas procurando respostas!
Boa Tarde,
Temos apenas um Problema nisso tudo...
como pode ver s classificação das 18h31 às 00h30 pelo que sei vai pegar o proximo dia ja....no exemplo que vc anexou se eu selecionar o dia de ontem por exemplo, ele dele pegar das 18:31 de ontem ate à 00:31 de hoje...
Como posso tratar isso ...tenho o mesmissimo problema com essa separação aqui na Empresa.
Agradeço muito se alguem puder ajudar, ou souber de uma solução para isso!
Abr.
Olá Luis,
Estou sem tempo de responder na community, infelizmente.
Dá uma olhada no código abaixo, não testei muito, espero que seja útil, abraço.
Turnos:
LOAD * INLINE [
Ini, Fim, Início, Término, Descrição
0030, 0630, 00:30, 06:30, Turno 1
0630, 1230, 06:30, 12:30, Turno 2
1230, 1830, 12:30, 18:30, Turno 3
1830, 2430, 18:30, 00:30, Turno 4
];
Marcações:
LOAD *,
If(KeepChar(Hora,'0123456789')<30,
2400+KeepChar(Hora,'0123456789'),
KeepChar(Hora,'0123456789')
) as Hor
INLINE [
Hora, Post, Usuário
00:35, 0, Altamir Brun
08:45, 1, Altamir Brun
08:54, 2, Rebeca Gums
13:15, 3, Aderlan Rodrigues
16:47, 4, Altamir Brun
18:31, 5, Luiz Carlos Lorenzo
00:20, 6, Aderlan Rodrigues
];
IntervalMatch (Hor) LOAD Ini, Fim Resident Turnos;
Boa Tarde Aderlan,
Então fiz da seguinte forma após varios testes
usai na minha tabela principal um IF
IF(HOUR(DT_ENTRADA) < 7 ,MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA))-1,MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA))) AS [Dt. Entrada Turno]
Assim toda hora menor que 7 horas desconta para ser apresentada como sendo relativo ao turno anterior por isso IF(HOUR(DT_ENTRADA) < 7 ,MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA))-1, caso contrario deixe na data atual MakeDate(YEAR(DT_ENTRADA),Month(DT_ENTRADA),DAY(DT_ENTRADA)). Isso tudo na Geração do meu .QVD
Ai depois na Aplicaçao eu apliquei junto o INLINE abaixo e relacionei o campo Hora com minha tabela do QVD que possuia as informações.
TURNO:
LOAD * INLINE [
Hora_Entrada, Turno, Desc_Turno
1,'19:00-07:00', 'Noite'
2,'19:00-07:00', 'Noite'
3,'19:00-07:00', 'Noite'
4,'19:00-07:00', 'Noite'
5,'19:00-07:00', 'Noite'
6,'19:00-07:00', 'Noite'
7,'07:00-13:00', 'Manha'
8,'07:00-13:00', 'Manha'
9,'07:00-13:00', 'Manha'
10,'07:00-13:00', 'Manha'
11,'07:00-13:00', 'Manha'
12,'07:00-13:00', 'Manha'
13,'13:00-19:00', 'Tarde'
14,'13:00-19:00', 'Tarde'
15,'13:00-19:00', 'Tarde'
16,'13:00-19:00', 'Tarde'
17,'13:00-19:00', 'Tarde'
18,'13:00-19:00', 'Tarde'
19,'19:00-07:00', 'Noite'
20,'19:00-07:00', 'Noite'
21,'19:00-07:00', 'Noite'
22,'19:00-07:00', 'Noite'
23,'19:00-07:00', 'Noite'
0,'19:00-07:00', 'Noite'];
Funcionou perfeitamente.
Obrigado.