Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
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)))