database – 数据仓库中的时间点快照

我试图在确切的时间点重新创建客户的状态.例如,每个客户都有许多可以随时改变的属性(例如,风险评分,账单到目前为止,客户满意度).

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

我的第一个想法是创建一个Type-2缓慢变化的维度,其中包含有效和到期日期/时间戳,并使用半开连接time_effective< = date_of_application< time_expired. 但是,大多数这些属性都是行为维度,需要使用事实表中的历史数据进行复杂的计算.此外,计算值也不能使用范围(0- $500,$500- $750等)进行分组.跟踪每个维度的所有这些属性会导致它爆炸.注意:某些值每天都会更改,其他值会在任意时间点发生变化. 我理想的数据提取如下:
>信用申请的ID#
>提交时间
>提交时属性1的值
>属性2的价值……
>属性N的值

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

有什么建议来处理这个?我看到几种方法:

>允许维度爆炸
>创建具有一个或多个属性的单独表,并分别查询具有我感兴趣的属性的特定表
>在信用申请事实表中附加一列,其中包含我感兴趣的所有属性的“快照”.

其中一些问题在Kimball的ETL工具包书(第190-192页)和他的数据仓库工具包书(187-191)中进行了讨论.在第154-157页,讨论了“快速变化的怪物尺寸”,这似乎非常相关.不过,我在实施这些建议方面遇到了麻烦.

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

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

然后,您可以创建以下事实表应用程序事实:

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

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

点赞