2014-03-13 5 views
0

계층 구조를 작성한 관리자 (상위 - 하위 관계)에 대한 자체 참조가있는 직원 차원이 있습니다.상위 - 하위 계층 집계 이슈가있는 SCD 유형 2

DimStaff 테이블 :

| SurrogateKey | BusinessKey | Employee Name | ManagerBusinessKey | StartDate | EndDate | 
|  1  |  1  | Manager1 |  NULL  | 2013-01-01 | 2099-01-01| 
|  2  |  2  | Manager2 |  NULL  | 2013-01-01 | 2099-01-01| 
|  3  |  3  | Employee1 |  1   | 2013-01-01 | 2014-01-01| 
|  4  |  3  | Employee1 |  2   | 2014-01-02 | 2099-01-01| 

사실 테이블 :

| StaffKey | DateKey | Measure1 | 
| 3  | 20130405 | 10  | 
| 4  | 20140203 | 20  | 

이제, 예를 들어 설정이 데이터와, 요구 사항이

1- 드릴 다운 할 수있다 계층 구조

Manager1 
    -> Employee1 
      -> Measure1=10 
Manager2 
    -> Employee1 
      -> Measure1=20 
한 사람이
Employee1 -> Measure1=30 

우리가 어떻게 그 일에 대해 갈 수

을 선택한 경우 10

2는 각 계층 수준에 대한 값 집계? (문제는 우리가 만들었지 만 큐브가 Employee1의 두 상태를 두 개의 별도 엔티티로 받아들이고 집계하지 않기 때문에 두 번째 요구 사항이 작동하지 않습니다.)

+0

를 얻으려면? I. e. 차원 테이블에'ManagerSurrogateKey' 열을 추가하고이를 사용하여 자체 참조를 정의하십시오. – FrankPl

답변

0

속성에 Employee Name이 정의되어있는 것 같습니다 SurrogateKey를 KeyColumns 등록 정보로 사용합니다. 나는 KeyColumns를위한 BusinessKey와 NameColumn을위한 Employee Name을 갖는 새로운 속성을 정의 할 것이다. SQL 아래

0

봅니다 계층 구조가 서로 게이트 키를 빌드 할 수 없습니다해야 대답

DECLARE @DimStaff table(
SurrogateKey INT, 
BusinessKey INT, 
EmployeeName Varchar(30), 
ManagerBusinessKey INT, 
StartDate DATE, 
EndDate DATE 
); 

Insert into @DimStaff 
    (SurrogateKey, BusinessKey, EmployeeName, ManagerBusinessKey, StartDate, EndDate) 
Values 
    (1,1,'Manager1', NULL, '2013-01-01', '2099-01-01'), 
    (2,2,'Manager2', NULL, '2013-01-01', '2099-01-01'), 
    (3,3,'Employee1', 1, '2013-01-01', '2014-01-01'), 
    (4,3,'Employee1', 2, '2014-01-02', '2099-01-01') 

DECLARE @FactTable table(
StaffKey INT, 
DateKey DATE, 
Measure1 INT 
); 

INSERT INTO @FactTable 
    (StaffKey, DateKey, Measure1) 
Values 
    (3, '2013-04-05', 10), 
    (4, '2013-02-03', 20) 

select t1.EmployeeName as Manager, t2.EmployeeName as Employee, ft.Measure1 as Measure from @DimStaff t1 
inner join @DimStaff t2 on t1.BusinessKey = t2.ManagerBusinessKey 
inner join @FactTable ft on ft.StaffKey = t2.SurrogateKey 

select t1.EmployeeName as Employee, sum (ft.Measure1) as TotalMeasure from @DimStaff t1 
inner join @FactTable ft on ft.StaffKey = t1.SurrogateKey 
group by t1.EmployeeName 
관련 문제