12 Replies Latest reply: Jul 21, 2014 7:23 AM by Hamilton Junior RSS

    LinkTable

    Hamilton Junior

      Boa tarde, quem esta no Sábado a tarde quebrando a cabeça com o QV? hehe

      Preciso de uma ajuda de vocês, meu cenário é o seguinte.

       

      Tabela Venda:

      -Id_tempo

      -Id_produto

       

      Tabela AgendaOferta:

      -Id_Tempo

      -Cod_Agenda

       

      Tabela ProdutoAgenda

      -Cod_Agenda

      -Id_produto.

       

      A informação que eu preciso é saber quanto um produto vendeu em determinada agenda de oferta, então eu selecionando a agenda, ele me traz os produtos dessa agenda e a venda de cada um pelo id_tempo. Porém das formas que eu tentei aqui, consumiu toda a memoria do servidor. Tentei criar uma tabela que contenham as 3 informações, Id_tempo; Id_produto; Cod_Agenda e fazer uma chave para ligar com a venda, mas não consegui.

        • Re: LinkTable
          Hamilton Junior

          Consegui pelo Inner Join direto no SQL, mas se alguém tiver uma opinião como fazer pelo script fica em aberto.

            • Re: Re: LinkTable
              Aderlan Rodrigues

              Olá Hamilton,

               

              Esse seu exemplo vai dar referencia circular, por isso o problema do consumo.

              Só com os código, não faz sentido algum exemplo... vou tentar explicar.

              Vejamos, se você tem vendas, produtos, agenda, produto agenda e tempo, é provável que a sua tabela fato é a venda, logo, você terá:
              Tempo se liga a venda;

              Produto se liga a venda;

              Agenda se liga a produto agenda;

              Produto agenda se liga a produto e a venda ao mesmo tempo.

               

              Então, ao escolher um "tempo", saberá a venda, os produtos e os agendamentos daquele tempo;

              Escolhendo um produto, saberá a venda, os produtos, os agendamentos e os "tempos";

              E por ai vai.

               

              Dá uma olhada no anexo, abraço.

                • Re: LinkTable
                  Hamilton Junior

                  Bom dia Aderlan, estou analisando esse seu exemplo mas fiquei em dúvida pelo seguinte,

                  na agenda do seu exemplo eu não tenho data nenhuma. Digamos que na tabela de Agenda eu tenha Data Inicial e Data Final da Oferta, estas datas deveriam ser vinculadas a tabela Venda, mas ficaria aquela referencia circular que você falou,

                    • Re: Re: LinkTable
                      Joao Ferreira

                      Bom dia Hamilton,

                       

                      Refiz o seu modelo, pelo que entendi, veja se atende sua dúvida.

                       

                       

                      Att,

                            João Carlos Ferreira.

                        • Re: LinkTable
                          Hamilton Junior

                          João, na verdade estou conseguindo da forma que o Aderlan começou a explicar. Barrei no seguinte:

                          Na Agenda de Ofertas eu tenho Data Inicial, Data Final e o Numero da Unidade. Na tabela de Vendas eu tenho a data de Movimento e o Numero da Unidade. Se eu interligar o numero da Unidade entre elas, entra em referencia circular, além disso gostaria que a Data Inicial e Data Final fosse o intervalo entre as vendas. Olhem como esta ficando a estrutura. a tabela FATO DETALHE é a minha tabelas de venda, o nome esta errado.tabelas.jpg

                            • Re: LinkTable
                              Joao Ferreira

                              Boa tarde Hamilton,

                               

                              Não seria o caso de você rever seu modelo. Pelo que percebi no seu modelo a tabela de Agenda deve está ligada a tabela de Vendas, pois você quer considerar o agendamento de vendas por unidade. Você deve ligar a tabelas pelo código da unidade e tirar a ligação da tabela de Agenda com a tabela de Produto. Elimine as chaves entre o campo 'Agof_codigo' e liga a tabela de Agenda com a tabela de Vendas pelos Campos 'id_unidade e Agof_unidades'. Você deve renomear os campos para criar a chave.

                               

                              Tente rever seu modelo.

                              João Carlos Ferreira

                                • Re: LinkTable
                                  Hamilton Junior

                                  Estou pensando na sua logica, porém assim, se eu não ligar a tabela de Agenda de Oferta com a Tabela dos Produtos da oferta, não vou ter como saber a venda, pois eu não tenho essa informação na Agenda.

                                   

                                  O que você me diz de eu juntar em SQL essas duas tabelas para não ficar quebrando a cabeça?

                                   

                                  SELECT prag_agof_codigo, prag_prod_codigo, prag_precooferta, agof_descricao, agof_datai, agof_dataf, 
                                  agof_unidades, agof_datai as id_tempo
                                  FROM pragof
                                  INNER JOIN agof ON prag_agof_codigo=agof_codigo

                                    • Re: LinkTable
                                      Joao Ferreira

                                      Hamilton,

                                       

                                      Acredito que seja uma solução possível. Mas você pode fazer isso no próprio qlikview usando o comando left join entre as tabelas. Você carrega a tabela de ProdutoAgOferta, depois carrega a tabela de AgendaOferta usando o comando left join para verificar os valores da agenda que contem na tabela de Produtos.

                                       

                                      Deve ficar mais ou menos assim:

                                       

                                      load

                                            agof_codigo                 as chave

                                              from Produto

                                       

                                      left join

                                       

                                      load

                                           agof_codigo                 as chave

                                           from Agenda

                                       

                                      João Carlos Ferreira.

                              • Re: LinkTable
                                Aderlan Rodrigues

                                Olá Hamilton,

                                 

                                Essa semana foi muito corrida, estive longe, qua bom que resolveu.

                                É assim mesmo, também passei por esse processo de migração do SQL para o QlikView, ao longo do tempo você vai pegando o jeito.

                                 

                                Grande abraço.

                          • Re: LinkTable
                            Felipe Dutra

                            Veja se te atende, Hamilton:

                             

                            [Venda]:
                            LOAD
                            Id_tempo&'|'&Id_produto as Chv_Venda,
                            Id_produto as Id_produtoTmp,//Será dropado posteriormente
                            //Id_tempo as Venda_Id_Tempo,
                            //Id_produto as Venda_Id_Produto,
                            1 as Venda_Flag_Item,
                            Qtde
                            From <Base Vendas>;
                            
                            
                            MapChv_Venda:
                            Mapping
                            LOAD Distinct
                            Chv_Venda,
                            'Vendido' as Retorno
                            Resident Venda;
                            
                            
                            
                            
                            [ProdutoAgendaOferta]:
                            //[ProdutoAgenda]:
                            LOAD
                            Cod_Agenda,
                            Id_produto,
                            If(Exists(Id_produtoTmp, Id_produto), 'Vendido', 'Não Vendido') as Status_Produto
                            From <Base ProdutoAgenda>;
                            
                            
                            DROP Field Id_produtoTmp From Venda;
                            
                            
                            [AgendaOferta]:
                            Join ([ProdutoAgendaOferta])
                            LOAD
                            Cod_Agenda,
                            Id_Tempo
                            From <Base AgendaOferta>;
                            
                            
                            Left Join([ProdutoAgendaOferta])
                            LOAD Distinct
                            Id_Tempo,
                            Id_produto,
                            Id_tempo&'|'&Id_produto as Chv_Venda,
                            ApplyMap('MapChv_Venda', Id_tempo&'|'&Id_produto, 'Não Vendido') as Status_ProdutoTempo
                            Resident [ProdutoAgendaOferta];
                            

                             

                            Abs,

                            Felipe