Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Dúvida tratamento de campos em duas tabelas interligadas

Olá, boa tarde!
Pessoal, tenho duas tabelas  Pedido, que armazena a informação de pedido e Faturamento, que armazena as informaçoes de faturamento,

ambas por período,  representante e familia de produto.

A minha dúvida é a seguinte:

1) uni as duas tabelas criando um chave por periodo e familia de produto;

2) Criei duas tabelas (grafico) uma demonstrando os pedidos e outra o faturamento por familia de produto.

3) Quando fui validar os dados encontrei uma diferença entre o valor que eu tinha no meu SELECT para um determinado periodo e o que mostrava na tabela (grafico de faturamento),

O que percebi é que na tabela de faturamento ele só me mostrou as familias de produto que existem na tabela PEDIDOS, e acontece que em determinado periodo eu tenho faturamento de determinada familia, mas para aquele periodo não tenho pedidos para aquela familia

Daí pergunto, Como eu posso tratar para mostrar todas as familias de produtos?
Como eu trato o script para fazer isso?


Desde já agradeço a atenção e ajuda,
Segue print e script em anexo.

Abs,

Juliana.

8 Replies
Anonymous
Not applicable
Author

Acredito que isso acontece pelo uso do left join ... ele pega somente as familias que estão na primeira tabela...

Se eu não me engano o que você teria que utilizar seria outer join ... que pega a familia das 2 tabelas...

Not applicable
Author

Olá Rodrigo,
Você diz o LEFT que uso em relação a tabela FAMILIA_PRODUTO em cada uma das tabelas PEDIDO_HISTORICO e FATURAMENTO_LIQUIDO?

Você chegou a ver o script das tabelas que eu mandei? será que ali não tem alguma inconsistência?


Até mudei isso para outer join, mas não influenciou em nada.

Desde já agradeço a ajuda

Abs,

Juliana Holstein.

Not applicable
Author

Boa Tarde Juliana,

Ja passei por este mesmo problema.

Acontece que quando você deve inserir pelo menos um registro para esta informação, ou seja, completar a tabela faturamento.

Uma forma de você alimentar estar informações é criando uma tabela auxiliar com os valores zerados e em seguida concatenar com a tabela principal afim de mostrar todos os valores.

Segue um pequeno exemplo do que mencionei acima.

Not applicable
Author

Olá Eduardo, boa tarde!
Na verdade eu teria que tratar a minha tabela de pedidos né? Porque tenho familias de produtos na minha tabela faturamento e não na pedido para aquele periodo.

Neste exemplo que você me mandou, eu preciso tratar todos os campos que tenho na minha tabela pedido?

Ou por exemplo, só trato data e a familia do produto e seu respectivo valor, que neste caso será zero.

O que você me indica?

Desde já agradeço sua ajuda.

Abs,

Juliana

Not applicable
Author

Ola Juliana,

Neste caso eu verificaria qual é o menor e o maior período de cada tabela e geraria esta tabela auxiliar levando em consideração as duas tabelas.

O tratamento também deveria ser realizado na tabela de pedido e na de faturamento, pois neste exemplo que você mencionou, ocorreu de não existir pedidos, mas acredito que poderia ocorrer o inverso também não?

No seu caso, deveria tratar todos os campos da sua tabela, uma tabela somente com a data e a outra com os demais campos (exluindo as colunas de valores) no meu exemplo utilizei um exemplo pequeno mas poderia existir mais campos.

Fica dificil tentar resolver sem um exemplo, mas se você conseguir o que esta ocorrendo e compreender a logica da solução que propuz acho que consegue resolver esta questão.

Abraços

Not applicable
Author

Olá Eduardo,

Preciso muito de sua ajuda, não estou conseguindo fazer o tratamento na tabela de historico de pedidos para mostrar todas as familias de produto por dia.

Em anexo eu tenho o script do load que faço das duas tabelas FAMIILIA / HISTORICO_PEDIDO.

Na historico de pedido tenho o campo data_carteira, que é o campo que utilizo para gerar a tabela de datas como no seu exemplo, e crio uma tabela familia, que é o grupo do seu exemplo.

Até a união destas duas tabelas familia e data, funciona certinho.
Porém quando vou unir esta tabela que criei com a tabela HISTORICO_PEDIDO, ele não traz mas as familias que não existem na tabela HISTORICO_PEDIDO e que existem na minha tabela que criei com os valores zerados.


podes me dar um help?

Desde já agradeço,
Juliana.

Not applicable
Author

Eduardo,

Complementando o histórico anterior:

Até esta parte aqui está ok:

TABELA_FAMILIA:
LOAD DISTINCT CD_FAMILIA AS TAB_COD_FAMILIA
FROM C:\Qlikview\Producao\QVD\FAMILIA_PRODUTO.qvd (qvd);

TABELA_DATA:
NOCONCATENATE
LOAD DISTINCT DATA_CARTEIRA AS TAB_DATA_DT_CARTEIRA
FROM C:\Qlikview\Producao\QVD\HISTORICO_PEDIDO.qvd (qvd);

TABELA_TRATAR_VALOR_ZERO:
NOCONCATENATE
LOAD TAB_COD_FAMILIA,
  0 AS VALOR
RESIDENT TABELA_FAMILIA;

TABELA_DATA:
JOIN (TABELA_TRATAR_VALOR_ZERO)
LOAD TAB_DATA_DT_CARTEIRA
RESIDENT TABELA_DATA;

DROP TABLES TABELA_DATA, TABELA_FAMILIA;

Ele gera a tabela com todas as datas e familia por dia, mas agora preciso fazer o union com a tabela HISTORICO_PEDIDO, que está no arquivo em anexo anterior, mas daí não funciona.

Creio também que na tabela sem valor quando leio a familia e crio um campo valor zerado, tenho que ler todos os campos da tabela HISTORICO_PEDIDO e zera-los ne?


Obrigada,

Juliana.

Not applicable
Author

Bom Dia Juliana tudo bom?

Tente fazer um CONCATENATE entre as tabelas TABELA_TRATAR_VALOR_ZERO e PEDIDO_HISTORICO deixando ambas com a mesma quantidade de colunas.

Neste caso a TABELA_TRATAR_VALOR_ZERO deve ser complementada com colunas de valores nulos.

OBS.: realize o concatenate primeiro nas informações brutas do qvd ("HISTORICO_PEDIDO.qvd") e depois faça o tratamento para gerar a tabela "PEDIDO_HISTORICO".