Qlik Community

Ask a Question

Brasil

Announcements
Join us at the Cloud Data and Analytics Tour! REGISTER TODAY
cancel
Showing results for 
Search instead for 
Did you mean: 
LucasIsidoro
Contributor III
Contributor III

Relacionamento entre tabelas - mínimo / máximo

Boa tarde pessoal, tudo bem com vocês? Espero que sim !!

Estou com uma dúvida referente um relacionamento entre duas tabelas, onde em uma delas eu tenho uma linha de pedido, onde tenho o valor exato do diâmetro, largura, quantidade. Na outra eu tenho uma listagem de padrão de embalagem, onde eu tenho qual embalagem usa em um determinado intervalo de diâmetro e largura, exemplo:

Tabela do pedido (Carteira):

PedidoMaterialDiâmetroLarguraQtd
1Material 170056010
2Material 270056015
3Material 370056020
4Material 470056020
5Material 570056510
6Material 67005801
7Material 770059010
8Material 87005905
9Material 970060010
10Material 107006005

 

Tabela dos formatos de embalagem (InfotecEmb):

Diâmetro MínimoDiâmetro MáximoLargura MínimaLargura MáximaPalete
611710331370D9
611710371420D10
611710421490D11
611710491570D13
611710571690D8
611710691790D9
471533701790B9
471533791890B10
471533891990D11

 

Ou seja, quero trazer uma coluna Pallet na tabela de pedido, considerando que a especificação do pedido está entre o mínimo e máximo conforme a tabela de embalagem.

 

Eu tentei fazer um concatenar entre as tabelas e o if com as regras porém sem sucesso:

If ([Carteira (Diâmetro)]> = [Infotec Emb (Diâmetro Mínimo)]
and [Carteira (Diâmetro)] <= [Infotec Emb (Diâmetro Máximo)]
and [Carteira (Largura)]> = [Infotec Emb (Largura Mínima) ))]
and [Carteira (Largura)] <= [Infotec Emb (Largura Máxima)], [Infotec Emb (Pallet)]) as[Embalagem correta]

 

Alguém tem experiência com dados nesse formato mínimo e máximo e poderia me auxiliar nesse caso? Agradeço desde já!

1 Solution

Accepted Solutions
fernando_tonial
Partner
Partner

Olá, com base nesse seu exemplo, acredito que o IntervalMatch consiga solucionar o problema.

Esse deve ser o resultado que você espera.

fernando_tonial_0-1610656092235.png

Exemplo do Script utilizado.

TMP_Pedido:
Load * Inline [
  Pedido,Material,Diâmetro,Largura,Qtd
  1,Material 1,700,560,10
  2,Material 2,700,560,15
  3,Material 3,700,560,20
  4,Material 4,700,560,20
  5,Material 5,700,565,10
  6,Material 6,700,580,1
  7,Material 7,700,590,10
  8,Material 8,700,590,5
  9,Material 9,700,600,10
  10,Material 10,700,600,5
];

TMP_Embalagem:
Load * Inline [
  Diâmetro Mínimo,Diâmetro Máximo,Largura Mínima,Largura Máxima,Palete
  611,710,331,370,D9
  611,710,371,420,D10
  611,710,421,490,D11
  611,710,491,570,D13
  611,710,571,690,D8
  611,710,691,790,D9
  471,533,701,790,B9
  471,533,791,890,B10
  471,533,891,990,D11
];

Join (TMP_Pedido) 
IntervalMatch (Diâmetro) Load [Diâmetro Mínimo], [Diâmetro Máximo] Resident TMP_Embalagem;

Join (TMP_Pedido) 
IntervalMatch (Largura) Load [Largura Mínima], [Largura Máxima] Resident TMP_Embalagem;

NoConcatenate
Pedido:
Load Distinct * Resident TMP_Pedido;

Left Join (Pedido)
Load * Resident TMP_Embalagem;

Drop Tables TMP_Embalagem,TMP_Pedido;

 

Não esquece de marcar se foi atendido com essa sugestão. Assim auxilia demais pessoas da comunidade.

Don't worry, be Qlik.
Tonial.

 

View solution in original post

3 Replies
fernando_tonial
Partner
Partner

Olá, com base nesse seu exemplo, acredito que o IntervalMatch consiga solucionar o problema.

Esse deve ser o resultado que você espera.

fernando_tonial_0-1610656092235.png

Exemplo do Script utilizado.

TMP_Pedido:
Load * Inline [
  Pedido,Material,Diâmetro,Largura,Qtd
  1,Material 1,700,560,10
  2,Material 2,700,560,15
  3,Material 3,700,560,20
  4,Material 4,700,560,20
  5,Material 5,700,565,10
  6,Material 6,700,580,1
  7,Material 7,700,590,10
  8,Material 8,700,590,5
  9,Material 9,700,600,10
  10,Material 10,700,600,5
];

TMP_Embalagem:
Load * Inline [
  Diâmetro Mínimo,Diâmetro Máximo,Largura Mínima,Largura Máxima,Palete
  611,710,331,370,D9
  611,710,371,420,D10
  611,710,421,490,D11
  611,710,491,570,D13
  611,710,571,690,D8
  611,710,691,790,D9
  471,533,701,790,B9
  471,533,791,890,B10
  471,533,891,990,D11
];

Join (TMP_Pedido) 
IntervalMatch (Diâmetro) Load [Diâmetro Mínimo], [Diâmetro Máximo] Resident TMP_Embalagem;

Join (TMP_Pedido) 
IntervalMatch (Largura) Load [Largura Mínima], [Largura Máxima] Resident TMP_Embalagem;

NoConcatenate
Pedido:
Load Distinct * Resident TMP_Pedido;

Left Join (Pedido)
Load * Resident TMP_Embalagem;

Drop Tables TMP_Embalagem,TMP_Pedido;

 

Não esquece de marcar se foi atendido com essa sugestão. Assim auxilia demais pessoas da comunidade.

Don't worry, be Qlik.
Tonial.

 

View solution in original post

LucasIsidoro
Contributor III
Contributor III
Author

Me ajudou muito Fernando!!! Muito obrigado pela ajuda.

 

Ainda em tempo, o que acontece se eu tiver mais de um valor de embalagem que entre no mesmo intervalo?

Exemplo (supondo um pedido com Qtd 11 do formato específico):

Pedido:

PedidoMaterialDiâmetroLarguraQtd
1Material 170036011

 

Embalagem:

Captura de tela 2021-01-15 090332.png

Por exemplo, nesse caso o pallet D9 pode caber 4 Und do pedido, 2 Und do pedido ou se for 1 Und usa o D8.

Sempre considerando o formato que cabe mais até não mais possível usar ele.

Ou seja, nesse caso usaria 2 vezes o formato D9 - 4 unidades = total 8

                                                      1 vez o formato D9 - 2 unidades = total 2

                                                      1 vez o formato D8 - 1 unidade = total 1

Tendo uma situação um pouco mais complexa assim, a solução de interval ajudaria?

fernando_tonial
Partner
Partner

Nesse cenários acredito que seria mais complicado com o InterlMatch, pois esse registro a quantidade total é 11 e a quantidade de material que cabe todas são menores que isso.