Datawarehouse事实表问题

时间:2010-09-17 20:08:49

标签: database-design data-warehouse

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

我不太清楚在数据仓库中如何做的业务要求如下。贷款金额可以在将来调整。因此,让我们说8月1日我们贷款的ID为1,金额为20,000。 10月1日这笔贷款调整为19,000。我是否在事实表中放入了两个具有相同标识符和不同日期和金额的条目?

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

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

5 个答案:

答案 0 :(得分:2)

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

中号

答案 1 :(得分:1)

将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 ;

答案 2 :(得分:1)

这称为缓慢变化的维度,它取决于业务需求,天气与否,您想要跟踪该行中发生的变化。 通常有3种类型的缓慢变化的维度。

在Type 1 Slowly Changing Dimension中,新信息只会覆盖原始信息。换句话说,没有历史。

在Type 2 Slowly Changing Dimension中,会向表中添加一条新记录以表示新信息。因此,原始记录和新记录都将存在。新记录有自己的主键。

在Type 3 Slowly Changing Dimension中,将有两列表示感兴趣的特定属性,一列表示原始值,另一列表示当前值。还会有一列指示当前值何时变为活动状态。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

正如你所说,贷款是一个事实。贷款可以调整,这意味着贷款金额可以增加或减少。有两种方法可以解决这个问题:

  1. 将delta添加到事实中。在这里,贷款现在有两行。这意味着贷款事实的主键不能仅仅是贷款ID。它(逻辑上,不一定是物理上)是加载ID和日期,或贷款ID和条目号(日期作为另一个属性)。结果就像你说的那样。我会将TransactionTypeKey更改为TransactionTypeCode,这更正确命名。

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

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

    至于Saad El Oualji的评论,这不是SCD的情况,而是详细的事实设计。他对SCD的描述是正确的,但SCD描述了尺寸变化,而不是事实变化。