我是维建模和数据仓库概念的新手,并希望就以下主题寻求任何建议/反馈。
目前,我们有一个每日快照表,用于存储金融产品每天(报告日期)的度量值(价格)。 金融产品可以是股票/股票,债券,基金,期货,甚至是建筑物。如果我们在某天没有获得某产品的价格,那么我们将结转先前的价格(价格最高日期的价格)。
以下包含两个事件的示例描述了我需要您帮助的挑战。...
第一项赛事:在2018年6月26日,我们收到的A基金价格为100。
数据仓库中的暂存区域包含:
Price Date|Product|Price
----------+-------+-----
26-06-2018|Fund-A |100
我们的定期快照事实表每天包含此价格(从26-06到30-06)
Reporting Date|Price Date|Product*|Price
--------------+----------+-------+------
26-06-2018 |26-06-2018|Fund-A |100
27-06-2018 |26-06-2018|Fund-A |100
28-06-2018 |26-06-2018|Fund-A |100
29-06-2018 |26-06-2018|Fund-A |100
30-06-2018 |26-06-2018|Fund-A |100
* =现实生活中的替代键
第二个事件:在2018年1月7日,我们收到价格为20-02-2018的Fund-A的追溯价格99。
数据仓库中的暂存区域现在包含两个记录:
Price Date|Product|Price
----------+-------+-----
20-02-2018|Fund-A |99
26-06-2018|Fund-A |100
Periodic Snapshot Fact表获取Fund-A的最新可用价格并将其结转。
Reporting Date|Price Date|Product|Price
--------------+----------+-------+------
26-06-2018 |26-06-2018|Fund-A |100
27-06-2018 |26-06-2018|Fund-A |100
28-06-2018 |26-06-2018|Fund-A |100
29-06-2018 |26-06-2018|Fund-A |100
30-06-2018 |26-06-2018|Fund-A |100
01-07-2018 |26-06-2018|Fund-A |100
在这种情况下的“差距”是我们没有在定期快照表中存储20-02-2018的回溯价格。事实根本没有记录在数据仓库中。可以在“每日快照”表中添加回溯价格,但是在重新计算数据仓库中的其他历史事实时会造成很多挑战(目前我们不使用多维数据集)。
因此,我一直在考虑保留当前的处理方式,并接受这样的事实,即在收到追溯价格时,这些未反映在历史计算的事实中。为了仍然捕捉到追溯价格的事实,我们将引入一个额外的Transactional Snapshot表,该表基本上是登台表的“副本”:
Price Date|Product|Price
----------+-------+-----
20-02-2018|Fund-A |99
26-06-2018|Fund-A |100
这仍然可以反映出我们有一个追溯的价格,但是我们没有在任何计算中使用它。
交易事实表是捕获滞后价格的正确设计模式吗?
任何建议/反馈将不胜感激。
非常感谢, 米克洛