Skip to main content
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!