【问题标题】:Mini/Junk Dimension Advice迷你/垃圾尺寸建议
【发布时间】:2012-02-26 12:13:31
【问题描述】:

我有一个客户维度和一个跟踪与客户的会话的事实表,它们具有以下列:

代码:

[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 中创建一个外键 (FK_AgeGroupKey) 到 DimAgeGroup维度。

现在我认为最好用 *(上图)跟踪所有列。这些可能(尚未证明)与会话具有高度相关性。通读 DWH Toolkit 似乎是一个 Mini Dimension 来容纳所有 * 列以及 Age Group 最适合,所以我将以下结构放在一起:

代码:

[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 之类的东西?

抱歉,这篇文章很长,但希望我已经提供了足够的信息提前谢谢!

【问题讨论】:

    标签: sql-server data-modeling data-warehouse dimensions


    【解决方案1】:

    我会在您的客户维度中添加一个字段,以表明用户从未登录过。类似于:

    select * form DimClient where HasUserLoggedIn = 'NO';
    

    它非常易于阅读,您无需向业务用户介绍空值。由于 null != null 的复杂性,除了数字事实值之外,传统上 null 在数据仓库中是不好的。

    【讨论】:

      【解决方案2】:

      是的,上述解决方案应该可以正常工作。它支持您跟踪随时间变化的需求,否则您可以直接在 DimClient 中包含 DimDemographic 链接。 关于日期问题,我相信你应该使用NULL,这意味着没有价值,因为没有登录。此外,识别未登录将是:

      select * from DimClient where LastLoginDate IS NULL 
      

      对我来说,这比使用人工日期的查询要好得多。

      【讨论】:

      • 谢谢先生。卡夫我认为在 DimClient 中滚动所有人口统计数据是有道理的,但我想知道我应该如何处理 AgeGroup。我想知道会话时客户的年龄组。我想我必须在 ETL 中引入逻辑,以便查看一年后是否发生了新 Session,如果是,则更新 DimClient 中的 AgeGroup?
      • 这里有两种方法,第一种假设ETL过程只向前运行,即您不需要重建一年前的AgeGroup。 ETL 每天都会运行并构建 agg 数据。在此方法中,您可以在 DimClient 中对其进行管理。第二种方法和我的偏好是使用您使用过的表结构,它允许您随时重建 DWH,因为数据将始终在源数据库中正确分类。有意义吗?
      • 先生。 kav,有道理,我想我会继续使用垃圾/迷你维度,但不会预加载所有数据,只加载明显的独特组合,否则我将加载数百万 也许 不相关的数据。我确实知道,如果相关性很低,我不应该在垃圾/迷你维度中加载数据,但我的想法是查看是否存在任何相关性。再次感谢!
      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2011-04-21
      • 2012-01-31
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多