11 Replies Latest reply: Jul 8, 2016 5:42 PM by Clever Anjos RSS

    Dúvida - Join

    Rafael Limeira

      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

      [C:\...];

       

      Join

       

      Table2:

       

      // SISTEMA 1

       

      LOAD clienteID,

                numeroTerminal


      FROM

      [C:\...]

       

      Where

       

        (Situação = 'Ativo' or

        Situação = 'Credenciado' );

       

      Join

       

      Table3:

       

      // SISTEMA 2

       

      LOAD clienteID,

                numeroTerminal

               

      FROM

      [C:\...]

       

      Where

       

        (Situacao = 'Em Instalacao' or

        Situacao = 'Em Operacao' or

        Situacao = 'Inoperante' );

       

      Join

       

      Table4:

       

      //VENDA LOCAL 1

       

      LOAD clienteID,   

                valorBruto,

                tipoProduto

       

      FROM

      [C:\...]

       

      Where

       

       

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

       

      Join

       

      Table5:

       

      //VENDA LOCAL 2

       

      LOAD clienteID,   

                valorBruto,

                tipoProduto

       

      FROM

      [C:\...];

       

      Join

       

      Table6:

       

      //VENDA LOCAL 3

       

      LOAD clienteID,

                valorBruto,

                tipoProduto

       

      FROM

      [C:\...];

       

      [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?

        • Re: Dúvida - Join
          Yuri Nicolett

          Seu IF esta estranho...

          Descreva qual seria a regra para o campo verificacaoTipoCliente

            • Re: Dúvida - Join
              Rafael Limeira

              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!

                • Re: Dúvida - Join
                  Yuri Nicolett

                  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

                    • Re: Dúvida - Join
                      Rafael Limeira

                      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!

                • Re: Dúvida - Join
                  Alessandro Furtado

                  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 [C:\...]

                   

                  Join

                   

                  LOAD clienteID,  

                            valorBruto,

                            tipoProduto

                   

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

                    • Re: Dúvida - Join
                      Rafael Limeira

                      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!

                        • Re: Dúvida - Join
                          Alessandro Furtado

                          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)

                      • Re: Dúvida - Join
                        Rafael Limeira

                        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!

                          • Re: Dúvida - Join
                            Alessandro Furtado

                            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

                              • Re: Dúvida - Join
                                Rafael Limeira

                                Alessandro,

                                 

                                Aí é que está, tanto o right quanto o left o resultado é o mesmo. Preciso adicionar apenas uma condição ao valorBruto para que dê certo, aí eu poderia utilizar tanto 1 / 0 ou até mesmo 'Físico' / 'Eletrônico'. Fiz o seguinte código no scrit:

                                 

                                Right Join 

                                 

                                LOAD

                                  clienteID,

                                  If(Count(numeroTerminal) = 0 and Sum(valorBruto) = 0,'Físico','Eletrônico') as verificacaoTipoCliente

                                 

                                Resident [Table1]

                                 

                                Group By clienteID; 

                                 

                                DROP Table Table1;

                                 

                                Porém preciso enquadrá-la na seguinte fórmula do Set Analysis:

                                 

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

                                 

                                A condição em vermelho que não estou conseguindo adicionar no Group By. Se adicionar esta condição no script resolvemos o problema, Abraço!

                            • Re: Dúvida - Join
                              Clever Anjos

                              Já conseguiu a resposta? Se sim, escolha uma e marque como "Correta" para fechar o tópico e nos ajudar a manter a comunidade organizada