2009-07-08 16 views
2

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

私は現在このデータをモデル化しようとしていますが、実用的な設計を考え出すのが難しいです。最も一般的に照会されるフィールドの1つが「次の支払い日」です。ユーザーは、セキュリティが次に支払う時期を知りたいことがあります。したがって、各証券の次の支払い日と金額を得ることはできるだけ簡単にしたいと考えています。

また、ユーザーは履歴照会を実行することが多く、特定の時点における次の支払い日と金額が必要な場合があります。たとえば、彼らは1/31/09を振り返り、次の支払い日(通常は抵当権のために2009年2月にある)を照会することができます。また、360レコード(30年住宅ローンx 12ペイメント/年)で構成されている可能性がある、セキュリティ全体の支払いスケジュールを照会することも一般的です。

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

答えて

0

なぜ、次の支払い日を現在の支払い日からの日数として保存しないのですか?

さらに明確化:

いくつかの日付ディメンションにリンクされているすべての過去の支払いの事実があるでしょう。これらのファクトのそれぞれは、整数のフィールドnext payment inを持ちます。アイデアは、現在の支払いの日付+ next payment inは、次の支払事実の日付になるということです。このすべてを満たすことができる必要があります。

+0

ユーザーは、次の支払い日。また、私はこれが歴史的な質問のためにどれくらいうまくいくのかよくわかりません。あなたはこのアイデアをもう少し拡張することができますか? –

+0

いいえ、そうです。このモデルに適合しません。私はこれがどのようにエレガントに解決できるのか本当に興味があります。あなたを誤解して申し訳ありません。 –

+0

お支払い期日はいつ決定されますか?それはdwにロードするデータの一部ですか、それともデータに対してクエリを実行するときに適用されるビジネスルールですか? – nos

1

次の支払日は、「事実がないファクトテーブル」の例です。措置はありません。セキュリティと時間の少なくとも2つの次元の間にあるFKだけです。

セキュリティを非正規化して、重要な「次の支払日」をいくつか持つタイプ1のSCD(各負荷で上書き)を行うことができます。

しかし、事実と一緒にいくつかの重要な支払い日を運ぶことがおそらくより良いと思います。ローンの「現在の残高」のファクトテーブルがある場合は、この残高に適用される日付があり、残高と共に前の納入日付と次の払い日付を持ち歩くことができます。

支払いスケジュール全体については、適用可能な日付と将来の支払い予定日を持つ特別なファクトーフリーのファクト表があります。こうすることで、スケジュールが変更されたときに、特定の日付の支払い順序を選択することができます。

+0

私は、上書きされたnext_paymentフィールドを持つことを検討しましたが、私の懸念は、履歴クエリでは機能しないことです。ユーザーは、以前の日付を振り返り、その時点の次の支払日が何であるかを確認することがよくあります。だから私はタイプ1のSCDを持っていることに賛成していました。 –

+0

だから私はそれが事実であることを示唆している。ちょうどそれを再読み込みしてください。情報が適用される日付および将来の支払い日。該当する任意の日付については、将来のすべての支払日があります。 min()は次の支払い日です。はい、それは事実のない事実です。 –

1

私はテーブル(securityid、STARTDATE、paymentevery、期間)、それはまた、終了日を含めることができを使用するには、

期間は日のために1になり、2週間、3ヶ月、4年間のpaymentpershare。

したがって、2009年3月1日に週に1回の支払いを開始した場合、日付は4/2で20日ごと、5/1/2009の後に毎週、7/1/2009で毎月に変更されます、それは含まれています:2009年3月5日から5月17日に安全保障上の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 

を実際の日付を取得するには、私はこのようなアルゴリズムを使用したいです2008:

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/03/05から2008/05/17は3/8,3/15,3/22,3/29,4/22,5/8,5/15になります。