【发布时间】:2019-11-27 18:43:47
【问题描述】:
我需要将一些列带到合并表中(事实)。我有一个更改捕获表,它捕获每天记录的更改,如下所示:
CHG_TABLE: +--------+-------------------+-------- ---+-----------+------------+ |钥匙 |开始日期 |结束日期 |值 |记录类型| +--------+----- -------------+--------- --+-----------+------------+ | 1 | 2019 年 5 月 25 日 2.05 | 12/31/9999 00.00 | 800 |插入 | | 1 | 2019 年 5 月 25 日 2.05 | 2019 年 5 月 31 日 11.12 | 800 |更新 | | 1 | 2019 年 5 月 31 日 11.12 | 12/31/9999 00.00 | 900 |插入 | | 1 | 2019 年 5 月 31 日 11.12 | 2019 年 6 月 15 日 12.05 | 900 |更新 | | 1 | 2019 年 6 月 15 日 12.05 | 12/31/9999 00.00 | 1000 |插入 | | 1 | 2019 年 6 月 15 日 12.05 | 2019 年 6 月 25 日 10.20 | 1000 |更新 | | 1 | 2019 年 6 月 25 日 10.20 | 12/31/9999 00.00 | 500 |插入 | | 1 | 2019 年 6 月 25 日 10.20 | 2019 年 6 月 30 日 11.12 | 500 |更新 | | 1 | 2019 年 6 月 30 日 11.12 | 12/31/9999 00.00 | 3000 |插入 | | 1 | 2019 年 6 月 30 日 11.12 | 2019 年 7 月 15 日 1.20 | 3000 |更新 | | 1 | 2019 年 7 月 15 日 1.20 | 12/31/9999 00.00 | 7000 |插入 | +--------+-------------------+-------- ---+-----------+------------+在第一次插入期间,End_Date 是时间的结束。当具有新 Start_Date 和 Value 的新记录添加到源时,它会被捕获为新条目,并且具有相同 Key 的先前记录会更新为 End_Date 作为新记录的 Start_Date。
DIM_DATE: +--------+-------------------+-------- ---+ |日期键 | Month_Start_Date | Month_End_Date | +--------+-----+-------------+-------- ---+ | 1 | 2019 年 6 月 1 日 | 2019 年 6 月 30 日 | | 2 | 2019 年 7 月 1 日 | 2019 年 7 月 31 日 | +--------+-------------------+-------- ---+我正在苦苦挣扎,因为我使用的是包含 Month_Start_Date 和 Month_End_Date 的 DATE 维度。
我想从这个更改表中创建一个每月快照,如下所示:
结果: +--------+-------------------+-------- ---+-----------+------------+ |钥匙 | Month_Start_Date | Month_End_Date |Begin_Value|End_Value | +--------+-----+-------------+-------- ---+-----------+------------+ | 1 | 2019 年 6 月 1 日 | 2019 年 6 月 30 日 | 800 | 500 | | 1 | 2019 年 7 月 1 日 | 2019 年 7 月 31 日 | 500 | 3000 | +--------+-------------------+-------- ---+-----------+------------+Begin_Value : Max(End_Date)
End_Value : Max(End_Date)
Begin_Value 应该是上个月的最新值(不是结束时间),End_Value 应该是基于 Month_End_Date 的最新值。
如何显示以上结果?
【问题讨论】:
-
除了插入后更新前一条记录的 end_date 时,是否更新过源记录?
-
我认为你的逻辑可能是错误的。我认为您应该寻找 End_Value = Max(Start_Date)