首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次加入日期维?-Kimball关于数据仓库和维度建模的书

多次加入日期维?-Kimball关于数据仓库和维度建模的书
EN

Stack Overflow用户
提问于 2021-10-16 13:18:53
回答 2查看 576关注 0票数 3

我正在阅读拉尔夫·金博尔的“数据仓库和维度建模”一书,在第六章中,我读到了关于维度角色扮演的部分。

有时会发现与每个事务相关联的其他日期,例如订单的请求发货日期。每个日期都应该是事实表中的外键.但是,不能简单地将这两个外键连接到同一日期维度表。SQL会将这种双向同时连接解释为要求两个日期相同,这不太可能。

我不太明白最后两句话的意思。这是否意味着如果事实表中的两个日期具有不同的值,则不能多次加入日期维度?为什么?

EN

回答 2

Stack Overflow用户

发布于 2021-10-16 13:49:06

它不是很好的表达,但它所表示的是,如果要从事实表中的不同FKs多次加入日期维度,则需要将日期维度化名。

对于任何SQL语句,如果有两个表被多次连接在一起,这是正确的,它并不是特定于维度建模的。

票数 3
EN

Stack Overflow用户

发布于 2021-10-16 18:35:55

这里隐藏的信息是,您需要多个连接,每个维度角色都需要一个连接。

假设您有一个包含登录日期entry_d和预订日期booking_d的事实表

这将是错误的,并且可能是文本中的意思。

代码语言:javascript
复制
select * from fact
join time_dim tim
on fact.entry_d = tim.date_d and
   fact.book_d = tim.date_d;

这是,使用两个独立的连接到时间维

代码语言:javascript
复制
select * from fact
join time_dim entr on fact.entry_d = entr.date_d  
join time_dim book on fact.book_d = book.date_d;

还请注意,如果您使用内部连接(如上面的示例所示),您应该对这两个日期进行一些基本验证和绑定。要点是:您应该识别包含无效日期的事实行(时间维度或NULL中没有涉及),并正确地处理它们--而不是在联接中默默地丢弃它们。

对于非平凡的设置,特别是在时间列上对事实表进行分区时,您可以选择本机DATE格式,而不是其他维度的替代键。(这是一条实际的规则-理论中没有包括在内)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69595952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档