我有一个没有维度表的表,例如,在下表中我只有描述性项目(Function),但不是维度表的键:
Id Employee Function
1 Chris Bartender
2 Millena Waiter
3 Jessica Firefighter
4 Paul Waiter
我没有DIM_Function,换句话说,我想创建一个具有这些值的维度表,随着表的增长和新记录填充在我的表中,另一个DIM_Function必须具有这些值。我已经听说过代理密钥,但不知道如何使用它。
最后,创建一个事实表,“Function”列必须将我创建的ID存储到DIM_Funcion。
感谢。
答案 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”值插入事实表(来自登台表)。