Amigos bom dia.
Estou com um pequeno problema para ligar uma tabelas no meu modelo de dados.
Possou uma tabela de vendas e uma tabela de promoções com determinados campos que precisam ser correspondentes caso a data do pedido esteja dentro de um intervalo de data.
Utilizei a função IntervalMatch(), mas acaba criando chaves sintéticas, pois já existem outras tabelas no meu modelo de dados onde esta Data do Pedido encontra-se na tabela de Link;
Esse é o script utilizado, onde criei uma chave concatenada com PART_NUMBER&'|'&BRAND já que o código da promoção só vale se os dois campos forem correspondentes:
Espero não ter sido confuso, mas alguém com uma ideia para ajudar.
valeu:
SellOut:
LOAD
*,
DT_ORDER,
PART_NUMBER&'|'&BRAND as %KeyBrand
Resident SellOutTemp;
DROP Table SellOutTemp;
promocao:
LOAD
COD_PROMOCAO,
NOME_PROMOCAO,
DATE(date#(DATA_INICIO,'YYYY-MM-DD'),'DD/MM/YYYY') as DATA_INICIO,
DATE(date#(DATA_FIM,'YYYY-MM-DD'),'DD/MM/YYYY') as DATA_FIM,
PART_NUMBER,
BRAND,
PART_NUMBER&'|'&BRAND as %KeyBrand
FROM
[TB_PROMOCOES.qvd]
(qvd);
Left Join(SellOut)
IntervalMatch(DT_ORDER,%KeyBrand)
LOAD
DATA_INICIO,DATA_FIM,%KeyBrand
Resident promocao;
Modelo de Dados completo
Abraços:
Boa tarde Galera,
Um colega de trabalho me ajudou a solucionar o problema de forma mais simples que esperava.
Criamos uma segunda chave vindo com a data do pedido e chave concatenada para ligar as duas tabelas e assim resolvemos o problema de chave sintética pois apagamos as tabelas anteriores duas com as mesmas chaves:
Obrigado.
Venda:
LOAD
*,
PART_NUMBER&'|'&BRAND_CLIENTE as %KeyBrand
Resident VendaTemp;
DROP Table VendaTemp;
promocao:
LOAD
COD_PROMOCAO,
NOME_PROMOCAO,
DATE(date#(DATA_INICIO,'YYYY-MM-DD'),'DD/MM/YYYY') as DATA_INICIO,
DATE(date#(DATA_FIM,'YYYY-MM-DD'),'DD/MM/YYYY') as DATA_FIM,
// PART_NUMBER,
// BRAND,
PART_NUMBER&'|'&BRAND as %KeyBrand
FROM
[TB_PROMOCOES.qvd]
(qvd);
Left Join(promocao)
IntervalMatch(DT_ORDER,%KeyBrand)
LOAD
DATA_INICIO,DATA_FIM,%KeyBrand
Resident promocao;
Vendas2:
LOAD
*,
DT_ORDER&'|'&%KeyBrand as ChavePromocao
Resident Venda;
Promocao2:
LOAD
DT_ORDER&'|'&%KeyBrand as ChavePromocao,
COD_PROMOCAO,
NOME_PROMOCAO,
DATA_INICIO,
DATA_FIM
Resident promocao;
DROP Tables promocao,Venda;
Olá Renato,
talvez exista um problema de sintaxe, olhei o material da qlik no link http://https://help.qlik.com/pt-BR/sense/September2017/Subsystems/Hub/Content/Scripting/ScriptPrefix...
Por isso também fiquei na dúvida se desse jeito que montou funcionaria...
Anderson,
Me baseie nesse material para fazer meu script adaptando a minha realidade por isso utilizei o left join, pois preciso manter minhas datas de vendas independente de um PartNumber esta no período de promoção ou não.
Tabela vendas:
KeyBrand, DT_Pedido
xyz , 05/01/2018
xpto, 05/03/2017
TabelaPromoções:
KeyBrand, DATA_INICIO,DATA_FIM, NOME_PROMOCAO
xyz, 01/01/2018, 31/01/2018, Desconto Janeiro
xpto, 01/01/2018, 31/01/2018, Desconto Janeiro
Então tenho dois registros na tabela de vendas que corresponde aos registro da tabela promoções, porém só um deles esta incluso no período da promoção..
Até aqui o resultado esta sendo o esperado, porém que cria-se a chave sintética entre as tabelas.
Talvez precise de uma outra solução, porque com essa função vai sempre criar essa chave sintética.
Visto que seus registros já são diferentes na tabela de promoção a solução não seria apenas mudar o campo chave o campo data_pedido e data_inicio?
Não,
Minha chave tem que ser o PartNumber com Brand, porque uma promoção pode por exemplo é de 01 a 31/01/2018 e uma venda pode ter sido realizada dia 14/01/2018, ou seja, entre a data de inicio e a data final da promoção, não sendo possível usar campo data como chave , e sim o PartNumber e a BRAND que fazem parte do período.
Boa tarde Galera,
Um colega de trabalho me ajudou a solucionar o problema de forma mais simples que esperava.
Criamos uma segunda chave vindo com a data do pedido e chave concatenada para ligar as duas tabelas e assim resolvemos o problema de chave sintética pois apagamos as tabelas anteriores duas com as mesmas chaves:
Obrigado.
Venda:
LOAD
*,
PART_NUMBER&'|'&BRAND_CLIENTE as %KeyBrand
Resident VendaTemp;
DROP Table VendaTemp;
promocao:
LOAD
COD_PROMOCAO,
NOME_PROMOCAO,
DATE(date#(DATA_INICIO,'YYYY-MM-DD'),'DD/MM/YYYY') as DATA_INICIO,
DATE(date#(DATA_FIM,'YYYY-MM-DD'),'DD/MM/YYYY') as DATA_FIM,
// PART_NUMBER,
// BRAND,
PART_NUMBER&'|'&BRAND as %KeyBrand
FROM
[TB_PROMOCOES.qvd]
(qvd);
Left Join(promocao)
IntervalMatch(DT_ORDER,%KeyBrand)
LOAD
DATA_INICIO,DATA_FIM,%KeyBrand
Resident promocao;
Vendas2:
LOAD
*,
DT_ORDER&'|'&%KeyBrand as ChavePromocao
Resident Venda;
Promocao2:
LOAD
DT_ORDER&'|'&%KeyBrand as ChavePromocao,
COD_PROMOCAO,
NOME_PROMOCAO,
DATA_INICIO,
DATA_FIM
Resident promocao;
DROP Tables promocao,Venda;
Obrigado pela ajuda amigo.