14 Replies Latest reply: Oct 29, 2014 7:44 AM by Luciano Vasconcelos RSS

    Relacionamento de N para N

    Antonio Mercadante

      Sr(as). Boa tarde!

       

      Alguém sabe como posso resolver a seguinte situação.

       

      Tenho duas tabelas que possuem o numero do contrato, data da venda em comum.

      Porem, o relacionamento delas é de N pra N.

      Tenho para um mesmo contrato em uma mesma data de venda vário registros. Esta Situação é comum entre as duas tabelas.

       

      Tabela A

       

      Numero contratoData Venda
      000123/10/2014
      000123/10/2014
      000222/10/2014
      000222/10/2014
      000222/10/2014

       

      Tabela B

      Numero ContratoData VendaData Pagamento
      000123/10/201427/10/2014
      000123/10/201427/10/2014
      000222/10/201424/10/2014
      000222/10/201424/10/2014
      000222/10/201424/10/2014
      000222/10/201424/10/2014

       

      Conforme exemplo acima, o cliente 0002 fez três compras, mas consta 4 pagamentos, pois pagou uma fatura em duplicidade.

       

      Não estou conseguindo relacionar estas tabelas.

       

      Alguém pode mostrar o caminho das pedras ?

       

      Obrigado!

        • Re: Relacionamento de N para N
          Luciano Vasconcelos

          É simples.

          Você vai criar uma chave composta por Numero Contrato e Data Venda, nas duas tabelas e manter o valor dos campos em uma só delas.

          Outra solução seria concatenar as duas tabelas.

           

          [Numero Contrato] & '|' & [Data Venda] as Key_Venda

          • Re: Relacionamento de N para N
            Thiago Gonçalo

            Antonio, boa tarde.

             

            Apenas para detalhar melhor o que o Luciano colocou, a composição da carga seria assim:

             

            Imagine que sua tabela seja:

             

            A primeira que contem somente Numero contrato e venda.. seria por exemplo a Tabela de vendas e a segunda seria tabela pagamento, entao seria.

             

            Vendas:

            Load

            [Numero Contrato] & '|' & [Data Venda] as Key_Venda

            [Numero Contrato]                               as NumeroContrato1

            [Data Venda]                                       as DataVenda1

            o resto dos campos

            from *****


            Pagamentos:

            Load

            [Numero Contrato] & '|' & [Data Venda] as Key_Venda

            [Numero Contrato]                               as NumeroContrato2

            [Data Venda]                                       as DataVenda2

            o resto dos campos

            From ****


            Desta forma o relacionamento entre as tabelas se dará apenas pela KEY_VENDA.


            Espero ter ajudado.



              • Re: Relacionamento de N para N
                Antonio Mercadante

                Bom dia Thiago!

                 

                Então, o problema é que estas  tabelas estão sendo carregadas em um painel que já esta em produção.

                 

                Para minha necessidade o ideal seria a união das duas tabelas em um unica, porem a  dificuldade esta justamente em unir elas. Como é N para N ela esta multiplicando os valores

                 

                No exemplo da tabela que eu postei, tenho o contrato 0002 que na tabela A possui três registros com mesma data.

                Na tabela B "pagamento" possui quatro registros, pois o cliente pagou uma fatura em duplicidade.

                 

                Quando faço um join das tabelas ele mostra muito mais registros do que tenho.

                 

                O inverso também pode acontecer, exemplo:

                O mesmo Cliente efetua mais de uma compra no mesmo dia, porem efetua o pagamento somente de uma compra.

                Não tenho nenhum campo que faça a distinção das linhas. Tabela A ,é Contrato, Data Venda, Nome do Produto e Valor da Venda. e para a Tabela B é Contrato, Data Venda e Data Pagamento.

                 

                Esse problema esta mais para modelagem do que o próprio qlikview. Pelo menos é o que acho.

                  • Re: Relacionamento de N para N
                    Rogerio Ferreira

                    Antonio,

                     

                    Pelo que vi uma tabela é a realização da venda e a outra o pagamento desta venda.

                     

                    Se você concatenar as duas tabelas, criando uma flag para identificar o tipo do registro (V = Venda e P = Pagamento), assim, não haveria duplicidade de linhas e você pela flag faria os filtros necessários.

                     

                    Ex:

                     

                    TABELAO:

                    LOAD

                      CONTRATO,

                      DATAVENDA,

                      '' DATAPAGAMENTO,

                      'V' AS TIPOREGISTRO

                    FROM TABELA1;

                     

                    CONCATENATE

                     

                    LOAD

                      CONTRATO,

                      DATAVENDA,

                      DATAPAGAMENTO,

                      'P' AS TIPOREGISTRO

                    FROM TABELA2;

                     

                    Será que ajuda?

                     

                    Abraços.

                      • Re: Relacionamento de N para N
                        Luciano Vasconcelos

                        Só lembrando que a primeira tabela não têm data de pagamento.

                        Eu ainda sugiro que você crie um count([Numero Contrato] & '|' & [Data Venda]) para compras e um count([Numero Contrato] & '|' & [Data Venda]) para pagamentos já no script para poder controlar esses erros ou exceções.

                          • Re: Relacionamento de N para N
                            Antonio Mercadante

                            Luciano,

                             

                            Eu tentei fazer o que você esta sugerindo, mas ao invés de Count utilizei o AutoNumber.

                             

                            Mas mesmo assim, não consigo entender essa solução.

                            Veja o que postei em resposta a orientação do Rogério.

                             

                            Estou me convencendo de que não é possível.

                              • Re: Relacionamento de N para N
                                Luciano Vasconcelos

                                Você vai fazer o seguinte:

                                Ex:

                                 

                                TABELAO:

                                LOAD

                                  CONTRATO,

                                  DATAVENDA,

                                  'V' AS TIPOREGISTRO,

                                  count(CONTRATO & DATAVENDA) as qtdecompras

                                FROM TABELA1

                                Group by CONTRATO,

                                  DATAVENDA,

                                  TIPOREGISTRO;

                                 

                                CONCATENATE

                                 

                                LOAD

                                  CONTRATO,

                                  DATAVENDA,

                                  DATAPAGAMENTO,

                                  'P' AS TIPOREGISTRO,

                                count(CONTRATO & DATAPAGAMENTO) as qtdepagamentos

                                FROM TABELA2

                                Group by CONTRATO,

                                  DATAVENDA,

                                  DATAPAGAMENTO,

                                  TIPOREGISTRO;

                              • Re: Relacionamento de N para N
                                Antonio Mercadante

                                Luciano!

                                 

                                Consegui resolver seguindo sua linha de raciocínio.

                                 

                                Eu carreguei primeiro a tabela B "que não tem o valor da venda". Fiz um inner join de A para B só para trazer o valor da venda.

                                 

                                Depois concatenei as duas tabelas criando uma flag conforme o Rogério Ferreira comentou.

                                 

                                Obrigado pela ajuda!

                                  • Re: Relacionamento de N para N
                                    Luciano Vasconcelos

                                    Disponha.

                                    Ótimo que conseguimos ajudar.

                                     

                                    Att.

                                    Luciano.

                                     

                                    Em 29/10/2014, às 09:08, Antonio Mercadante <qcwebmaster@qlikview.com> escreveu:

                                     

                                     

                                    Qlik Community

                                    Relacionamento de N para N

                                    resposta de Antonio Mercadante em Qlik Brasil - Visualize a discussão completa

                                     

                                    Luciano!

                                     

                                     

                                     

                                    Consegui resolver seguindo sua linha de raciocínio.

                                     

                                     

                                     

                                    Eu carreguei primeiro a tabela B "que não tem o valor da venda". Fiz um inner join de A para B só para trazer o valor da venda.

                                     

                                     

                                     

                                    Depois concatenei as duas tabelas criando uma flag conforme o Rogério Ferreira comentou.

                                     

                                     

                                     

                                    Obrigado pela ajuda!

                                     

                                    Responda a esta mensagem respondendo a este e-mail ou vá para a mensagem em Qlik Community

                                    Inicie uma nova discussão em Qlik Brasil por e-mail ou em Qlik Community

                                    Seguindo Qlik Brasil nestes fluxos: Caixa de Entrada

                                    Seguindo Relacionamento de N para N nestes fluxos: Caixa de Entrada

                                    © 1993-2014 QlikTech International AB     Copyright & Trademarks | Privacy | Terms of Use | Software EULA

                                     

                                • Re: Relacionamento de N para N
                                  Antonio Mercadante

                                  Bom dia Rogério!

                                   

                                  Estou convencido de que não é possível fazer o que preciso pelo simples fato

                                   

                                  Tabela A

                                  Numero contratoData Venda
                                  000222/10/2014
                                  000222/10/2014
                                  000222/10/2014

                                   

                                  Tabela B

                                  Numero ContratoData VendaData Pagamento
                                  000222/10/201424/10/2014

                                   

                                  Se eu concatenar a tabela B com a A, vou popular as três linhas da tabela A com a data de pagamento 24/10/2014. O que não condiz com a realidade, pois efetuei somente um pagamento.

                                   

                                  Por incrível que pareça, o usuário esta controlando isso via Excel. Tentei fazer um milagre aqui mas não foi possível.

                                   

                                  Vocês que possuem mais experiência, concordam com a minha conclusão ou eu ainda não consegui entender a solução?

                                • Re: Relacionamento de N para N
                                  Thiago Gonçalo

                                  Antonio, bom dia!

                                   

                                  Utilize o que o Rogério sugeriu, é a forma mais tranquila para transformar 2 tabelas em uma fato.

                                   

                                  Qualquer dificuldade, poste aqui e tentaremos lhe auxiliar.