我正在阅读由Kimball编写的"Data Warehouse Toolkit“一书,我对一个employee维度和一个HR快照事实表的示例感到困惑。
以下是书中给出的示例的屏幕截图:

我对“员工计数”、“新员工计数”、“调动计数”和“晋升计数”字段感到困惑。正如您所看到的,在HR事实表和Employee维度表之间存在关系,但是在这些计数值的情况下,事实表中将分配哪个键?我知道在月底可能会有一个‘新员工计数’,我们会在事实表中有指向那个月的month Dimension FK,但是employee维度键呢?
我希望我在这里说得很清楚,如果这是一个愚蠢的问题,我很抱歉。
谢谢。
发布于 2015-12-18 23:29:48
stigma,我相信来自Employee Transaction Dimension的最新行的代理键是要包含在事实表中的。对于该月份,Employee Transaction Dimension中可能有多个行,但在给定月份的事实表行中,只会引用最近的一行。
希望这能有所帮助。
致以最好的问候,杰西·戴森
发布于 2015-12-26 12:20:10
在SCD (类型2或类型3)中,您需要考虑两种类型的密钥:自然密钥和伪密钥。自然键是“现实世界”可以理解的标识符,在雇员维度的示例中,这可能是某种雇员Id。每次向该表中添加一个条目时,您都会得到一个新的伪键,我喜欢将其视为“原样”键。当添加记录时,它表示该维度成员的状态。
随着时间的推移,在SCD中,每个自然键都会有很多记录,每个记录都有自己的“原样”键。考虑到最近的条目,它的" as -was“键也是"as- is”键,因为它代表当前状态。
在事实表中,您应该总是期望找到“原样”键。如果您要假设事实表将始终保留“原样”键或最近的键,那么它假定您将返回并更新事实表中的历史记录,仅仅是因为维度的属性发生了更改。这对于started来说是一种资源的浪费,而且实际上是适得其反的,因为SCD的主要好处之一是能够进行" as -was vs as- is“分析,而要做到这一点,您需要保留"as-was”状态。
https://stackoverflow.com/questions/34357086
复制相似问题