我有一个客户维度和跟踪与客户会话事实表中,这些有以下栏目:迷你/垃圾尺寸咨询
代码:
[DimClient]
----------
PK_ClientKey
ClientNumber
EmailAddress
Postcode
PostcodeLongitude
PostcodeLatitude
DateOfBirth
Gender *
Sexuality *
CulturalIdentity *
LanguageSpokenAtHome *
CountryOfBirth
UsualAccommodation *
LivingWith *
OccupationStatus *
HighestLevelOfSchooling *
RegistrationDate
LastLoginDate
Status
[FactSession]
-------------
PK_SessionKey
FK_ClientKey
...
我的第一个要求是开始分组的在特定会话(FactSession)中客户的年龄,解决此问题的最佳方法是创建年龄段维度并在FactSession中为DimAgeGroup维度创建一个外键(FK_AgeGroupKey)。
现在我想这将是一个很好的跟踪*(上图)的所有列。这些可能(尚未证明)与Sessions有很高的相关性。通过DWH工具包读这似乎是一个迷你尺寸,以适应所有的*列同年龄组一起配不配最好的,所以我总结了以下结构:
代码:
[DimClient]
----------
PK_ClientKey
ClientNumber
...
Status
[DimDemographic]
-----------------
PK_DemographicKey
AgeGroup
Gender
Sexuality
...
HighestLevelOfSchooling
[FactSession]
-------------
PK_SessionKey
FK_ClientKey
FK_DemographicKey
的DimDemographic表将需要利用SCD Type 2来跟踪随时间变化的变化。这对我的要求是最好的方法吗?
此外,我的客户维度上有RegistrationDate和LastLoginDate列,在客户端注册但从未登录的情况下,放入LastLoginDate字段的最佳值是什么?像'1900-01-01'或NULL?
对不起,很长的文章,但希望我已经提供了足够的信息预先感谢!
谢谢先生。 KAV。我认为在DimClient中滚动人口统计数据是有道理的,但是我想知道我应该如何处理AgeGroup。我想在会议期间了解客户的年龄组。我想我必须在ETL中引入逻辑,以便它看起来是否会在一年后发生新的Session,如果是这样,则更新DimClient中的AgeGroup? – schone 2012-02-27 00:49:55
这里有两种方法,第一种假设ETL过程只能向前运行,即不需要重建一年前的AgeGroup。 ETL每天运行,并将汇总数据放在一边。在这个方法中,你可以在DimClient中管理它。第二种方法和我的偏好是使用您使用过的表格结构,它将允许您随时重建DWH,因为数据将始终在源数据库中正确编目。是否有意义? – itayw 2012-02-27 09:26:31
先生。 kav,有道理,我认为我会继续推进垃圾/迷你维度,但不会预加载所有数据,只加载显而易见的独特组合,否则我会加载数百万*可能无关的数据。我知道,如果相关性较低,我不应该在垃圾/迷你维度中加载数据,但是想法是查看是否存在任何关联。再次感谢! – schone 2012-02-27 09:43:51