Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
cancel
Showing results for 
Search instead for 
Did you mean: 
jordansoares
Contributor III
Contributor III

DIAS SEM ESTOQUE

Pessoal!

Estou precisando identificar quantos dias o meu produto não tinha em estoque(estoque zero), com base no estoque de hoje desse mesmo produto e a movimentação de entradas e saidas nos últimos 90 dias.

Ex.:Produto A > Data = 01-08-19 > Estoque = 10

Data: 31-07-19 > Estoque Inicial = 12 > Vendas = 2 > Estoque Final = 10

Data: 30-07-19 > Estoque Inicial= 15 > Vendeu = 3 > Estoque Final = 12

Data: 27-07-19 > Estoque Inicial = 0 > Comprou = 15 > Estoque Final = 15

Data 20-07-19 > Estoque Inicial = 2 > Vendeu = 2 > Estoque Final = 0

Assim por diante, durante 90 dias.

O que eu preciso identificar é que no dia 20-07 o estoque do produto ficou = 0 e só foi comprado no dia 27, ou seja 7 dias com estoque '0' , isso durante os 90 dias, em quantos dias esse produto era igual a '0'.

Não estou conseguindo trazer essa informação.

 

1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

A segunda parte os calculos.

Primeiro junto as tabelas e depois ORDENO por Produto,Data.  Assim podemos controlar para calcular os dias sem estoque

 

//===================================================
// Junta as tabelas
CalculoEstoque_Tmp:
NoConcatenate
Load
   date(MakeDate(2000,1,1)) as Data,
   Produto, 
   Qtde
Resident EstoqueInicial;
Concatenate (CalculoEstoque_Tmp)
Load
   Data,
   Produto,
   // Coloco o - para diminuir as vendas
   Qtde
Resident Vendas;
Concatenate (CalculoEstoque_Tmp)
Load
   Data,
   Produto, 
   Qtde
Resident Compras;
//
Drop Tables Vendas,Compras,EstoqueInicial;
//
// Coloca em ordem para poder calcular o estoque
TabelaFinal:
NoConcatenate
Load
   Produto,
   Data,
   Qtde,
   if(Produto = Previous(Produto),rangesum(peek(Saldo),Qtde),Qtde) as Saldo,
   if(Produto = Previous(Produto),
      // Se saldo anterior é Zero e tem Qtde positiva (Compra)
      if(peek(Saldo)=0 and Qtde > 0,Data - peek(Data)) )                                  as Dias_Sem_Saldo
Resident CalculoEstoque_Tmp order by Produto,Data ;
//
drop Table CalculoEstoque_Tmp;

 

furtado@farolbi.com.br

View solution in original post

6 Replies
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Segue 

2019-08-01 23_49_23-Qlik Sense Desktop.png

 

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Segue o script

 

Fiz em duas partes. 

A primeira são as "tabelas origens"

//===================================================
//
Vendas:
LOAD * Inline [
Data , Produto , Qtde
31/07/2019 , A , -2
30/07/2019 , A , -3
20/07/2019 , A , -2
];

Compras:
NoConcatenate
LOAD * Inline [
Data , Produto , Qtde
27/07/2019 , A , 2
];

EstoqueInicial:
LOAD * Inline [
Produto , Qtde
A , 2
];
//===================================================

 

 

 

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

A segunda parte os calculos.

Primeiro junto as tabelas e depois ORDENO por Produto,Data.  Assim podemos controlar para calcular os dias sem estoque

 

//===================================================
// Junta as tabelas
CalculoEstoque_Tmp:
NoConcatenate
Load
   date(MakeDate(2000,1,1)) as Data,
   Produto, 
   Qtde
Resident EstoqueInicial;
Concatenate (CalculoEstoque_Tmp)
Load
   Data,
   Produto,
   // Coloco o - para diminuir as vendas
   Qtde
Resident Vendas;
Concatenate (CalculoEstoque_Tmp)
Load
   Data,
   Produto, 
   Qtde
Resident Compras;
//
Drop Tables Vendas,Compras,EstoqueInicial;
//
// Coloca em ordem para poder calcular o estoque
TabelaFinal:
NoConcatenate
Load
   Produto,
   Data,
   Qtde,
   if(Produto = Previous(Produto),rangesum(peek(Saldo),Qtde),Qtde) as Saldo,
   if(Produto = Previous(Produto),
      // Se saldo anterior é Zero e tem Qtde positiva (Compra)
      if(peek(Saldo)=0 and Qtde > 0,Data - peek(Data)) )                                  as Dias_Sem_Saldo
Resident CalculoEstoque_Tmp order by Produto,Data ;
//
drop Table CalculoEstoque_Tmp;

 

furtado@farolbi.com.br
jordansoares
Contributor III
Contributor III
Author

A ideia seria o calculo ao contrário, pois eu só tenho o estoque na data de hoje e preciso identificar o estoque das datas anteriores com base nas movimentações de compra e venda.

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Mas a logica seria a mesma.  Mudaria o Order e colocaria um DESC para ser descendente. Mas o caminho (um deles pelo menos) seria este.

furtado@farolbi.com.br
jordansoares
Contributor III
Contributor III
Author

Solução perfeita!  ajustando o Order colocando um DESC na Data o resultado era exatamente o que eu estava precisando. Muito obrigado pela ajuda!