我有一个要求,在我的尺寸表中保留类型 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。
现在,如果我正在对 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
我刚刚在维度表 is_current_rec 上进行了自连接,并且运行良好。