sql - 数据仓库 - 具有多对多关系的缓慢变化的维度

标签 sql many-to-many ssas data-warehouse scd

举个例子,假设我有一个包含两个维度和一个度量的事实表

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/

相关文章:

ssas - 不能使引用关系起作用

sql - 加入并更新同一列sql server

c# - ASP.Net 网站外部和内部用户的不同错误页面

python - SQLAlchemy:按至少一个多对多相关表中的成员资格过滤

python - Django:在模板中访问多对多(反向)

ruby-on-rails - 访问存储在使用 #create_join_table 创建的连接表中的连接模型属性

c# - 分析服务 C#

ssas - 指定特定外键字段作为 SSAS 数据源中两个表之间的链接

java - 如何将一组允许值中的字符串参数传递给函数

mysql - 将查询 SQL 转换为 PostgreSQL