21

我是数据仓库的新手。首先,我想准确地说,我的数据仓库工具包副本正在发送到我的邮箱(蜗牛邮件:P)。但是我已经用我在网上找到的东西来研究所有这些东西。

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

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

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

有谁知道 DW 设计的那个精确部分的一些参考资料?

4

3 回答 3

26

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

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

您正在寻找的答案是您需要“钻取”,这基本上意味着您要分别查询每个事实表(模式)并合并结果。这可以使用 SQl 或最好通过您可能拥有的引用数据仓库的报告/分析工具来实现。与其重复如何做到这一点的答案,我将引导大家阅读两篇非常好的文章:

Chris Adamson 的三种钻探方法

仓库的应该——拉尔夫·金博尔(Ralph Kimball)钻过

于 2014-10-10T13:57:39.210 回答
21

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

fact_ins_transaction

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

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

fact_ins_subscription

于 2010-07-22T21:47:50.217 回答
12

把你的问题倒过来。

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

您提到的对象中:

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

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

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

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

你还提到了保险。一个客户可以拥有多个保单。所以我们有第三个事实表。

数据仓库通常使用星型模式设计。星型模式基本上是一个连接到一个或多个维度表的事实表。由于我们已经定义了 3 个事实表,因此您可能会在数据仓库中获得不止一颗星。

于 2010-07-22T17:51:47.000 回答