Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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.
Consegui pelo Inner Join direto no SQL, mas se alguém tiver uma opinião como fazer pelo script fica em aberto.
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.
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
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,
Bom dia Hamilton,
Refiz o seu modelo, pelo que entendi, veja se atende sua dúvida.
Att,
João Carlos Ferreira.
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.
Felipe, utilizei seu código porém infelizmente não é bem isso que eu preciso. Mas Obrigado pela ajuda.
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
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