举个例子,假设我有一个包含两个维度和一个度量的事实表
FactMoney 表
<小时/>ProjectKey int
PersonKey 整数
现金金额
<小时/>两个维度的定义如下:
DimProject(0 型维度 - 即静态)
<小时/>ProjectKey int
项目名称 varchar(50)
<小时/>DimPerson(2 型缓慢变化的维度)
<小时/>PersonKey 整数
PersonNaturalKey int
人名 varchar(50)
有效开始日期日期时间
有效结束日期日期时间
是当前位
<小时/>到目前为止非常简单。现在我将介绍人员类别的概念。
暗淡类别
<小时/>CategoryKey int
类别名称 varchar(50)
<小时/>并在 DimPerson 和 DimCategory 之间建立 M2M 关系
BridgePerson类别
<小时/>PersonKey 整数
CategoryKey int
<小时/>所以 - 人们可以有 1..n 个类别。
我的问题是 - 由于人是一个缓慢变化的维度,当一个人的名字发生变化时,我们添加一个新的人行并更新我们的有效日期和当前标志,没什么大不了的。
但是我们如何处理此人的类别呢?每次弹出新的个人版本时,我们是否需要向桥接表添加更多行?
作为推论,如果一个人的类别发生变化,是否意味着我们需要在人员表中创建一个新行?
最佳答案
关于您的主要问题:我想说您需要在类别表中添加类别(可能是从老人行复制它们)。这样你就可以继续对新的(改变的)状态下的人进行分类。
关于类别的更改:我不想添加人员行,而是在类别表中添加初始有效期和到期日期。这样每个类别都可以独立更改。但您需要小心不要进行时间点查询,因为您可能会过多计算类别
关于sql - 数据仓库 - 具有多对多关系的缓慢变化的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19719110/