2017-10-16 65 views
0

我有一个表至极没有它的维度表,例如,下表中我只有描述性的项目(功能),而不是维度表的键:创建SQL Server中的尺寸

Id Employee Function 
1 Chris  Bartender 
2 Millena Waiter 
3 Jessica Firefighter 
4 Paul  Waiter 

我没有DIM_Function,换句话说,我想创建一个具有这些值的维度表,并且随着表的增长和新记录填充到我的表中,另一个DIM_Function必须具有这些值。我已经听说了代用键,但不知道如何使用它。

最后,创建事实表,“功能”列必须将我创建的ID存储到DIM_Funcion中。

谢谢。

+0

我完全不明白在这里试图完成什么。 –

+0

我没有维度表,所以我想创建一个 –

+0

那么是什么阻止了你? –

回答

0

这样做的基本思想是,您将创建一个带ID的唯一值的维度表(ID列将是主键和标识列),然后使用该ID更新您的事实表。然后,无论何时将更多数据加载到事实表中,首先都要从维度表中检索每条记录的ID。如果找不到,您将为其插入一条新记录,然后检索新的ID。这样做的一个方法是通过一个存储过程 - 与原始数据已被写入到一个临时表 - 并会看起来像这样(用你的“功能”为例):

UPDATE Staging 
SET S.FunctionID = D.FunctionID 
FROM 
    Staging S 
    JOIN Dim_Function D ON S.[Function] = D.[Function] 

IF EXISTS (SELECT * FROM Staging WHERE FunctionID IS NULL) 
BEGIN 

    INSERT INTO Dim_Function ([Function]) 

    SELECT DISTINCT [Function] 
    FROM Staging 
    WHERE FunctionID IS NULL 
    ; 

    UPDATE Staging 
    SET S.FunctionID = D.FunctionID 
    FROM 
     Staging S 
     JOIN Dim_Function D ON S.[Function]= D.[Function] 
    WHERE S.FunctionID IS NULL 

END 

还可以再插入'FunctionID'而不是实际的'Function'值(从登台表)到事实表中。