Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
junior_ehlke
Creator III
Creator III

LinkTable

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.

Labels (2)
1 Solution

Accepted Solutions
joao_sp_campina
Creator II
Creator II

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.

View solution in original post

12 Replies
junior_ehlke
Creator III
Creator III
Author

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

aderlanrm
Partner - Specialist
Partner - Specialist

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.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
felipe_dutra
Partner - Creator
Partner - Creator

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

junior_ehlke
Creator III
Creator III
Author

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,

joao_sp_campina
Creator II
Creator II

Bom dia Hamilton,

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

Att,

      João Carlos Ferreira.

junior_ehlke
Creator III
Creator III
Author

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

junior_ehlke
Creator III
Creator III
Author

Felipe, utilizei seu código porém infelizmente não é bem isso que eu preciso. Mas Obrigado pela ajuda.

joao_sp_campina
Creator II
Creator II

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

junior_ehlke
Creator III
Creator III
Author

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