0

階層を構築したマネージャー (親子関係) の自己参照を持つスタッフ ディメンションがあります。

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

2- 1 人が選択されたときに各階層レベルの値を集計する

Employee1    ->   Measure1=30

どうすればそれを行うことができますか?(問題は私たちがそれを構築したことですが、キューブは Employee1 の 2 つの状態を 2 つの別個のエンティティとして受け入れ、それらを集約しないため、2 番目の要件は機能しません。)

4

2 に答える 2

0

答えを得るために以下のSQLを試してください

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
于 2014-07-21T23:50:16.290 に答える