设计具有多个事实表的数据仓库

use*_*961 17 data-warehouse fact-table

我是数据仓库的新手.首先,我想比我的数据仓库工具包的副本在我的邮箱(蜗牛邮件:P)的路上精确.但我已经用网上找到的东西研究了所有这些东西.

然而,我在网上找不到的是当你在DW中看到多个事实时该怎么办.在我的情况下(保险),我退款是非定期发生的.一个客户可以在3个月内没有,然后在同一个月内没有.另一方面,我有"订阅费"(不确定什么是正确的英语术语,但你明白了),每个月或每三个月发生一次.这对我来说显然是两个截然不同的事实.

这两者是某种程度的松散耦合,如客户或"保险产品".现在是这两个不同的仓库,我必须在其上生成两个不同的报告,然后将报告连接到DW之外?或者有没有办法设计它以适应单个下降DW.或者我应该将这两个事实结合在一起?那么我可能会在退款时失去粒度.

我读过的一些博客说DW总是有一个事实表.其他人提到了使用S设计什么是事实表的步骤,但是没有明确的说明它们之间是否存在链接,或者它们只是同一DW项目的不同组件.

有没有人知道关于DW设计精确部分的一些参考文献?

小智 24

我意识到我正在回答一个旧帖子,但我对提供的任何答案都不满意.我觉得这两个问题都没有回答.

模式可以包含一个或多个事实,但这些事实不会通过任何关键关系链接.最好不要在单个查询中连接事实表,就像查询规范化/事务数据库一样.由于多对多连接的性质等 - 如果尝试,结果将是不正确的.

您正在寻找的答案是您需要"钻取",这基本上意味着您要分别查询每个事实表(模式)并合并结果.这可以通过使用SQl或最好通过引用数据仓库的报告/分析工具来实现.我不会重复关于如何做到这一点的答案,而是将每个人都引导到两篇非常好的文章:

克里斯·亚当森三种方法

应该是仓库 - 由Ralph Kimball钻探


Dam*_*vic 20

您可以拥有任意数量的事实表.在您的示例中,您可能会遇到以下情况:

fact_ins_transaction

dimProduct列出了几个产品 - 订阅就是其中之一. dimTransactionType会列出可能的交易(购买,退款,定期订阅费......)

现在假设你有兴趣认购简化报告,你可以添加一个factSubscription是这样的:

fact_ins_subscription


Gil*_*anc 11

向后回答你的问题.

数据仓库可以有多个事实表.但是,您确实希望最小化事实表之间的连接.可以在不同的事实表中复制事实信息.

你提到的对象中:

退款是事实.时间戳是退款事实的维度.

订阅费是一个事实.时间戳是订阅费事实的维度.

退款可能不止一次发生.我猜每个客户都有一个订阅费.因此,到目前为止,我们有两个事实表,客户和客户退款.

如果您知道最多只有3次退款(例如),那么您将取消客户退款事实表,并在客户表中放入3个退款栏.

你也提到保险.客户可以拥有多个策略.所以我们有第三个事实表.

数据仓库通常使用星型模式设计.星型模式基本上是连接到一个或多个维度表的一个事实表.您可能在数据仓库中有多个星号,因为我们已经定义了3个事实表.