从 SCD 尺寸表获取最新值

问题描述 投票:0回答:1

我有一个要求,在我的尺寸表中保留类型 2 SCD,如下所示。

例如,在 day_1,物料代码 M-01 的名称为 mat_1_old - 现在,day_1 的 交易映射到 M-01 的 dim_mat_master_id 1。现在,在 day_2,M-01 的名称更新为 mat_1_new,因此将 is_current 更新为 true,并且 day_2 上的 交易与 dim_mat_master_id 映射为 2

enter image description here

enter image description here

现在,如果我正在对 mat_name 进行聚合(例如) - 直接加入时,我将获得 mat_1_old 和 mat_1_new 的聚合,如下所示:

select dmm.material_name, sum(qty) as quantity
from fct_material_transaction fmt
join dim_material_master dmm on 
fmt.dim_mat_master_id = dmm.dim_mat_master_id
group by dmm.material_name

result
mat_1_new, 60
mat_1_old, 100

但是我需要基于最新映射的聚合,该怎么做?下面的方法正确吗?

with transaction_det as (
  select dmm.material_code, fmt.qty from fct_material_transaction fmt
  join dim_material_master dmm on 
  fmt.dim_mat_master_id = dmm.dim_mat_master_id
)
select dmm.material_name, sum(qty) from transaction_det td join dim_mat_master dmm on 
td.material_code = dmm.material_code where dmm.is_current_rec
group by dmm.material_name

result
mat_1_new, 160
database postgresql data-modeling dimensional-modeling scd2
1个回答
0
投票

我刚刚在维度表 is_current_rec 上进行了自连接,并且运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.