如何在缓慢变化的维度和事实中跟踪合并

How to track merging in Slowly Changing Dimension and Facts

在数据集市中,2 个或 3 个或更多维度合并形成一个新维度。如何管理 scd 以跟踪历史上的所有合并并呈现与这些维度相关的趋势事实?

一个具体的例子是三个商店(业务 ID 8897、8965、9135)合并创建一个新的商店业务 ID 9700。如何从事实 table 中获取历史销售数据以显示这一点在给定日期之前,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  

============================================= =======

事实表已经包含与 SK 1、2 和 3(ID 8897、8965 和 9135)商店相关的数据,因此您可以保持事实表不变,并且您将始终拥有过去的数据这些商店的业绩,截至它们停产的日期。

当新商店 (ID 9700) 出现时,您可以将其添加为商店维度中的新行 (SK 4),将其设置为活动行并将 "discontinued" 商店行设置为非活动(您可以为此使用布尔列,例如 "isActive" 或 "version")。从这个时间点开始,加载到事实表中的所有数据都将指向 SK 4 (ID 9700) 的存储。

在那个时间点之前,它只有 SK 1、2 和 3(ID 8897、8965 和 9135)的数据。出于这个原因,当您将它与事实表(使用 SK)连接时,您将始终能够通过使用 Store 维度中的 isActive 字段查看过去商店 and/or 当前商店的数据。

这被称为 Slowly Changing Dimension Type 2:

This method tracks historical data by creating multiple records for a given natural key in the dimensional tables with separate surrogate keys and/or different version numbers. Unlimited history is preserved for each insert.

编辑:关于你问题的第二部分,“所需的灵活性是我可以通过合并 SK 在历史上存在 9700 之前将其拉到 9700 1、2 和 3"

一个简单的选择是在 Store 维度中引入一个层次结构(父商店 -> 商店),并将每个其他商店的 "parent store ID" 字段设置为 9700。这样您可以探索专门针对每个过去商店的销售数据,通过使用它们的 ID,或者只是探索父商店(父 ID = 9700)的数据,这将提供父 9700 下所有商店的所有数据的聚合视图。

这有一个额外的好处,可以使商店维度中的数据准确地描述发生的事情:商店被合并到一个实体中,并且没有任何历史数据丢失(如果我们覆盖他们的 ID 可能会发生这种情况) ).

你需要使用"Type 6"缓慢变化的维度。本质上,它是类型 2 和类型 1 更改的组合。

它的工作方式: 要捕获 "Type 2" 更改,您的 "Store" table 中的每条记录都需要 "Start Date" 和 "End Date"。对于当前记录,结束日期通常是某个遥远的未来日期,例如 2999-12-31。当您将此类 table 连接到事实 table 时,您需要在自然键 (StoreBusinessID) 和开始日期与结束日期之间的事实日期上连接维度和事实。

要捕获 "Type 1" 更改,您必须在 "Store" table 中添加一个字段以跟踪 "Latest Business ID"。该字段将包含最新版本的业务密钥。如果没有变化,Store Business ID 和 Latest Business ID 将包含相同的键。如果商店合并,记录 8897、8965、9135 和 9700 将全部包含 "Latest Business ID" 9700。

因此,您既可以 "travel in time"(再现任何时期的准确历史),又可以按商店的最新版本分组。