我有 2 个源表,资产 + 资产属性,我已将其建模为事实和 3-4 个维度。
我为某些属性创建了一个维度来显示变化,因此,如果资产是 2 间卧室,但随后变为 3 间卧室,我可以使用 SCD2 看到这一点。这是一个垃圾维度,因为我可以捕捉到一些东西,并且我对此感到满意。
我遇到的问题是事实保留了诸如类型和其他暗淡之类的 FK,如果这些更改当前我的事实表将在 ETL 运行后仅显示正确/最新的密钥。
客户想要显示事实是否发生变化,因此在 2023 年它可能是类型 A,但在 2024 年它更改为类型 B。
这就像一个缓慢变化的事实,无法做快照,所以对我来说最好的事情就是拥有事实资产和暗淡资产。
我试图保留我的星型模式,但我认为在这种情况下我不能,除非我对事实表进行排序删除。源代码中也只有 1 个更新日期,因此当某些内容发生更改时,我需要检查所有暗淡的内容
最简单的方法可能就是将维度与其自身连接起来。例如,如果您想要 2023-01-01 上的维度属性:
SELECT F.*, D2.*
FROM FACT_TABLE F
INNER JOIN DIM_TABLE D1 ON F.DIM_TABLE_SK = D1.DIM_TABLE_SK
INNER JOIN DIM_TABLE D2 ON D1.DIM_TABLE_BK = D2.DIM_TABLE_BK
WHERE D2.EFF_START_DT <= '2023-01-01' AND D2.EFF_END_DT > '2023-01-01'
SK/BK 分别是代理密钥和业务密钥