Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
Not applicable

Set Analysis - Quantidade baseada em um campo

Ola pessoal.

Tenho uma situação em que, clicando em um botão,  preciso mostrar na tabela a quantidade de estoque baseado somente na data de ultima entrada de cada produto:

Criei um set Analysis com a instrução :

IF(GetFieldSelections(OPCAO)='Qtd.Ult.Entrada', num(round(Sum({$<DT_ULT_ENTRADA>}QT_ESTOQUE))

Isto está correto? Como faria para or exemplo, ter o max(DT_ULT_ENTRADA) para a qtde de estoque?

Tags (1)
1 Solution

Accepted Solutions
rvsilvestre
Contributor III

Re: Set Analysis - Quantidade baseada em um campo

Agora que eu eu vi que você esta usando mais de uma dimensão, se for usar o if seria assim então:

sum(if(DT_ULT_ENTRADA = aggr(NODISTINCT Max(TOTAL <produto, filiais> DT_ULT_ENTRADA ), produto,filiais,DT_ULT_ENTRADA )  ,QT_ESTOQUE))

Se tiver outra dimensão no seu objeto, deve ser incluída na expressão também

12 Replies
mauroponte
Contributor II

Re: Set Analysis - Quantidade baseada em um campo

Rodrigo,

Pelo que estou vendo voce está utilizando botoes, e quando clicar no botao Qtde.Ult.Entrada mostrar somente o que voce deseja.

Se for isso o que voce deve fazer é criar uma variavel, e utilizar o disparador do botao para passar um valor para essa variavel, e na condição da expressão voce comparar o valor da variavel. o getfieldselections voce utiliza quando seleciona um valor em uma lista com um campo.

Com relação o set analisys, do jeito que você colocou nao está comparando a data com nada. Para comparar com a maior data utilize:

{<DT_ULT_ENTRADA={"$(=max(DT_ULT_ENTRADA))"}>}

Espero ter ajudado.

Se voce puder disponibilizar o QVW talvez possa ajudar mais.

Not applicable

Re: Set Analysis - Quantidade baseada em um campo

Oi MAuro.

Sim, sua lógica esta correta. Estou utilizando botões e quando carrego este App, passo como parametro os nomes, assim, criei uma métrica que utiliza que me retorna os valores de acordo com o botão escolhido. Todos os outras opções estão ok, com a exceção do que apontei.

Ex:

IF(GetFieldSelections(OPCAO)='Quantidade',num(round(Sum(QT_ESTOQUE)- sum(QT_PEND_VENDA))),

IF(GetFieldSelections(OPCAO)='Valor', money((QT_ESTOQUE - QT_PEND_VENDA)*VL_CUSTO_ULT_ENT), //,'R$ #.##0,00;-R$ #.##0,00'),

IF(GetFieldSelections(OPCAO)='Pedidos',num(round(SUM(QT_PEDIDO))),

IF(GetFieldSelections(OPCAO)='Dias Estoque',num(round(Sum(QT_ESTOQUE/QT_SAIDA_MEDIA))),

IF(GetFieldSelections(OPCAO)='Estoque Padrao', num(round(Sum(QT_ESTOQUE_PADRAO))),

IF(GetFieldSelections(OPCAO)='Estoque >= 60 dias',if(num(round(Sum(QT_ESTOQUE/QT_SAIDA_MEDIA)))>=60,num(round(Sum(QT_ESTOQUE/QT_SAIDA_MEDIA))),0),

IF(GetFieldSelections(OPCAO)='Saida Media',num(Sum(QT_SAIDA_MEDIA)),

IF(GetFieldSelections(OPCAO)='Dt.Ult.Entrada',Date(DT_ULT_ENTRADA_F),

//------

IF(GetFieldSelections(OPCAO)='Qtd.Ult.Entrada', num(round(Sum({<DT_ULT_ENTRADA={"$(=max(DT_ULT_ENTRADA))"}>}QT_ESTOQUE)))

//-----

Segui sua instrução, porém os valores ficaram todos zerados, e sei isto esta incorreto por que todos os produtos possuem data de ultima entrada. Pode me dizer se montei corretamente a sintaxe?

mauroponte
Contributor II

Re: Set Analysis - Quantidade baseada em um campo

Rodrigo,

Voce tem como Disponibilizar o QVW para eu tentar te ajudar mais?

rvsilvestre
Contributor III

Re: Set Analysis - Quantidade baseada em um campo

Existe uma última data diferente pra cada produto do estoque?

O que acontece quando vc usa o max(data) dentro do set analysis , é esse valor ser calculado sem considerar a dimensão do seu objeto, seria a mesma coisa que você jogar esse max(data) dentro de um objeto de texto, pegar o valor e atribuir para todos os produtos no seu set analysis.

Existe 2 formas que eu conheço de trazer esse valor, uma é um pouco mais complicada usando if e agregação e a outra forma mais simples é usando a função firstsortedvalue(), ficaria assim:

firstsortedvalue(QT_ESTOQUE , -DT_ULT_ENTRADA )

* Detalhe, se existir mais de um valor nesse campo QT_ESTOQUE  para a última data, a função retornará null() , precisa ser um valor único. Teste com essa função, se não der certo, tente com if, acho que ficaria assim:

sum(if(DT_ULT_ENTRADA = aggr(NODISTINCT Max(TOTAL <produto> DT_ULT_ENTRADA ), produto,DT_ULT_ENTRADA )  ,QT_ESTOQUE))

Not applicable

Re: Set Analysis - Quantidade baseada em um campo

Oi Mauro.

Estou utilizando o QlikSense e infelizmente, pela política da empresa, não posso disponibilizar qualquer tipo de arquivo sem um processo longo e burocrático de autorização.

Por isso vou tentar ser um pouco mais claro para ver se consegue me ajudar:

Preciso obter em uma metrica, a quantidade total de produtos em estoque (QT_ESTOQUE) somente recebidos na ultima data de entrada(DT_ULT_ENTRADA).

Se fizer simplesmente o Sum(QT_ESTOQUE), terei o resultado de todo meu volume de estoque, ao invés apenas das ultimas entradas, baseada na data que mencionei.

Imaginei em fazer o set analysis, mas conforme me orientou, criando desta forma:

num(round(Sum({<DT_ULT_ENTRADA={"$(=max(DT_ULT_ENTRADA))"}>}QT_ESTOQUE))), não funcionou. Existe algum outro modo?

Espero que eu tenha explicado melhor.

Obrigado pela ajuda.

Not applicable

Re: Set Analysis - Quantidade baseada em um campo

Sim, pode existir uma data diferente para cada produto. Estou utilizando a dimnsão de produtos, como pode ver na imagem que passei anteriormente.

Vou tentar utilizar as instruções que citou .

rvsilvestre
Contributor III

Re: Set Analysis - Quantidade baseada em um campo

Agora que eu eu vi que você esta usando mais de uma dimensão, se for usar o if seria assim então:

sum(if(DT_ULT_ENTRADA = aggr(NODISTINCT Max(TOTAL <produto, filiais> DT_ULT_ENTRADA ), produto,filiais,DT_ULT_ENTRADA )  ,QT_ESTOQUE))

Se tiver outra dimensão no seu objeto, deve ser incluída na expressão também

thiago_mlg
Contributor II

Re: Set Analysis - Quantidade baseada em um campo

Rodrigo, bom dia!

Acredito que o melhor jeito seja criando uma tabela auxiliar no script pegando sempre a ultima data de estoque por produto e depois aplicando essa tabela no gráfico em questão utilizando a variavel..

Digo isso, por que mesmo que você use uma expressão para pegar a data máxima de cada produto e passar essas datas para a expressão, pode ser que tenha outros produtos que também tenham estoque em alguma dessas datas , e então seu gráfico vai realizar ma soma errada, abaixo um exemplo..

imagine a tabela

produto --      data --           estoque        

AAA        10/12/2015          4

AAA        01/01/2016          2

BBB        01/01/2016          2

BBB        05/01/2016          5

CCC       07/01/2016          3

CCC       08/01/2016          4

agora, criando uma expressão que pegue a data máxima de cada produto, ele passaria os seguintes parâmetros.

sum( DATA = { expressão que gera a data máxima de cada produto.. sendo eles  01/01/2016 - 05/01/2016 -  08/01/2016 }  QUANTIDADE...

pelo fato do seu produto BBB ter estoque tambem no dia 01/01/2016... o gráfico vai somar os valores e vai ficar assim..

PRODUTO - QTDE

AAA     2

BBB 7

CCC 4

......

Então como dito acima o melhor seria criar uma tabela auxiliar, pegando o ultimo saldo de cada produto.. Sendo mais ou menos assim

AUXILIAR_TEMP

LOAD

PRODUTO,

MAX(DATA) AS DATA

Resident TABELAESTOQUE

GROUP BY PRODUTO;

ESSA PRIMEIRA TABELA VAI GERAR TODOS OS PRODUTOS E SUAS RESPECTIVAS DATAS MAXIMAS

DEPOIS É SÓ VC FAZER UM LEFT JOIN COM A QUANTIDADE

LEFT JOIN (AUXILIAR TEMP)

PRODUTO,

SUM(QUANTIDADE) AS QUANTIDADE,

DATA

GROUP BY PRODUTO,DATA;

ELE IRA ADICIONAR NA TABELA AUXILIAR_TEMP APENAS AS QUANTIDADES PARA OS PRODUTOS/DATAS QUE TENHAM NA TABELA AUXILIAR..

TENDO A TABELA MONTADA, VOCÊ PODE NAQUELE QUE QUANDO VC CLICAR NO BOTÃO, A EXPRESSÃO DO GRÁFICO SEJA FEITA PELOS CAMPOS DA TABELA AUXILIAR.

QUALQUER DÚVIDA À DISPOSIÇÃO.

THIAGO GONÇALO

Not applicable

Re: Set Analysis - Quantidade baseada em um campo

Opa Rodrigo.

Deu certo! É justamente este retorno que estava buscando.

Muito obrigado pelas dicas pessoal.