Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Intervalo de Datas

Senhores, boa noite.

Estou com a seguinte dúvida...tenho uma tabela de excel com as seguintes informações..

Hóspede: Paulo Cruz, DataEntrada: 21/11/2010, Saída: 25/11/2010.

Logo, queria um gráfico em linha que mostrasse que tenho 1 hospede dia 21, 22, 23, 24 e 25.

Exatamente como no Exemplo abaixo feito em Excel.

error loading image

Obrigado desde já,

Fabio Alamini

6 Replies
Not applicable
Author

Fabio,

Esse é um típico problema que na primeira olhada parece ser bem simples, mas na verdade não é.

Fiquei curioso com o problema, e resolvi simular por aqui.

Consegui resolver, com algumas etapas, usando tabela temporária.

Segue o script abaixo:

------------------------------------------------------------------------------------------------------------

Clientes:
LOAD Item,
Cliente,
Data_Entrada,
Data_Saida
FROM
[teste-datas.xls]
(biff, embedded labels, table is Plan1$);


Datas:
load
distinct Data_Entrada as Data
resident
Clientes;

Datas:
load
distinct Data_Saida as Data
resident
Clientes;

Agenda_Temp:
noconcatenate Load
Data
resident
Datas;
left join
load * resident Clientes;

Drop table Clientes;

Agenda:
Load
Data,
if (Data_Entrada <= Data and Data_Saida >=Data, 1,0) as Hospedes
resident Agenda_Temp;

Drop Table Agenda_Temp;

------------------------------------------------------------------------------------------------

Foi um bom exercicio. Vai ser util para mim, tambem. Provavelmente deve ser possivel otimizar o codigo, para nao utilizar essas tabelas temporarias.

Use um gráfico com a dimensao: Data e a expressao: sum(Hospedes)

Se precisar, posso mandar o qvw (já na versao qlikview 10) do projeto para voce.

Not applicable
Author

Fábio,

O exemplo do Ricardo é melhor do que eu lhe mandei.

Só tem o caso das datas intermediárias que ainda não existirão, caso precise delas precisará gerar o calendário como no exemplo que lhe enviei.

Not applicable
Author

Bem observado, Fabio Simoes

Para as datas nao existentes (Data de Entrada ou Data de Saidas) nao apareceriam no grafico.

Será realmente necessário nesse caso utilizar um calendario, que contem todas as datas.

Caique_Zaniolo
Employee
Employee

e ai Fábio?

não vi o seu exemplo, mas parece um caso clássico de Intervalmatch com uma tabela calendar master entre a menor e a maior data possível.

Abraços

Not applicable
Author

Senhores..

Com isto que o Tonial me passou funcionou redondinho..

Obrigado pela ajuda...

DadosHist:
LOAD * INLINE [
Hospede, Entrada, Saída
Hospede 1, 20/11/2010, 25/11/2010
Hospede 2, 23/11/2010, 30/11/2010
];


Calendario:
LOAD
Date(MonthStart(Today())+(RowNo()-1)) AS Data
Autogenerate(30);


//exit script;
DadosHist:
LEFT JOIN (DadosHist)
IntervalMatch (Data) LOAD Entrada, Saída RESIDENT DadosHist;

Dados:
LEFT JOIN (Calendario) LOAD DISTINCT Data, Hospede RESIDENT DadosHist;

DROP TABLE DadosHist;

Not applicable
Author

Olá pessoal,

Estou tentando adaptar esse script para uma situação que tenho. Preciso acompanhar o histórico do saldo de estoque, relatando a evolução, mas na base de dados só temos informação de saldo quando existe movimentação. Entretanto o saldo se mantém mesmo sem movimentação. Tentei fazer isso usando o intervalmatch e um calendário e a vaca foi pro brejo pois o volume de registro ultrapassou os 800 milhões de registros. Estou encaminhano abaixo meu script pois já não sei mais o q fazer e nem pra qual santo rezar!!!

Abraços e obrigado

SALDO_TEMP:

LOAD ID_EMPRESA,

     ID_ALMOXARIFADO,

     ID_PRODUTO,

     DT_HISTORICO_SALDO AS DT_INICIAL,

     QT_HISTORICO_SALDO,

     VL_MEDIO

FROM [..\QVD\HIST_SALDO.QVD] (qvd)

WHERE DT_HISTORICO_SALDO >= date('01/01/2012');

//FAÇO ISSO PARA IDENTIFICAR ATÉ QUANDO O ESTOQUE SE MANTEVE INALTERADO

SALDO:

LOAD *, IF( ID_EMPRESA = Previous(ID_EMPRESA) AND ID_ALMOXARIFADO = Previous(ID_ALMOXARIFADO) and ID_PRODUTO = Previous(ID_PRODUTO), date(Previous(DT_INICIAL)-1), Today() ) AS DT_FINAL

RESIDENT SALDO_TEMP

ORDER BY

     ID_EMPRESA DESC,

     ID_ALMOXARIFADO DESC,

     ID_PRODUTO DESC,

     DT_INICIAL DESC;

DROP TABLE SALDO_TEMP;

//MONTO UM CALENDÁRIO COM TODAS AS DATAS ATÉ A DATA ATUAL

MinMaxTab:

LOAD Min([DT_INICIAL]) as MinTaskStart

RESIDENT SALDO GROUP BY 1;

Let varMinDate = peek('MinTaskStart');

Let varMaxDate = TODAY();

drop table MinMaxTab;

LET VMinOrderDate = date($(varMinDate));

Calendario:

Load  date('$(VMinOrderDate)' + Recno() - 1) as Data

AutoGenerate (varMaxDate - varMinDate + 1);

//AQUI ENTRA O INTERVALMATCH PARA PREENCHER TODAS AS DATA DO INTERVALO

//exit script;

SALDO:

LEFT JOIN (SALDO)

IntervalMatch (Data)

LOAD DT_INICIAL, DT_FINAL

RESIDENT SALDO;