1

根据数据仓库的概念,两个事实表之间存在关系(1-m 甚至 mm)是否正确?

Twetter 场景就是一个例子。我们可以假设我们有两个事实表(推文和用户)。如果我们想知道哪个用户发了推文或者推文是由某个用户发出的,我们必须加入这两个事实表。那么事实推文和事实用户之间是否存在(mm)关系?或者还有另一种方式来构建这个问题?

4

2 回答 2

2

不,直接在事实表之间建立关系是不行的。您只能通过共享维度关联它们。

在您的 Twitter 场景中,用户不是一个事实,而是一个命令。然后您将在 Dim User 和 Fact Tweets 之间建立 1:m 的关系,并且分析是强硬的:

Count(Tweets) By User
于 2018-03-25T21:42:21.740 回答
1

不,您不会将事实相互关联。事实表中的每一列都应该是相关维度记录的 FK,或者是事件的内在价值。

fFollowers 应该与 User(Tweeter)、Date(FollowDate)、Time(FollowTime)、User(Follower) 相关。您还需要 CancelDate/Time,如果订阅处于活动状态,它应该指向未知/未来日期维度记录。默认度量是计数。

dTweet 可能是一个退化维度,将与维度无关且不是可测量值的属性捆绑在一起,例如 tweetId(键)和发送推文的纬度/经度。这个维度可能不是必需的。

如果您认为有必要,fTweet 应该与 User(Tweeter)、Date(TweetDate)、Time(TweetTime) 和 dTweet 相关。计数将是一个衡量标准。您也可以将文本长度作为衡量标准。

在您的业务问题中。您想计算推文发生时的关注者数量。您需要为 fTweet 编写一个度量表达式,该表达式检索 fFollowers.Count,其中 TweetDate/Time 在 FollowDate/Time 和 CancelDate/Time 之间。我将这个 RecipientCount 命名为推文的度量。如果此措施在 fTweet 上,当您按 dTweet.ID 切片时,它应该返回查看推文的接收者数量。

于 2018-04-03T16:00:48.503 回答