Skip to main content
Announcements
YOUR OPINION MATTERS! Please take the Qlik Experience survey you received via email. Survey ends June 14.
cancel
Showing results for 
Search instead for 
Did you mean: 
Ribeiro
Specialist
Specialist

Caso fique zerado ou negativo filial, trazer estoque de outra filial

Tenho set Analysis abaixo:

Bom o que preciso é simples, mas só estou conseguindo trazer apenas os negativos "Menor que zero" Conforme imagem abaixo:

Se Estoque da Filial 1 com a Data_Alteracao de hoje for(=)  Zero ou(<) Menor que Zero.

Que ele traga na mesma linha do produto qual o estoque da Filial 3 (Coluna 2)

Que ele traga na mesma linha do produto qual o estoque da Filial 5 (Coluna 3)

Repito: Só estou conseguindo trazer menor que zero. Algo está errado no meu set Analysis.

if(Sum({$<AnoE ={$(=Year(today()))},MesE={$(=Month(today()))},DiaE={$(=Day(today()))},[CodigoFilialE]={'1'},[Estoque_Sim1]={'0'} >}Qtde_Estoque_Atual),
Sum({$<[CodigoFilialE]={'3'} ,[Estoque_Sim1]-={'0'} >}Qtde_Estoque_Atual))

 

 

LOAD  Script:
Qtde_Estoque_Atual,
if(num([Qtde_Estoque_Atual]) <=0,0,1) as Estoque_Sim1,
if(num([Qtde_Estoque_Atual]) =0,0,1) as Estoque_Sim2,
NomeProdutoE,
CodigoProduto,
Data_Alteracao,
CodigoFilialE,
DiaE,
TrimestreE,
AnoE,
MesE


FROM
[C:\manaus\Estoque.qvd]
(qvd);

 

2019-03-15_15-09-51.png

Neves
1 Solution

Accepted Solutions
Thiago_Justen_

Nobre amigo @Ribeiro ,

Quanto tempo hein rapaz! Smiley Tongue

Bem, como seu qvw estava com o campo Data_Alteracao no format timestamp, eu resolvi o problema com a seguinte expressão para a filial 1:

SUM({<[CodigoFilialE]={1},Estoque_Sim={0},Data_Alteracao={">=$(=InDay(DayStart(Today())))<=InDay(DayEnd(Today()))"}>}Qtde_Estoque_Atual)

O que digo com essa expressão? Que todo produto da filial 1 cujo estoque atual (marcado pelo today() ) com estoque igual ou menor que zero deve ter seu estoque somado.

E o resultado disso?Capturar.PNG

Segue a construção da tabela:

Dimensões: CodigoProdutoNomeProdutoE

Expressões: 

                       Filial 1: SUM({<[CodigoFilialE]={1},Estoque_Sim={0},Data_Alteracao={">=$(=InDay(DayStart(Today())))<=InDay(DayEnd(Today()))"}>}Qtde_Estoque_Atual)

    

                     Filial 3: SUM({<[CodigoFilialE]={3},Data_Alteracao={">=$(=InDay(DayStart(Today())))<=InDay(DayEnd(Today()))"}>}Qtde_Estoque_Atual)

 

                     Filial 5: SUM({<[CodigoFilialE]={5},Data_Alteracao={">=$(=InDay(DayStart(Today())))<=InDay(DayEnd(Today()))"}>}Qtde_Estoque_Atual)

 

Caso ainda falte algo, deixe-me saber.

 

Abs e Sucesso!!

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago

View solution in original post

15 Replies
RafaMartins
Creator II
Creator II

Boa tarde,

Pode ser por você não ter uma condição para o if apos o primeiro set

o esta determinando que o dependendo do valor do primeiro set te retorne o valor do segundo, porem nessa expressão não vejo nem um condicionamento no if no seu caso seri if(SET 1)=<0,(SET 2)

acredito que seja isto. 

LucasIsidoro
Contributor III
Contributor III

@Ribeiro , Boa tarde!

 

Seu If(Condição, Then, Else) Está sem condição no primeiro quadrante, ou seja, não está comparando nada e o mesmo deveria.

Capturar2.PNG

Ribeiro
Specialist
Specialist
Author

Qual seria a solução correta para este set Analysis

Neves
Ribeiro
Specialist
Specialist
Author

2019-03-16_08-57-51.png

