Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
rafael_limeira
Contributor III
Contributor III

Dúvida - Join

Pessoal, boa tarde!

Estou com uma dúvida, onde peço ajuda de vocês para se possível me ajudar. Bom, estou fazendo um Join entre algumas tabela para classificar os dados, visando facilidade de trabalhar no Set Analysis. A primeira deu certo, contudo, gostaria de fazer uma outra condição e é aí que estou travando. Abaixo disponibilizo o script:

// ----- CLASSIFICAÇÃO SITUAÇÃO PDV ----- //

Table1:

LOAD  clienteID,

           statusPDV

FROM

;

Join

Table2:

// SISTEMA 1

LOAD clienteID,

          numeroTerminal


FROM

Where

  (Situação = 'Ativo' or

  Situação = 'Credenciado' );

Join

Table3:

// SISTEMA 2

LOAD clienteID,

          numeroTerminal

         

FROM

Where

  (Situacao = 'Em Instalacao' or

  Situacao = 'Em Operacao' or

  Situacao = 'Inoperante' );

Join

Table4:

//VENDA LOCAL 1

LOAD clienteID,   

          valorBruto,

          tipoProduto

FROM

Where

  (Negócio <> 'Produto Fisico');

Join

Table5:

//VENDA LOCAL 2

LOAD clienteID,   

          valorBruto,

          tipoProduto

FROM

;

Join

Table6:

//VENDA LOCAL 3

LOAD clienteID,

          valorBruto,

          tipoProduto

FROM

;

[VERIFICAÇÃO SITUAÇÃO PDV]: ------------ FUNCIONOU

LOAD clienteID,

          if(statusPDV = 'INATIVO' and isnull(valorBruto) and isnull(numeroTerminal),null(),'Sim') as verificacaoSituacaoPDV

Resident Table1;

[VERIFICAÇÃO TIPO CLIENTE]: ------------ NÃO FUNCIONOU

LOAD clienteID,

          if(statusPDV = 'INATIVO' and isnull(valorBruto) and isnull(numeroTerminal),null(),if(isnull(valorBruto) and isnull(numeroTerminal),'Físico','Eletrônico')) as verificacaoTipoCliente

    

Resident Table1;

DROP Table Table1;

O problema é que ele acaba sinalizando tanto cliente Físico quanto Eletrônico, porém notem que pela regra acima não deveria ocorrer isso no cliente abaixo:

Sem título_1.png

Sem título_2.png

Saberiam me dizer onde estou errando?

11 Replies
nicolett_yuri

Seu IF esta estranho...

Descreva qual seria a regra para o campo verificacaoTipoCliente

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Rafael, boa noite.

Sem um qvd para analisar, fica difícil (pelo menos para mim).

Tem um join com o numeroterminal e depois as vendas.  Neste caso, me parece que vai ocorrer um "produto cartesiano" entre todos os terminais (numeroterminal)  e os produtos vendidos.

LOAD clienteID,

          numeroTerminal

FROM

Join

 

LOAD clienteID,  

          valorBruto,

          tipoProduto

Acho que teria que rever estes joins. Talvez esteja influenciando no seu if.....

furtado@farolbi.com.br
rafael_limeira
Contributor III
Contributor III
Author

Yuri, bom dia!

A regra no campo "vericacaoTipoCliente" é a seguinte:

     - Se o Cliente não vendeu (valorBruto) e não tem Terminal alocado (numeroTerminal) considero ele como um cliente do tipo "Físico", caso contrário do tipo "Eletrônico".

Obrigado, Abraço!

rafael_limeira
Contributor III
Contributor III
Author

Opa Alessandro, bom dia!

Pode ser também, mas tive que agregar vários Join's, pois eu preciso agregar várias tabelas para composição da Regra. Exemplo: Tenho uma tabela para Terminais (de dois sistemas diferentes), outra tabela com vendas, etc...

Se tiver sugestão para ajustar os Join's 

# Não consigo enviar o QVD pelo fato de ser uma base corporativa.

Obrigado, Abraço!

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Rafael,

eu não sei o que é o terminal de vendas. Se for o que o nome diz, ele não deveria estar no arquivo de vendas (data, valor , produto , terminal) ?

Imagina um cliente com 10 terminais. As vendas realizadas de/para este cliente como nao tem o terminal e o join vai ligar ao cliente / terminal, gerando muito mais registros que o necessário ("replicando" as vendas para cada terminal do cliente).  Se ao inves de dar um join no terminal simplesmente desse um load e deixasse em outra tabela, nao diminuiria a quantidade de registros da sua tabela final (ver em CTRL ALT D tabelas)

furtado@farolbi.com.br
rafael_limeira
Contributor III
Contributor III
Author

Pessoal,

Como tinha uma fórmula no Set Analysis que estava dando certo, tentei realizar via Group By. Funcionou até certa parte!

Só não está funcionando 100% pois não estou conseguindo inserir uma condição no IF. A fórmula que estou utilizando no Set é a seguinte:

If(Count(numeroTerminal) = 0 and Sum(tipoProduto={'Eletrônico'}>} valorBruto) = 0,'Físico','Eletrônico')

Porém não estou conseguindo adicionar a parte da condicional do valorBruto no Script (em vermelho). Alguém já conseguiu fazer funcionar?

# Ao tirar a condição do valorBruto a informação bate 100%.

Abraço!

nicolett_yuri

Então o IF ficaria dessa forma:

Considerando que o valorBruto esteja nulo caso não tenha venda.

if(isnull(valorBruto) and isnull(numeroTerminal),'Físico','Eletrônico') as verificacaoTipoCliente

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Por que não faz um left join  group by no script e se tiver valor coloca 1 senão zero e na expressão verifica se 1 ou 0

furtado@farolbi.com.br
rafael_limeira
Contributor III
Contributor III
Author

Yuri,

Estava fazendo exatamente isso, só tinha uma condicional antes (parte vermelha):

if(statusPDV = 'INATIVO' and isnull(valorBruto) and isnull(numeroTerminal),null(),if(isnull(valorBruto) and isnull(numeroTerminal),'Físico','Eletrônico')) as verificacaoTipoCliente

A parte azul é praticamente igual a sua sugestão. Estou tentando fazer uma condição através do Group By, onde está quase dando certo. A única situação é que não consigo adicionar a parte condicional do valorBruto (sinalizado em vermelho) no script.

Sum({$<tipoProduto={'Eletrônico'}>} valorBruto) = 0

Saberia alguma forma para adicionar isso no script?

Obrigado, Abraço!