【问题标题】:Relation between two Fact tables两个事实表之间的关系
【发布时间】:2018-09-03 08:39:23
【问题描述】:

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

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

【问题讨论】:

    标签: data-warehouse fact-table warehouse


    【解决方案1】:

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

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

    Count(Tweets) By User
    

    【讨论】:

    • 嗯,你是对的,那个用户是一个维度(我已经在我的模式中拥有它),但是这个例子更复杂而且很长,把它全部写在问题中。我们有这个高音扬声器示例作为我学院课程的培训项目。有一些关于用户的措施。因此,我们为用户提供了一个维度和一个事实表。一个衡量事实用户的例子。跟踪用户的两条不同推文之间每小时窗口中的关注者数量的变化。
    • RADO 是正确的。如果事件之间没有维度,则无法关联事件。在您的示例中,如果没有用户维度将事件联系在一起,则关注者变化的推文将毫无意义。 users&followers 事实表应该是单个关注者的粒度,然后可以按小时聚合(另一个维度)。
    • 为了澄清我的评论,用户和关注者事实表应该捕获订阅关注用户的关注者。这就是发生的事件以及应该捕获它的颗粒。
    • 我也不同意在两个事实之间建立联系。我也已经有了用户维度。 @WesH您是对的,因为您认为关注者度量是按时间维度查看的。但是,这在我的场景中不起作用,因为任务是跟踪不同推文之间的关注者数量。例如用户“A”发了推文(TweetID:10001),其关注者人数为(120)。该用户再次发推文(tweetID:10009)。现在关注者的数量是(125)。
    • 跟踪关注者的用户数量只是一个例子。还有其他任务具有相同的场景,我们必须根据推文跟踪更改。
    【解决方案2】:

    没有。你没有将事实相互联系起来。事实表中的每一列都应该是相关维度记录的 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 切片时,它应该返回查看推文的接收者数量。

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2017-07-31
      相关资源
      最近更新 更多