2012-02-26 56 views
0

我有一個客戶維度和跟蹤與客戶會話事實表中,這些有以下欄目:迷你/垃圾尺寸諮詢

代碼:

[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?

對不起,很長的文章,但希望我已經提供了足夠的信息預先感謝!

回答

1

是的,上述解決方案應該可以正常工作。它支持您跟蹤隨時間變化的需求,否則您可以直接在DimClient中包含DimDemographic鏈接。 關於日期問題,我相信你應該使用NULL,這意味着沒有價值,因爲沒有登錄。此外,識別未登錄將是:

select * from DimClient where LastLoginDate IS NULL 

對我來說這讀取比使用人工日期的查詢要好得多。 。

+0

謝謝先生。 KAV。我認爲在DimClient中滾動人口統計數據是有道理的,但是我想知道我應該如何處理AgeGroup。我想在會議期間瞭解客戶的年齡組。我想我必須在ETL中引入邏輯,以便它看起來是否會在一年後發生新的Session,如果是這樣,則更新DimClient中的AgeGroup? – schone 2012-02-27 00:49:55

+0

這裏有兩種方法,第一種假設ETL過程只能向前運行,即不需要重建一年前的AgeGroup。 ETL每天運行,並將彙總數據放在一邊。在這個方法中,你可以在DimClient中管理它。第二種方法和我的偏好是使用您使用過的表格結構,它將允許您隨時重建DWH,因爲數據將始終在源數據庫中正確編目。是否有意義? – itayw 2012-02-27 09:26:31

+0

先生。 kav,有道理,我認爲我會繼續推進垃圾/迷你維度,但不會預加載所有數據,只加載顯而易見的獨特組合,否則我會加載數百萬*可能無關的數據。我知道,如果相關性較低,我不應該在垃圾/迷你維度中加載數據,但是想法是查看是否存在任何關聯。再次感謝! – schone 2012-02-27 09:43:51

1

我將一個字段添加到您的客戶端的尺寸來表示用戶從未登錄過喜歡的東西:

select * form DimClient where HasUserLoggedIn = 'NO'; 

它非常人性化的可讀性,而且你不會有教你的商業用戶關於零點。由於null!= null的複雜性,傳統上數據倉庫中的空值是壞的,除了數值事實值。