我有一些实体在我的数据仓库:如何创建历史事实表?
人 - 带有属性PERSONID,dateFrom,dateTo,和其他那些可以改变的,例如最后的姓名,出生日期等等 - 渐变维度
文档 - documentId,数量,类型
地址 - addressId,城市,街道,房屋,平
(人与文档)之间的关系是一对多和(人与地址)是多对多关系。
我的目标是创建一个可以回答我们下面的问题的历史事实表:
- 什么人用什么证件住在上定义的日期定义的地址?
2,什么历史的居民确定的地址定义了时间间隔?
这不仅是为了什么DW设计,但我认为这是在数据仓库的设计最难的事情。
例如,personId = 1的布朗小姐,documentId = 1和documentId = 2的文档自2005年1月1日至2010年2月2日期间住址为addressId = 1,然后移至addressId = 2自02/03/2010至今的日期(NULL?)。但她自2006年5月5日起将姓氏改为格林太太,并自2007年7月6日起将她的第一份文件与documentId = 1改为documentId = 3。 BlackId的personId = 2,documentId = 4自从02/03/2010至当前日期以来一直住在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),但我不知道如何加载此表,然后得到这个结构预期的结果。
我会很乐意为您提供帮助!
@Marcus d谢谢。我认为类似但实际上没有“k”键(我是否理解你的名字是否正确?kcPerson - 用于识别行的替代键,kPerson - 识别一个人的自然键?)。我们必须更新旧事实kDateTo – Argnist 2011-05-29 10:20:06
但FactHistory(FKS = kcPerson,kPerson,kcDocument,kDocument,kcAddress,kAddress,kDateFrom,kDateTo)收益率 - 这是不好的我想。可能会更好有一个kDateFrom ...还有一个问题。在DimDocument或DimAddress中键入2 scd - 用于设置一个人的文档/地址或什么? – Argnist 2011-05-29 10:32:47
@设计师。我们将使用两个整数替代键kcPerson和kPerson。kperson将是一个指向独特个体的代理键(不管姓名变化/性别变化等),kcperson将是代表该人的具体实例(他们的具体姓名/性别等)的代理键。检查我包括的链接。我们不保留事实表上的自然键。总是用代理键 - 快得多,当你的商业用户想要改变自然键名,但保留一个链接到历史记录(是的,我们已经发生了!),也解决了这个问题 – 2011-05-31 09:43:03