Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据仓库:未来计划的建模_Database_Data Warehouse_Modeling - Fatal编程技术网

Database 数据仓库:未来计划的建模

Database 数据仓库:未来计划的建模,database,data-warehouse,modeling,Database,Data Warehouse,Modeling,我正在创建一个DW,其中将包含有关债券和贷款等金融证券的数据。这些证券与付款计划相关联。例如,债券可以按季度支付,而抵押贷款通常按月支付(有时每两周支付一次)。付款计划在证券交易时创建,在大多数情况下,将保持不变。然而,设计将需要适应那些它确实发生变化的情况 我目前正试图对这些数据进行建模,我很难想出一个可行的设计。最常查询的字段之一是“下一个付款日期”。用户经常想知道下一次什么时候证券会付款。因此,我想让他们尽可能容易地获得每种证券的下一个付款日期和金额 此外,用户通常会运行历史查询,在这种情

我正在创建一个DW,其中将包含有关债券和贷款等金融证券的数据。这些证券与付款计划相关联。例如,债券可以按季度支付,而抵押贷款通常按月支付(有时每两周支付一次)。付款计划在证券交易时创建,在大多数情况下,将保持不变。然而,设计将需要适应那些它确实发生变化的情况

我目前正试图对这些数据进行建模,我很难想出一个可行的设计。最常查询的字段之一是“下一个付款日期”。用户经常想知道下一次什么时候证券会付款。因此,我想让他们尽可能容易地获得每种证券的下一个付款日期和金额

此外,用户通常会运行历史查询,在这种情况下,他们希望获得特定时间点的下一个付款日期和金额。例如,他们可能希望回顾2009年1月31日并查询下一个付款日期(抵押贷款通常在2009年2月)。他们想查询证券的整个付款计划也是很常见的,该计划可能包括360条记录(30年期抵押贷款x 12笔付款/年)


由于下一个付款日期和金额每月甚至每两周都会发生变化,因此这些字段似乎不太适合缓慢变化的维度。使用事实表可能更有意义,但我不确定如何建模。如果您有任何想法,我们将不胜感激。

为什么不将下一个付款日期存储为自当前付款日期起的天数

进一步澄清:


过去的每一笔付款都会有一个与日期维度相关的事实。这些事实中的每一个都将在中有一个字段
next payment,该字段将是一个整数。其想法是当前付款的日期+
中的下一次付款将是下一次付款的日期。这应该能够满足所有要求。

下一个付款日期是“无事实事实表”的一个示例。没有衡量标准,只有FK介于至少两个维度之间:安全性和时间

您可以对安全性进行非规范化,使类型1 SCD(在每次加载时覆盖)具有几个重要的“下一个付款日期”

不过,我认为最好是将一些重要的付款日期与事实一起记录下来。如果您有贷款的“当前余额”事实表,那么您有此余额的适用日期,并且您还可以将上一个和下一个付款日期与余额一起携带

对于整个付款计划,您有一个特殊的无事实的事实表,其中只包含适用日期和未来的付款日期顺序。这样,当计划更改时,您可以选择某个特定日期的付款顺序。

我将使用一个表(securityid、startdate、paymentevery、period),它还可以包括enddate、paymentpershare

周期为1天,2周,3个月,4年

因此,对于从2009年3月1日开始每周付款的security 1,日期在4月2日改为每20天一次,然后在2009年5月1日后改为每周一次,然后在2009年7月1日改为每月一次,它将包含:

1,'3/1/2009',1,2
1,'4/2/2009',20,1
1,'5/1/2009',1,2
1,'7/1/2009',1,3
要获得实际日期,我会使用如下算法:

要了解证券1从2009年3月5日至2008年5月17日的付款日期:

Find first entry before 3/5 = 3/1
Loop:
 Get next date that's after 3/5 and before the next entry (4/2 - weekly) = 3/8
 Get next date that's before next the entry (4/2) = 3/15
 Get next date that's before next the entry (4/2) = 3/22
 Get next date that's before next the entry (4/2) = 3/29
Next date >4/2 switch to next entry:
Loop:
 Get next date that's after 4/2 and before the next entry (5/1 - every 20 days) = 4/22
Next date 5/12 is AFTER next entry 5/1, switch to next entry
Loop:
 Get next date that's after 5/1 and before the lastdate (5/17 - weekly) = 5/8
 Get next date that's before the lastdate = 5/15
Next date > 5/17

2009年3月5日至2008年5月17日之间的日期为3/8、3/15、3/22、3/29、4/22、5/8、5/15

问题在于用户必须计算下一个付款日期。此外,我不确定这对历史查询的效果如何。也许你可以在这个想法上再扩展一点?不,你是对的。它不适合这个型号。我真的很想知道如何优雅地解决这个问题。很抱歉误导您。您如何确定现在的付款日期?它是您加载到dw中的数据的一部分,还是您对数据运行查询时应用的业务规则?输入证券时,付款计划由源(交易)系统设置。它基本上只是一个日期列表(通常是未来的360个月),每个日期和其他属性都有支付金额。我确实考虑过覆盖了NXTY付款字段,但我担心它不会用于历史查询。用户通常希望回顾前一个日期,看看该时间点的下一个付款日期是什么。所以我倾向于选择1型SCD,这就是为什么我认为这是事实。继续重新加载。信息适用的日期和未来付款日期。对于任何给定的适用日期,您都有所有未来的付款日期。min()是下一个付款日期。是的,有很多不真实的事实。