数据仓库中的时间点快照

时间:2013-04-15 16:13:25

标签: database database-design data-warehouse etl

我正试图在确切的时间点重新创建客户的状态。例如,每个客户都有许多可随时更改的属性(例如,风险评分,最新账单,客户满意度)。

每次客户提交信用申请时,我都希望在提交时看到所有这些特征的价值。随后,我想使用这些值来开发预测模型。

我的第一个想法是创建一个Type-2缓慢变化的维度,其中包含有效和到期日期/时间戳,并使用半开连接time_effective< = date_of_application< time_expired。

但是,大多数这些属性都是行为维度,需要使用事实表中的历史数据进行复杂的计算。此外,计算值也不能使用范围(0- $ 500,$ 500- $ 750等)进行分组。跟踪每个维度的所有这些属性会导致它爆炸。注意:某些值会每天更改,其他值会在任意时间点发生变化。

我理想的数据提取如下:

  • 信用申请的ID#
  • 提交时间
  • 提交时属性1的值
  • 属性2的价值......
  • 属性N的值

除了信用申请外,还有其他事实表,我希望找到在该事件发生时有效的特征。

处理此事的建议是什么?我看到了几种方法:

  1. 允许维度爆炸
  2. 创建具有一个或多个属性的单独表,并分别查询具有我感兴趣的属性的特定表
  3. 在信用申请表事实表中附加一列,其中包含我感兴趣的所有属性的“快照”。
  4. 其中一些问题在Kimball的ETL工具包书(第190-192页)及其数据仓库工具包(187-191)中进行了讨论。在第154-157页,讨论了“快速变化的怪物尺寸”,这似乎非常相关。不过,我在实施这些建议方面遇到了麻烦。

1 个答案:

答案 0 :(得分:2)

我会创建单独的应用程序事实表,其中包含相关表和相关记录的键。让我们假设您有以下维度和事实表:

  • (D)申请
  • (D)申请人(或客户)
  • (D)产品
  • (D)时间
  • (D)monthly_scoring_fact(每月行为评分)
  • (F)monthly_satisfaction_fact(月度满意度调查)
  • (F)满意度评估事实(临时满意度评估)

然后您可以创建以下事实表Application Fact:

  • application_key - 指向应用程序维度
  • applicant_key - 指向申请人维度
  • product_key - 指向产品维度
  • time_key - 指向时间维度
  • monthly_scoring_fact_key - 指向每月得分的最后结果
  • monthly_satisfaction_fact_key - 指向上次满意度数据
  • satisfaction_evaluation_fact_key - 指向最后的临时评估数据

使用此方法,您可以获得时间一致的数据,并将应用程序维度保留在SCD0中(仅限更正)。