Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Comparar se campo está entre selecionáveis (com dados)

Olá pessoal;

Estou tentando ajustar uma situação de referencia circular e para isso tive uma idéia, visto que todas até então falharam.

Preciso comparar se um Campo faz parte de uma determinada seleção (campo lista) , mesmo que ele não esteja selecionado.

Exemplo:

campo ITENS carregado com "A, B, C, D e E". Tenho então uma lista com esses valores, porem devido a outra seleção apenas "A, B e C" estão possíveis.

quero montar uma expressão para SOMAR SE o item "C" estiver entre os possíveis de seleção.

que função do qlik utilizar para descobrir se determinado campo está entre os selecionáveis (com dados) ?

tentei usar GetFieldSelections porem ele só funciona se estiver selecionado, e preciso testar se está entre os selecionáveis (disponíveis).

obrigado pela ajuda !

1 Solution

Accepted Solutions
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, acredito que a melhor forma para esse caso seja utilizar a concatenação de dados.

Veja esse exemplo simples.

Vendas:
Load itens, qtde as QtdeVenda, valor AS ValorVenda, vendedor, período (DIA/MES/ANO) from Vendas;
Concatenate (Vendas)

Load itens, qtde as QtdePedido, valor AS ValorPedido, vendedor, período (DIA/MES/ANO) from Pedidos;

Ao final, você terá uma tabela com as informações de vendas e de pedidos.

Espero que isso lhe ajude.

Abraços.

Tonial.

Don't Worry, be Qlik.

View solution in original post

6 Replies
fernando_tonial
Partner - Specialist
Partner - Specialist

Bom dia Cleber.

Você pode tentar essa expressão;

Sum(If(Aggr(SubStringCount(Concat(CampoSelecionado, '|'), 'C'),CampoSelecionado)>0,CampoSoma))

Abraços.

Tonial.

Don't Worry, be Qlik.
Not applicable
Author

Olá Tonial !

É isso mesmo que eu precisava, consegui testar em um campo texto utilizando a expressão mais simples =SubStringCount(Concat(FAM_COMERCIAL, '|'), '0003'), obtendo o resultado = 1.

Porém estou com dificuldades em aplicar isso na tabela onde preciso somar um campo caso a condição seja satisfeita, veja se consegue entender o por que não está funcionando.


A coluna Carteira Mês tem um SUM(vl-merc-abe), ou seja, soma todos os valores dos pedidos.

Então preciso somar na coluna TESTE somente os itens dos pedidos que a FAM_COMERCIAL esteja passível na seleção. (Campo Lista "Família" no topo da tela). Coloquei assim:

=sum(IF(aggr(SubStringCount(Concat(FAM_COMERCIAL, '|'), FAMILIA_PEDIDO),FAM_COMERCIAL) >0,[vl-merc-abe])).


Na tabela da direita estou exibindo como apoio alguns campos da minha tabela de pedidos, onde esta o [vl-merc-abe]. Nela tenho uma coluna chamada FAMILIA_PEDIDO, que é o campo que estou verificando estar "selecionável" na expressão acima.

Nesse exemplo ele teria que somar todos os registros de vl-merc-abe pois pertencem a família "0003' que esta disponível na lista do topo da visão.



nicolett_yuri

Cleber, não seria melhor tentar resolver seu problema de referência circular na modelagem dos dados?

Se precisar de algum apoio disponibilize a aplicação para tentarmos te ajudar.

Not applicable
Author

Olá Yuri !

Com certeza, se for possível fazer isso, é que não sou experiente no produto e tive essa ideia para contornar o problema.

Ocorre que o Qlik trabalha com a ligação dos dados de modo associativo, e não sei como lidar com isso na modelagem para o que preciso, veja o cenário:

O desenvolvimento começou com a visão das vendas realizadas, então tenho uma tabela que possui os campos itens, qtde, valor, vendedor, período (DIA/MES/ANO) linha a linha das NF´s.

Por sua vez, amarrado as itens, tenho algumas divisões chamadas Famílias, bem como outros campos que servem para identificar o tipo daquele item. (segmento, grupo, etc)

Tenho então uma visão onde consigo ver as vendas (relativos as NF´s), e agora estou querendo adicionar uma coluna na tabela com os valores de Pedidos de Venda (ainda não realizados), que são valores que ainda serão faturados.

Nessa tabela de pedidos também tenho item, qtde, valor, vendedor, período (DIA/MES/ANO) etc.

O problema circular ocorre quando tento relacionar o item do Pedido as famílias e grupos, pois esses já estão ligados as Vendas, e consequentemente aos itens vendidos. Pode ser que um item que esta em Pedidos ainda não foi vendido ou vice-versa.

Então resolvi trazer para a tabela de Pedidos o campo Família com outro nome via Inner Join, e então comparar se essa Família do Item de Pedidos está dentro da Família da lista de Seleções, para que some o valor da venda ou não, de acordo com as seleções.

Queria que isso funcionasse com o menor impacto possível na modelagem que já foi desenvolvida, visto que foi realizado por uma consultoria, e eu estou apenas adaptando algumas melhorias, não tendo muita habilidade com o produto.

Espero que tenha conseguido passar meu problema e consigam me ajudar.

obrigado.

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, acredito que a melhor forma para esse caso seja utilizar a concatenação de dados.

Veja esse exemplo simples.

Vendas:
Load itens, qtde as QtdeVenda, valor AS ValorVenda, vendedor, período (DIA/MES/ANO) from Vendas;
Concatenate (Vendas)

Load itens, qtde as QtdePedido, valor AS ValorPedido, vendedor, período (DIA/MES/ANO) from Pedidos;

Ao final, você terá uma tabela com as informações de vendas e de pedidos.

Espero que isso lhe ajude.

Abraços.

Tonial.

Don't Worry, be Qlik.
rphpacheco
Creator III
Creator III

Boa tarde Cleber.

Acredito que seja melhor você resolver este problema na modelagem dos dados, assim como o Colega Yuri mencionou.

Você está querendo cruzar as informações de movimentação de venda com pedidos ainda não faturados.

Para isso, indico que você crie um modelo de dados em forma de estrela, onde você terá uma tabela central que irá conter as dimensões temporais, chaves das demais tabelas e campos comuns entre todas elas.

Para cada tabela (Vendas, pedidos, etc) sugiro que cries chaves utilizando o conceito que o Tonial citou. Concatene os campos primários das tabelas (Não esqueça dos campos temporais), formando um registro único. Podes utilizar a função AutoNumber() para realizar esta concatenação.

Se puderes postar um exemplo desta aplicação seria mais fácil ajudarmos.

Abraço!