两个事实表之间的关系

Relation between two Fact tables

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

推特场景就是一个例子。我们可以假设我们有两个事实表(推文和用户)。如果我们想知道哪个用户发布了一条推文或者这些推文是由用户创建的,我们必须连接这两个事实表。那么事实推文和事实用户之间是否存在 (m-m) 关系?或者有另一种方法来构建这个问题?

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

在您的 Twitter 场景中,用户不是事实,而是定义。然后你将在 Dim User 和 Fact Tweets 之间有 1:m 关系,并且分析是 streighforward:

Count(Tweets) By User

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

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

dTweet 可能是退化维度,绑定与维度无关且不是可测量值的属性,例如 tweetId(密钥)和推文所在位置的 lat/long发送。此尺寸可能不是必需的。

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

在您的业务问题中。您想计算一条推文出现时的关注者数量。您需要为 fTweet 编写一个度量表达式来检索 fFollowers.Count,其中 TweetDate/Time 在 FollowDate/Time 和 CancelDate/Time 之间。我会将此命名为 RecipientCount,它将作为推文的衡量标准。如果这个度量是在 fTweet 上,当你按 dTweet.ID 切片时,它应该 return 看到推文的接收者数量。