如何创建历史事实数据表



我的数据仓库中有一些实体:

  1. Person - 具有属性 personId、dateFrom、dateTo 和其他可以更改的属性,例如姓氏、出生日期等 - 缓慢变化的维度

  2. 文档 - 文档 ID、编号、类型

  3. 地址 - 地址ID,城市,街道,房子,公寓

(人员和文档)之间的关系是一对多,

(人员和地址)是多对多的关系。

我的目标是创建历史事实表,可以回答我们以下问题:

    哪些
  1. 人持有哪些文件在规定的日期住在规定的地址?

2,定义的地址在定义的时间间隔内具有哪些居民历史?

这不仅适用于DW的设计,而且我认为这是DW设计中最难的事情。

例如,Miss Brown(具有personId=1),documentId=1和documentId=2的文档自2005年1月1日至2010年2月2

日一直居住在地址Id=1的地址上,然后移动到地址Id=2,从2010年3月2日至今一直居住(NULL?)。但她自 2006 年 5 月 4 日起将姓氏改为格林夫人,自 2007 年 7 月 6 日起,她的第一个文档将 documentId=1 改为 documentId=3。布莱克先生与personId=2,documentId=4自2010年3月2日至今一直住在addressId=1。

我们对问题 2 的查询的预期结果,其中 addressId=1,时间间隔从 01/01/2000 到现在,必须如下所示:

行:

last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006
last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006
last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007
last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007
last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010
last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010
last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL

我有一个使用复合键(personId,documentId,addressId,dateFrom)创建事实表的想法,但我不知道如何加载此表,然后使用此结构获得预期结果。

我将很高兴得到任何帮助!

>有趣的问题@Argnist!

因此,要为我的示例创建一些通用语言,您需要一个

  • DimPerson (PK=kcPerson,唯一 Persons=kPerson 的 suggorate 键,类型 2 dim)
  • DimDocument (PK=kcDocument,唯一 Documents=kDocument 的 suggorate 键,类型 2 dim)
  • DimAddress (PK=kcAddress,唯一地址=kAddress的suggorate键,类型2 dim)

一位同事写了一篇关于使用两个代理键的简短博客来解释上述"在维度上使用两个代理键"。

我总是会添加带有 PK 的暗影日期,形式为 yyyymmdd到具有额外属性列的任何数据仓库。

然后,您将拥有事实数据表作为

  • FactHistory (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDate)加上任何附加措施。

然后加入"kc",您可以显示当前的人员/文档/地址维度信息。如果您在"k"上加入,则可以显示历史人员/文档/地址维度信息。

这样做的缺点是,此事实数据表需要每个人/文档/地址/日期组合一行。但它确实是一个非常窄的表,因为该表只有许多外键。

这样做的好处是很容易查询您提出的问题类型。

或者,您可以将事实数据表设置为

  • FactHistory (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDateFrom, kDateTo)加上任何附加措施。

这显然要紧凑得多,但查询变得更加复杂。您还可以在事实数据表上放置视图,以便更轻松地进行查询!

解决方案的选择取决于数据的变化频率。我怀疑它不会那么快改变,所以事实表的替代设计可能会更好。

希望有帮助。

最新更新