Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
mmaturana
Contributor III
Contributor III

Trazer o valor de um determinado período

Pessoal uma dúvida... tenho o seguinte cenário:

Tabela_Fato:
Chave,
cd_servico,
dt_atendimento,
vl_pago

Tabela_dim:
cd_servico,
dt_inicio_vigencia,
vl_unitario

O meu vínculo seria pelos campos cd_servico e dt_inicio_vigencia, porem eu preciso fazer a seguinte verificação o meu dt_inicio_vigencia tem que ser anterior a minha data de atendimento. Por exemplo para o serviço 1010 com dt_atendimento 01/05/19 preciso pegar o valor unitario da tabela de dimensão com os seguintes dados.

cd_servico              dt_inicio_vigencia               vl_unitario
1010                          01/03/19                                    10
1010                          01/04/19                                    15
1010                          01/07/19                                    25
2020                          01/05/19                                    100
2020                          01/07/19                                    150

Nesse caso me retornaria o valor do dia 01/04, não estou conseguindo chegar na logica para trazer isso na carga.

 

Obrigado

2 Replies
Ezir
Creator II
Creator II

Olá @mmaturana ,

 

Se você precisa fazer isso no Load Editor, então sugiro criar apenas uma coluna calculada na Tabela_Fato com o mesmo nome dt_inicio_vigencia onde dt_atendimento - 1 mês. Veja abaixo um exemplo:

 

Tabela_Fato:
load Chave,cd_servico,date#(dt_atendimento,'DD/MM/YYYY') as dt_atendimento, date(AddMonths(date#(dt_atendimento,'DD/MM/YYYY'),-1)) as dt_inicio_vigencia, vl_pago  inline [
Chave,cd_servico,dt_atendimento,vl_pago,
1,1010,01/05/2019,15
];

inner join

Tabela_dim:
load cd_servico, date(date#(dt_inicio_vigencia,'DD/MM/YYYY')) as dt_inicio_vigencia, vl_unitario inline [
cd_servico,dt_inicio_vigencia,vl_unitario,
1010,01/03/2019,10,
1010,01/04/2019,15,
1010,01/07/2019,25,
2020,01/05/2019,100,
2020,01/07/2019,150
];

  

Saudações,

Ezir

mmaturana
Contributor III
Contributor III
Author

Ezir boa tarde, me desculpe a demora para dar o retorno.

 

Consegui resolver essa situação utilizando o Peek para criar uma data fim de cada período, e depois utilizei o intervalmatch estendido para trazer o valor exato.

Temp2_Cotacao:
Load
DATE(FLOOR(DT_COTACAO),'DD/MM/YYYY') AS Dt_Cotacao,
Date(If(Cd_Moeda =Peek('Cd_Moeda '),
Peek('Dt_Cotacao')-1,
Today()
)) AS Dt_Final_Cotacao,
Cd_Moeda ,
Vl_Cotacao

 

///////////////////////////////////////////////////////


Dim_Cotacao_Moeda_Regra:
Load
Dt_Cotacao,
Dt_Final_Cotacao,
Cd_Moeda as Cd_Moeda_Regra,
Vl_Cotacao as Vl_Cotacao_Regra
from [$(VPathDimLivro)\Dim_Cotacao_Moeda.QVD] (qvd);

 

Invervalo_Regra:
left Join(Temp_Dim_Moeda_Proc_Cotacao)
IntervalMatch(Dt_Procedimento,Cd_Moeda_Regra)
Load
Dt_Cotacao,
Dt_Final_Cotacao,
Cd_Moeda_Regra
Resident Dim_Cotacao_Moeda_Regra;


//Cotacao:
Left Join (Temp_Dim_Moeda_Proc_Cotacao)
Load
Dt_Cotacao,
Dt_Final_Cotacao,
Cd_Moeda_Regra,
Vl_Cotacao_Regra
Resident Dim_Cotacao_Moeda_Regra;


Drop Fields Dt_Cotacao, Dt_Final_Cotacao;

 

 

Obrigado