2009-07-08 3 views
2

채권 및 대출과 같은 금융 증권 데이터가 포함될 DW를 작성하고 있습니다. 이러한 유가 증권은 지급 일정과 관련이 있습니다. 예를 들어, 채권은 분기별로 지불 할 수 있지만 모기지는 보통 월간 (때때로 격주로) 지불합니다. 지불 일정은 증권이 거래 될 때 만들어지며 대부분의 경우 변경되지 않습니다. 그러나 디자인은 변경되는 경우를 수용해야합니다.데이터웨어 하우스 : 향후 일정 모델링

현재이 데이터를 모델링하려고하고 있으며 실행 가능한 설계가 제대로 작동하지 않습니다. 가장 자주 묻는 필드 중 하나는 "다음 지급일"입니다. 사용자는 보안이 다음에 언제 지불되는지 종종 알고 싶어합니다. 따라서 나는 각 보안에 대해 다음 지급일과 액수를 얻을 수 있도록 가능한 한 쉽게 만들고 싶다.

또한 사용자는 종종 특정 시점의 다음 지불일 및 금액을 원할 경우 기록 조회를 실행합니다. 예를 들어, 그들은 1/31/09를 돌아보고 다음 지불 일을 조회하고자 할 수 있습니다 (보통 모기지에 대해 2009 년 2 월에 있음). 또한 360 건 (30 년 모기지 x 12 회 지불/년)으로 구성되는 보안 지불 계획 전체를 쿼리하는 것이 일반적입니다.

다음 지급일과 금액이 매월 또는 격주로 변경 될 것이므로이 필드는 느리게 변하는 차원에 적합하지 않은 것으로 보입니다. 사실 팩트 테이블을 사용하는 것이 더 합리적 일지 모르지만 모델을 만드는 방법을 잘 모르겠습니다. 어떤 아이디어라도 대단히 감사하겠습니다.

답변

0

왜 다음 지급일을 현재 지급일로부터의 일수로 저장하지 않습니까?

또한 설명 :

일부 날짜 차원에 연결된 모든 과거 지불 사실이 될 것이다. 이 사실들 각각은 정수가 될 next payment in 필드를 갖습니다. 아이디어는 현재 지불 날짜 + next payment in이 다음 지불 사실의 날짜가 될 것이라는 것입니다. 이 으로 모든 것을 처리 할 수 ​​있어야합니다.

+0

사용자는 다음 지불 날짜. 또한, 이것이 역사적인 질문에 얼마나 효과가 있을지 잘 모르겠습니다. 어쩌면이 아이디어에 대해 조금 더 확장 할 수 있을까요? –

+0

아니, 네 말이 맞아. 이 모델에 맞지 않습니다. 나는 이것이 이것이 어떻게 우아하게 해결 될 수 있는지에 대해 정말로 관심을 가질 것이다. 죄송합니다. –

+0

지불 기한은 언제 결정됩니까? dw에로드하는 데이터의 일부입니까, 아니면 데이터에 대해 쿼리를 실행할 때 적용되는 비즈니스 규칙입니까? – nos

1

다음 지급일은 "사실없는 사실 테이블"의 한 예입니다. 아무런 조치가 없습니다. FK는 보안과 시간이라는 최소한 두 가지 차원 사이에 있습니다.

중요한 "다음 지불 일자"가있는 유형 -1 SCD (각로드로 겹쳐 쓰임)를 갖도록 보안을 비정규화할 수 있습니다.

그러나 사실과 함께 몇 가지 중요한 지불 일을 수행하는 것이 더 바람직하다고 생각합니다. 대출에 대한 "현재 잔액"사실 테이블이있는 경우이 잔액에 대한 해당 날짜가 있으며 잔액과 함께 이전 및 다음 지불 날짜도 지닙니다.

전체 지불 일정의 경우 적용 가능한 날짜와 향후 지불 순서가있는 특별한 사실없는 사실 테이블이 있습니다. 이렇게하면 일정이 변경되면 특정 날짜에 따라 지불 순서를 선택할 수 있습니다.

+0

덮어 쓰는 next_payment 필드를 고려해 보았지만 내 기록은 내역 쿼리에서 작동하지 않는다는 점입니다. 사용자는 종종 이전 날짜를 되돌아보고 그 시점의 다음 지급일을 확인하기를 원합니다. 그래서 저는 타입 1 SCD에 기대어있었습니다. –

+0

그것이 사실이라고 제안하는 이유입니다. 그냥 계속 다시로드하십시오. 해당 정보가 적용되는 날짜 및 향후 지불 날짜. 해당 날짜에 대해 미래의 모든 지불 날짜가 있습니다. min()은 다음 지급일입니다. 그렇습니다. 사실이 아닙니다. –

1

나는 테이블 (securityid, STARTDATE, paymentevery, 기간) 그것은 또한 ENDDATE을 포함 할 수 을 사용은

기간은 일 (1) 것, 2 주, 3 개월, 위해 4 년 동안 paymentpershare.

3/1/2009에 매주 요금을 지불 한 보안 1의 경우, 날짜가 4/2의 20 일마다, 5/1/2009 이후의 주간, 7/1/2009의 월별로 변경되었습니다. 그것이 포함됩니다 :

1,'3/1/2009',1,2 
1,'4/2/2009',20,1 
1,'5/1/2009',1,2 
1,'7/1/2009',1,3 

실제 날짜를 얻으려면, 나는이 같은 알고리즘을 사용하십시오 :

에 2009년 3월 5일에서 보안 1에 지불 날짜를 알고 5/1017/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 년 3 월 5 일 사이입니다 2008 년 5 월 17 일에 3/8,3/15,3/22,3/29,4/22,5/8,5/15가됩니다.