2

債券やローンなどの金融証券に関するデータを含む DW を作成しています。これらの有価証券は、支払スケジュールに関連付けられています。たとえば、債券は四半期ごとに支払うことができますが、住宅ローンは通常毎月 (場合によっては隔週) 支払うことになります。支払いスケジュールは証券の取引時に作成され、ほとんどの場合、変更されません。ただし、設計は変更される場合に対応する必要があります。

現在、このデータをモデル化しようとしていますが、実行可能な設計を思いつくのに苦労しています。最も一般的に照会されるフィールドの 1 つは、「次の支払い日」です。ユーザーは、証券が次に支払う時期を知りたいことがよくあります。したがって、証券ごとに次の支払い日と金額をできるだけ簡単に取得できるようにしたいと考えています。

また、ユーザーは履歴クエリを実行することが多く、その場合、特定の時点での次の支払い日と金額が必要になります。たとえば、2009 年 1 月 31 日を振り返り、次の支払い日 (住宅ローンの場合、通常は 2009 年 2 月) を照会したい場合があります。また、360 件のレコード (30 年間の住宅ローン x 12 回の支払い/年) で構成される証券の支払いスケジュール全体をクエリすることもよくあります。

次回の支払日と金額は毎月または隔週で変化するため、これらのフィールドはゆっくりと変化するディメンションにはうまく適合しないようです。おそらくファクト テーブルを使用する方が理にかなっていますが、それをモデル化する方法がわかりません。どんなアイデアでも大歓迎です。

4

3 に答える 3

1

次の支払い日は「ファクトフリーファクトテーブル」の一例です。対策はありません。セキュリティと時間という少なくとも2つの側面の間にあるFKだけです。

セキュリティを非正規化して、いくつかの重要な「次の支払い日」を持つタイプ1 SCD(ロードごとに上書きされる)を作成できます。

ただし、事実と一緒にいくつかの重要な支払い日を記載する方がおそらく良いと思います。ローンの「現在の残高」ファクトテーブルがある場合は、この残高に適用可能な日付があり、前と次の支払い日を残高と一緒に運ぶこともできます。

支払いスケジュール全体について、該当する日付と将来の支払い日の順序が記載された、事実のない特別なファクトテーブルがあります。そうすれば、スケジュールが変更されたときに、特定の日付の支払い順序を選択できます。

于 2009-07-08T17:05:24.773 に答える
1

テーブル (securityid,startdate, paymentevery, period) を使用し、enddate、paymentpershare を含めることもできます

period は、日は 1、週は 2、月は 3、年は 4 になります。

したがって、2009 年 3 月 1 日に週払いを開始した証券 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 になります。

于 2009-07-18T20:55:21.300 に答える
0

今回の支払い日からの日数として、次の支払い日を保存してみませんか?

さらなる解明:

何らかの日付ディメンションにリンクされた過去のすべての支払いの事実があります。これらの各ファクトにはnext payment in、整数になるフィールドがあります。アイデアは、現在の支払いの日付 +next payment inが次の支払いファクトの日付になるということです。これですべてに対応できるはずです。

于 2009-07-08T16:40:32.670 に答える