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

时间:2010-07-22 12:09:32

标签: data-warehouse fact-table

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

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

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

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

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

3 个答案:

答案 0 :(得分:21)

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

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

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

Three ways to drill across by Chris Adamson

Should of the Warehouse - Drilling Across by Ralph Kimball

答案 1 :(得分:18)

您可以拥有任意数量的事实表。在您的示例中,您可能会有以下内容:

fact_ins_transaction

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

现在假设您对简化订阅报告感兴趣,可以像这样添加 factSubscription

fact_ins_subscription

答案 2 :(得分:10)

向后回答你的问题。

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

你提到的对象中有:

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

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

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

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

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

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