两个Fact表之间的关系

时间:2018-03-24 22:15:58

标签: data-warehouse fact-table warehouse

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

Twetter场景就是一个例子。我们可以假设我们有两个Fact表(推文和用户)。如果我们想知道哪个用户发了推文或推文是通过使用制作的,我们必须加入这两个事实表。那么它是Fact-tweets和Fact-user之间的(m-m)关系吗?或者还有另一种方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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

在你的Twitter场景中,用户不是事实,它是一种谴责。那么你将在Dim User和Fact Tweets之间建立1:m的关系,并且分析很有意义:

Count(Tweets) By User

答案 1 :(得分:1)

没有。你没有将事实相互联系起来。事实表中的每一列都应该是相关维度记录的FK,或者是事件的内在值。

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

dTweet可能是一个退化维度,绑定与维度无关的属性并且不是可测量的值,例如tweetId(键)和发送推文的纬度/长度。这个维度可能没有必要。

如果你认为维度是必要的,那么fTweet应该与User(Tweeter),Date(TweetDate),Time(TweetTime)和dTweet相关。伯爵将是一项措施。您也可以将文本长度作为度量。

在您的业务问题中。你想在推特发生时计算粉丝的数量。您需要为fTweet编写一个度量表达式,以检索fFollowers.Count,其中TweetDate /时间介于FollowDate / Time和CancelDate / Time之间。我会命名这个RecipientCount,这将是推文的一个衡量标准。如果此度量在fTweet上,当您按dTweet.ID进行切片时,它应该返回查看推文的回传数量。