Se Cod com a data de hoje

 for =< 0

Traga o saldo Estoque Cod  da Filial 3 e 5

Veja que o Cod 1 a codiçao dele é com estoque: Então ele não vai trazer nada.

Apenas o Código 21 e 3

 

 

2019-03-16_09-02-11.png

Neves
RafaMartins
Creator II
Creator II

Bom dia,

if(Sum({$<AnoE ={$(=Year(today()))},MesE={$(=Month(today()))},DiaE={$(=Day(today()))},[CodigoFilialE]={'1'},[Estoque_Sim1]={'0'} >}Qtde_Estoque_Atual)<= 0,
(Sum({$<[CodigoFilialE]-={'1'} ,[Estoque_Sim1]-={'0'} >}Qtde_Estoque_Atual)))

Acredito que assim vai funcionar trazendo a soma dos estoque que não sejam da filial 1

Ribeiro
Specialist
Specialist
Author

Não Funcionou?

Tirei as data fixas e ficou correto:

Smiley SadAlgo está errado aqui: Sum({$<AnoE ={$(=Year(today()))},MesE={$(=Month(today()))},DiaE={$(=Day(today()))},

Mas preciso fazer fixo as datas:

Set Analysis

Filial1: SUM({$<[CodigoFilialE]={'1'},[Estoque_Sim]={'0'} >}Qtde_Estoque_Atual)

Filial3: if(Sum({$<[CodigoFilialE]={'1'},[Estoque_Sim]={'0'} >}Qtde_Estoque_Atual)<=0,
(Sum({$<[CodigoFilialE]={'3'},[Estoque_Sim]-={'0'} >}Qtde_Estoque_Atual)))

Filial5: if(Sum({$<[CodigoFilialE]={'1'},[Estoque_Sim]={'0'} >}Qtde_Estoque_Atual)<=0,
(Sum({$<[CodigoFilialE]={'5'},[Estoque_Sim]-={'0'} >}Qtde_Estoque_Atual)))

 

Veja a figura do software Funcionou Esta correto:

2019-03-18_09-51-28.png

Veja como Fiz para funcionar. Mas preciso delas fixas!!

2019-03-18_09-53-27.png

Neves
RafaMartins
Creator II
Creator II

se você tem um calendário atrelado no seu modelo de dados é só fazer um set com today

{$<DATA={$(=(Date(Today()))}>}

Ribeiro
Specialist
Specialist
Author

Cara nunca vir algo assim,

Nao consigo fazer a data fixa.

Ja testei tudo...

 

 

LET vHoje = Date(Today(), 'YYYY-MM-DD');
LET vDateMin=num(makedate(2018,01,01));
LET vDateMax=floor(monthend(today()));
LET vDateMin2=num(makedate(2007,01,01));
LET vDateMax2=floor(monthend(today()));

LET vVencimento = Date(Today()-30,'DD/MM/YYY');

Calenderio:
LOAD
Distinct
Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY') AS CalendarDate,
ceil(Month(Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY'))/3) & 'Trim' as Trimestre,
month(Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY')) AS Mes,
WeekDay(Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY')) AS Semana,
Day(Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY')) AS Dia,
year(Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY')) AS Ano,
monthname(Date($(vDateMin) + RowNo() - 1,'DD-MMM-YYYY')) AS MesAno

AutoGenerate 1 While $(vDateMin) + IterNo() - 1 <=$(vDateMax);

LOAD
Qtde_Estoque_Atual,
CodigoProduto,
if([Qtde_Estoque_Atual] <= 0,0,1) as Estoque_Sim,
NomeProdutoE,
Date(Floor(Data_Alteracao),'DD/MM/YYYY') as CalendarDate,
Data_Alteracao,
CodigoFilialE

FROM
[C:\Users\Gateway\Desktop\Estoque.qvd]
(qvd);

2019-03-16_10-51-03.png

Neves
RafaMartins
Creator II
Creator II

seria para substituir essa parte do set que vc usa 3 campos de data, como você só precisa dos valores do dia atual 

if(Sum({$<CalendarDate={">=$(=Date(Today()))<"},[CodigoFilialE]={'1'},[Estoque_Sim1]={'0'} >}Qtde_Estoque_Atual)<= 0,
(Sum({$<[CodigoFilialE]-={'1'} ,[Estoque_Sim1]-={'0'} >}Qtde_Estoque_Atual)))