2017-03-17 6 views
0

사실 테이블과 직원 "계층"테이블이 있습니다. 천천히 변화하는 차원 테이블 - SQL Server - 천천히 차원 변경 조인

그래서 사실 테이블은
employee_id call date 
Mark   1  1-1-2017 
Mark   2  1-2-2017 
John   3  1-2-2017 

그런 다음 '계층 수준'에 대한 데이터 구조가 존재해야 할까 것 같습니다. 저는 이것을 간단하게 유지하고 싶습니다.이 테이블의 구조를 무엇이든 변경할 수 있지만, 지금은 그렇게 만들었습니다.

employee_id tier1_start ... tier2_start ... tier3_start 
Mark   5-1-2016 
John   6-1-2016   8-1-2016 
Lucy   6-1-2016      10-1-2016 

두 가지 중요한 메모. 이 테이블 정렬은 프로모션이 한 번만 발생한다는 가정하에 작동합니다. 일명 데모 및 재발 방지가 발생하지 않습니다. 또한 1 단계에서 3 단계로 점프 할 수도 있습니다.

사실 테이블에 '계층'차원 (비정규 화)과 관련하여 가능한 최상의 쿼리를 제공하려고했습니다.

예를 들어 2 월의 Tier 1 측정 항목 또는 2 월의 Tier 2 측정 항목을보고 싶습니다. 분명히 역사적으로 변화하는 계층 차원이 연결되어야합니다.

지금 당장 생각하면 가장 불편한 방법은 단순히 employee_id를 사용하여 계층 테이블의 사실 테이블을 조인하는 것입니다. 더 웃기시 case 문을하고 다음

:

case 
when isnull(tier3_start,'0') < date then 'T3' 
when isnull(tier2_start, '0') < date then 'T2' 
when isnull(tier1_start, '0') < date then 'T1' 
else 'other' 
end as tier_level 

예,이 매우 서투른 볼 수 있습니다. 어쩌면이 구조를 조금 바꿔야한다고 생각합니다.

+0

3 개 이상의 계층이 있습니까? 유형 2 SCD (열이 아닌 행이 추가 된 곳) https://en.wikipedia.org/wiki/Slowly_changing_dimension에서 더 잘 서비스 할 수있는 유형 3 SCD에 대해 설명했습니다. 이렇게하면 변경되는 속성을 캡처 할 수 있습니다. –

+0

사실 데이터를 차원 데이터와 실제로 결합하기 위해 단순화되고 일관된 실제 쿼리에 대한 질문에 대답하지 않습니다. 예를 들어 10 월 3 일 또는 언제든지 전화가 걸렸습니다. 이 계층은 어떤 계층에 속합니까? 그리고 유형 3은 유효하지 않습니다. 실제로 유형 유효 기간이 소멸됩니다. 이것은 많은 SCD 토론에서의 문제입니다. 모든 사람들이 차원 테이블을 만드는 것에 대해 이야기합니다. 아무도 실제로 REAL 리프팅을 수행하는 쿼리에 대해 말하지 않습니다! 내가 실제로 가지고있는 것은 타입 2 SCD 테이블이다. 쓰기에 가장 효율적입니다. 유형 6으로 변환해야합니다. 사실 테이블 조인에 가장 효율적입니다. – user45867

+0

차원이 상태 변경 당 행을 추가하지 않으므로 유형 2가 아닙니다. Dw는 ETL을 복잡하게 만들어 질의를 단순화합니다. 이 모든 것을 이미 알고있는 것처럼 보입니다. 나는 그 질문이 무엇인지 여기 정말로 확신하지 못한다. –

답변

0

계층 테이블을 두 개로 나누는 것이 좋습니다.

TierID Tier 
------------------ 
1   Tier 1 
2   Tier 2 
3   Tier 3 

과 EmployeeTier 테이블 :

ID EmpID TierID TierDate 
--------------------------------------- 
1  1  1   Jun 1, 2016 
2  1  3   Oct 2, 2016 
3  2  1   Jul 10, 2016 
4  2  2   Nov 11, 2016 

지금 당신은 당신이 찾고있는 TierID에 EmployeeTier 테이블 및 필터를 조회 할 수 있습니다

그래서 이런 계층 테이블이 있습니다.

이렇게하면 여러 번 승격/강등 할 수 있습니다. 직원별로 필터링하고 날짜순으로 정렬하여 현재 계층을 찾습니다.

+0

이것은 괜찮지 만 쿼리를 단순화하는 근본적인 문제에 대해서는 대답하지 않습니다. 팩트 테이블을 채용 테이블에 어떻게 가입시킬 수 있습니까? (지금에 대한 설명과 함께 차원 테이블을 잊어 버려). 당신은 어떻게 참여할 것입니까? 여러 개의 결과를 얻으므로 사실 날짜> 계층을 단순히 가질 수는 없습니다! – user45867

+0

검색어로 무엇을하고 싶습니까? 특정 기간 동안 티어 당 호출 수를 얻는 것과 같은 것? – PhillipXT