在数据集市中,2或3个或更多维度合并形成新维度。如何管理scd以跟踪历史上的所有合并并呈现与这些维度相关的趋势事实?
一个具体示例是三个商店(商业ID 8897,8965,9135)合并以创建新商店商业ID 9700.如何从事实表中提取历史销售数据以显示直到给定日期8897, 8965和9135是独立的商店,现在都是新店9700.
此外,如果新商店的商业号码不是9700,而新商店占据了之前商店的商业ID之一。因此,新的合并商店业务ID不是9700而是8897。
SurrogateKey -------- StoreBusinessID ---------- StoreName
=============== =================== ================ ==
1 8897 Alpha Electronic
2 8965 Beta Electronics
3 9135 Gamma Electronic
4 9700 Mega Electornics
=============== =================== ============= =====
答案 0 :(得分:1)
答案 1 :(得分:0)
事实表已经保存了与SK 1,2和3(ID 8897,8965和9135)的商店相关的数据,因此您可以保留事实表,并且您将始终拥有过去的数据这些商店的表现,直到它们停产的日期。
当新商店(ID 9700)出现时,您可以将其添加为商店维度中的新行(SK 4),将其设置为活动行并设置"已停用"将行存储为非活动状态(您可以使用布尔列,例如" isActive"或"版本")。从这个时间点开始,加载到事实表中的所有数据都将指向带有SK 4(ID 9700)的商店。
在此之前,它只有SK 1,2和3的数据(ID 8897,8965和9135)。因此,当您将其与事实表(使用SK)连接时,您将始终能够使用Store维度中的isActive字段查看过去商店和/或现有商店中的数据。
这称为Slowly Changing Dimension Type 2:
此方法通过使用单独的代理键和/或不同的版本号为维表中的给定自然键创建多个记录来跟踪历史数据。每个插入都保留无限的历史记录。
编辑关于问题的第二部分," 所需的灵活性是我可以通过合并SK 1,2和之前将其拉到历史9700之前的9700 3 "
一个简单的选择是将层次结构(父商店 - >商店)引入商店维度,并且对于每个其他商店,设置"父商店ID"这样,您可以通过使用其ID来探索专门针对每个过去商店的销售数据,或者仅浏览父商店的数据(父ID = 9700),这将提供所有数据的汇总视图。父母9700下的商店。
这样做的另一个好处是可以使Store维度中的数据准确地描述发生了什么:存储被合并到一个实体中,并且没有任何历史数据丢失(如果我们覆盖其ID,则可能会发生这种情况)。