Database design 数据仓库事实表问题

Database design 数据仓库事实表问题,database-design,data-warehouse,Database Design,Data Warehouse,我有一个叫做贷款的事实表。在该表中,贷款标识符中包含贷款发放日期和贷款金额 我不太知道如何在数据仓库中实现的业务需求如下。贷款金额可以在将来进行调整。比如说8月1日,我们发放了一笔id为1、金额为20000的贷款。10月1日此贷款调整为19000。我是否在事实表中放置了两个具有相同标识符、不同日期和金额的条目 我是否创建一个包含贷款金额和日期的新表(维度表)?实现此场景的最佳方法是什么 在生产数据库中,我们有一个关于贷款总额的表,然后是一个关于贷款总额的表,因此贷款总额的组合等于贷款总额。您是否

我有一个叫做贷款的事实表。在该表中,贷款标识符中包含贷款发放日期和贷款金额

我不太知道如何在数据仓库中实现的业务需求如下。贷款金额可以在将来进行调整。比如说8月1日,我们发放了一笔id为1、金额为20000的贷款。10月1日此贷款调整为19000。我是否在事实表中放置了两个具有相同标识符、不同日期和金额的条目

我是否创建一个包含贷款金额和日期的新表(维度表)?实现此场景的最佳方法是什么


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

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


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

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

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


M

这称为缓慢变化的维度,它取决于业务需求、天气状况,您是否希望跟踪该行中发生的变化。 通常有3种类型的缓慢变化的尺寸标注

在类型1缓慢变化的维度中,新信息只是覆盖原始信息。换言之,没有保存任何历史

在类型2缓慢变化维度中,一条新记录被添加到表中以表示新信息。因此,原始记录和新记录都将出现。新记录有自己的主键

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


有关缓慢改变尺寸的更多信息,请参阅kimball手册。

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

  • 插入一个新行,并将增量添加到事实。在这一行中,现在有两行贷款。这意味着贷款事实的主键不能仅为贷款ID。它(逻辑上,不一定是物理上)是Load ID和Date,或Loan ID和Entry Number(日期作为另一个属性)。结果将如你所说。我会将TransactionTypeKey更改为TransactionTypeCode,这是更正确的命名

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

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


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

    我需要知道贷款金额的现状和过去。但我还需要能够说,如果有一笔贷款有两次贷款金额调整,那就是1笔贷款,用于计算目的。所以我想为贷款做一个事实表,并为逐项列出的贷款金额做一个子表。这有意义吗?