从一个维度 Table 到单个事实 table 的多个连接

Multiple Joins from one Dimension Table to single Fact table

我有一个事实 table,它有 4 个日期列 CreatedDate、LoginDate、ActiveDate 和 EngagedDate。我有一个名为 DimDate 的维度 table,其主键实际上可以用作所有 4 个日期列的外键 table。所以模型看起来像这样。

但问题是,当我想根据日期列对度量进行子筛选时。例如:计算上个月创建并参与本月的所有用户。对于此设计,这是不可能的,因为当我使用创建日期过滤度量时,我无法进一步过滤不同的时间 window 以获取订婚日期。由于所有连接到同一维度,它们不是独立工作的。

但是,如果我为每个列创建一个单独的日期维度 table,并像这样连接它们,那么它就可以工作了。 但是,当我在现实世界场景中实际上有 20 个不同的日期列 table 时,这看起来非常麻烦,我必须创建 20 个不同的维度并将它们一一连接起来。有没有其他方法可以实现我的方案 w/o 创建多个重复的日期维度?

这个概念叫做角色扮演维度。您不必为每个日期将 table 添加到 DSV 或实际维度一次。而是添加一次日期,然后转到维度使用选项卡。单击添加多维数据集维度,然后选择日期暗淡。右键单击并重命名它。然后更新关系以使用正确的字段。

有一个 good article on MSSQLTips.com 涵盖了这个主题。