Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
renato_araujo
Contributor III
Contributor III

Ligar tabelas de acordo com intervalo de datas

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;

Capturar.JPG

Modelo de Dados completo

Abraços:

Labels (1)
1 Solution

Accepted Solutions
renato_araujo
Contributor III
Contributor III
Author

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;

View solution in original post

6 Replies
Anonymous
Not applicable

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...

renato_araujo
Contributor III
Contributor III
Author

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.

Capturar 1.JPG

Anonymous
Not applicable

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?

renato_araujo
Contributor III
Contributor III
Author

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.

renato_araujo
Contributor III
Contributor III
Author

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;

renato_araujo
Contributor III
Contributor III
Author

Obrigado pela ajuda amigo.