数据仓库事实表问题

Posted

技术标签:

【中文标题】数据仓库事实表问题【英文标题】:Datawarehouse Fact table question 【发布时间】:2010-09-17 20:08:48 【问题描述】:

我有一个名为 Loans 的事实表。在此表中的贷款标识符中,贷款日期和贷款金额。

在数据仓库中我不太清楚如何做的业务需求如下。未来可以调整贷款金额。假设 8 月 1 日,我们借了一笔 id 为 1 金额为 20,000 的贷款。 10月1日本次贷款调整为19000。我是否在事实表中放置了两个具有相同标识符、不同日期和金额的条目?

我是否创建一个新表(维度表),其中包含贷款金额和日期?处理这种情况的最佳方法是什么?

在生产数据库中,我们有一个总贷款金额表,然后是一个用于贷款金额的表格,因此贷款金额的组合等于总贷款金额。

【问题讨论】:

【参考方案1】:

我始终建议将此类事实表视为完全可汇总的,对任何提升、付款、利息等进行有效的移动交易 - 如果您这样做,您可以绝对灵活地随着时间的推移进行报告,按交易类型等进行过滤- 在同一事实表中存储多个版本行或更新快照表,当您合并跨维度的不同指标时,可能还有其他报告选项,但在基本级别,通常逐行逐项列出这些事件。

M

【讨论】:

【参考方案2】:

将 LoanID 视为退化维度并单独输入更正。 您还可以使用交易类型维度来描述:贷款、付款、更正等。

DateKey CustomerKey TransacionTypeKey LoanID    Amount
---------------------------------------------------------
20100801    175          1               1     20000.00
20101001    175          2               1    - 1000.00

按客户,按贷款显示所有贷款

select
      CustomerKey
    , LoanID
    , sum(Amount) as Amt
from factLoan
group by CustomerKey, LoanID
order by CustomerKey, LoanID ;

【讨论】:

【参考方案3】:

这称为渐变维度,它取决于业务需求、天气与否,您是否希望跟踪该行中发生的更改。 通常有 3 种类型的渐变维度。

在类型 1 渐变维度中,新信息只是简单地覆盖了原始信息。换句话说,不保留任何历史记录。

在类型 2 渐变维度中,将新记录添加到表中以表示新信息。因此,原始记录和新记录都将存在。新记录有自己的主键。

在类型 3 渐变维度中,将有两列表示感兴趣的特定属性,一列表示原始值,一列表示当前值。还会有一列指示当前值何时变为活动状态。

您可以参考 kimball 手册,了解有关渐变尺寸的更多信息。

【讨论】:

【参考方案4】:

您是否真的需要多个版本取决于要求。您是否只需要按原样报告贷款金额,还是还需要按原样了解情况?如果您不确定,那么保留历史记录(多个版本)可能是有意义的。我的假设是保留历史记录。

我建议为每个新版本和日期列创建新行以表示版本适用的日期。

【讨论】:

我需要知道贷款金额的原样和原样。但我还需要能够说明是否有一笔贷款有两次贷款金额调整,即 1 笔贷款用于计数目的。因此,我正在考虑为贷款制作一个事实表,并为逐项贷款金额制作一个子表。这有意义吗?【参考方案5】:

正如您所说,贷款是事实。贷款可以调整,即贷款金额可以增加或减少。一般有两种处理方法:

    在事实中插入一个带有增量的新行。在这现在有两行贷款。这意味着 Loan 事实的主键不能单独是 Loan ID。它具有(逻辑上,不一定是物理上)加载 ID 和日期,或贷款 ID 和条目号(日期作为另一个属性)。结果会如你所说。我会将 TransactionTypeKey 更改为 TransactionTypeCode,这样命名更正确。

    使用新余额更新事实。在这种情况下,最终结果将被存储,但更改会丢失。主键是LoanID;日期是一个属性。

大多数其他应用程序,例如订单处理,将使用第一个解决方案,这是我认为您需要的。解决方案 1 的优点还在于它是完全可加的。

关于 Saad El Oualji 的评论,这根本不是 SCD 案例,而是详细的事实设计。他对 SCD 的描述是正确的,但 SCD 描述的是维度变化,而不是事实变化。

【讨论】:

以上是关于数据仓库事实表问题的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库之三大事实表

数据仓库 - 多维模型 - 事实表小于维度表

事实表的数据仓库设计

数据仓库事实表外键生成

数据仓库星型模式事实表?你怎么知道里面有啥

无事实事实表的数据仓库维度设计