在SQL Server中创建维度

时间:2017-10-16 13:41:20

标签: sql sql-server

我有一个没有维度表的表,例如,在下表中我只有描述性项目(Function),但不是维度表的键:

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

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

最后,创建一个事实表,“Function”列必须将我创建的ID存储到DIM_Funcion。

感谢。

1 个答案:

答案 0 :(得分:0)

这样做的基本思想是,您将使用ID创建唯一值的维度表(ID列将是主键和标识列),然后使用该ID更新事实表。然后,每当您将更多数据加载到事实表中时,首先尝试从维度表中检索每条记录的ID。如果找不到,则为其插入新记录,然后检索新ID。一种方法是通过存储过程 - 将原始数据写入临时表 - 看起来像这样(使用'Function'的例子):

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”值插入事实表(来自登台表)。