Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Ola,
estou com uma duvida que deve ser bem iniciante, eu gostaria de ter uma coluna que retorna o AnoMes mês máximo para cada cliente, isso eu resolvi Usando um Max(AnoMes), em outra coluna eu gostaria que aparecesse a soma dos valores que pertencem a esse AnoMes máximo, estou usando o calculo da imagem abaixo porem somente o primeiro valor esta retornando a soma do AnoMes para o valor máximo, como faço para que todos os cliente/produto tenha os valores preenchidos corretamente?
Obrigado
no set analysis pelo que eu sei você não vai conseguir dessa maneira, o porque disso é o seguinte: a expressão dentro do set analysis ela não considera as dimensões do gráfico ou tabela, ela é calculada fora do objeto e apenas replicado o valor, é a mesma coisa que vc jogar essa expressão max(AnoMes) em um objeto de texto e apenas copiar o valor desse objeto para todas as linhas de sua tabela.
o FirstSortedValue( Valor ,- AnoMes) , como eu havia mencionado antes atende sua necessidade, funcionou no seu exemplo pelo menos... Outra solução seria vc colocar essa condição em um if() dentro do sum(), seria algo tipo:
sum(if(AnoMes = aggr(max(AnoMes),Cliente,Produto) , valor) )
Pessoal postei por engano o arquivo errado, gerei outro aqui.
Flavio,
Veja se a expressão abaixo tem o resultado que voce deseje:
aggr(sum({<AnoMes={"$(=Max(AnoMes))"}>} total Valor),Cliente,Produto)
Anexo vai o QVW alterado.
Espero ter ajudado.
FirstSortedValue( Valor ,- AnoMes)
Obrigado pela resposta Mauro, tem um probleminha nessa expressão, o que eu precisa era que acontecesse a seguinte situação:
Cliente = 1 e Produto = 1 teve a ultima venda em 201607 e o total de vendas é 50, até aqui o resultado esta correto.
Cliente = 1 e Produto = 2 teve a ultima venda em 201501 e o total de vendas é 30.
Cliente = 3 e Produto = 1 teve a ultima venda em 201601 e o total de vendas é 60.
Ou seja eu precisava que fosse retornado em cada linha a soma do maior ano e mes de venda para cada cliente/produto.
Andei fazendo alguns testes aqui e consegui chegar no resultado que eu preciso mas fazendo manualmente:
A expressão acima esta na coluna valor, como eu coloquei um array com os maiores AnoMes o QlikView conseguiu fazer o calculo corretamente então pelo que eu entendi eu preciso de algo que retorne um vetor de AnoMes Maximos ali dentro das chaves. Não conheço muito do QlikView mas pelo que eu entendi se eu fizer
Aggr(Max(AnoMes), Cliente, Produto) isso me retornaria um agrupamento de Cliente/Produto com os maximos AnoMes de cada um, com base nisso tentei a expressão Sum({<AnoMes = {$(=Aggr(Max(AnoMes), Cliente, Produto))}>} Valor). Assim o AnoMes estaria apontando pra esse array com os máximos AnoMes de cada cliente e produto porem isso não funcionou.
Outro teste que fiz foi usando a propria coluna que tem o Valor máximo, se já existe uma coluna com essa informação acho que seria uma boa usa-la novamente assim evita mais cálculos, tentei de varias formas fazer isso, uma dessas tentativas é como na imagem abaixo onde eu referencio o AnoMes a coluna Max que já tem a informação que eu preciso por isso não funciona, como eu posso reutilizar uma coluna no set analysis?
Eu ainda estou tendo dificuldade pra entender o que esta acontecendo internamente no qlikview, não consigo ver onde esta o problema, alguém saberia me dizer?
Flavio,
Fiz um teste com a solução que o Rodrigo passou e acho que atende a sua necessidade.
Veja o QVW ajustado que estou anexando.
no set analysis pelo que eu sei você não vai conseguir dessa maneira, o porque disso é o seguinte: a expressão dentro do set analysis ela não considera as dimensões do gráfico ou tabela, ela é calculada fora do objeto e apenas replicado o valor, é a mesma coisa que vc jogar essa expressão max(AnoMes) em um objeto de texto e apenas copiar o valor desse objeto para todas as linhas de sua tabela.
o FirstSortedValue( Valor ,- AnoMes) , como eu havia mencionado antes atende sua necessidade, funcionou no seu exemplo pelo menos... Outra solução seria vc colocar essa condição em um if() dentro do sum(), seria algo tipo:
sum(if(AnoMes = aggr(max(AnoMes),Cliente,Produto) , valor) )
Rodrigo,
Essas expressões que você fez realmente atendem esse exemplo que eu tinha passado mas acho que eu fiz um exemplo que não reflete a realidade da situação aqui do trabalho, fiz a alteração e a imagem abaixo representa melhor o que estou passando, vão ocorrer varias vendas por mês então eu precisava retornar a soma das vendas desses AnoMes máximos, usei a formula abaixo e o resultado não fica correto, coloquei mais uma venda em 201607 então o resultado desde período deveria ser 90, por algum motivo esse 90 esta aparecendo no total das colunas.
Em 201501 o total deveria ser 40 porem ele retorna 30.
Tentei arrumar de diversas formas aqui mas não consegui entender qual a logica que o qlikview usa pra fazer esse calculo, eu não consigo ver problema na formula da imagem abaixo.
Essa formula atende pro exemplo que eu tinha passado mas eu fiz um exemplo errado, em um mês poderiam ocorrer varias vendas e eu precisaria retornar a soma das vendas com o maior anomes de cada produto e cliente.