Советы по мини / мусорному измерению - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть измерение клиента и таблица фактов, которая отслеживает сеансы с клиентами, в них есть следующие столбцы:

Код:

[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), лучший способ достичь этого - создать измерение возрастной группы и создать внешний ключ (FK_AgeGroupKey) в FactSession для DimAgeGroup измерение.

Теперь я думаю, что было бы хорошо отследить все столбцы с помощью * (выше). Они могут (пока не доказано) иметь высокую корреляцию с сессиями. Читая инструментарий DWH, кажется, что мини-измерение для размещения всех * столбцов вместе с возрастной группой подойдет лучше всего, поэтому я собрал следующую структуру:

Код:

[DimClient]
----------
PK_ClientKey
ClientNumber
...
Status

[DimDemographic]
-----------------
PK_DemographicKey
AgeGroup
Gender
Sexuality
...
HighestLevelOfSchooling

[FactSession]
-------------
PK_SessionKey
FK_ClientKey
FK_DemographicKey

В таблице DimDemographic потребуется использовать SCD типа 2, чтобы иметь возможность отслеживать изменения во времени. Будет ли это лучшим подходом к моим требованиям?

Кроме того, у меня есть столбцы RegistrationDate и LastLoginDate в моем измерении клиента, в случае, когда клиент регистрируется, но никогда не регистрируется, какое было бы наилучшее значение для поля LastLoginDate? Что-то вроде '1900-01-01' или NULL?

Извините за длинный пост, но, надеюсь, я предоставил достаточно информации Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 17 марта 2012

Я бы добавил поле к измерениям вашего клиента, чтобы указать, что пользователь никогда не входил в систему. Что-то вроде:

select * form DimClient where HasUserLoggedIn = 'NO';

Оно очень удобочитаемо, и вам не придется учить своих бизнес-пользователей о пустых значениях.,Традиционно значения NULL являются неправильными в хранилище данных, за исключением случаев числовых значений фактов, из-за сложности null! = Null.

1 голос
/ 26 февраля 2012

Да, вышеуказанное решение должно работать нормально.Он поддерживает вашу потребность отслеживать изменения с течением времени, в противном случае вы можете включить DimDemographic связь непосредственно в DimClient.Что касается вопроса о дате, я полагаю, что вы должны использовать NULL, это означает, что нет никакого значения, потому что не было логина.Кроме того, идентификация не вошедшего в систему будет:

select * from DimClient where LastLoginDate IS NULL 

Для меня это выглядит намного лучше, чем запрос, который использует искусственную дату.

...