事实表中的列问题

Posted

技术标签:

【中文标题】事实表中的列问题【英文标题】:Problems with Column in Fact Table 【发布时间】:2018-11-25 16:11:14 【问题描述】:

我正在构建一个类似于 AdventureWorks 的 DW。我有一个名为 FactSales 的事实表,数据库中有一个名为 SalesReason 的表,它告诉我们某个客户购买我们产品的原因。 问题是有两种类型的客户 - 经销商和在线客户 - 只有在线客户才有与他们相关的销售原因。

首先,我可以使用指向 Fact 中相同 FK 的维度表吗?就像我的情况一样 - Sk_OnlineCustomer 和 SK_Resseler 都指向 FK_Customer。他们的身份证号码不重叠-

其次, 我是否应该建立一个原因维度,将其与事实联系起来并拥有一个大多数时候为空或具有“虚拟原因”的 FK?

我是否应该将原因放在事实销售中而不是关键,就像可以为空的技术描述一样?

我是否应该将事实分成两张事实表,一张用于经销商,一张用于在线客户?但即使在这种情况下,我也会有一些客户不回答原因,因此 fk_reason 在新的 fact_Online_Customer 中的某些外观中会为空。

在我从冒险作品教程中看到的一个解决方案中,它创建了一个名为 fact_reason 的新事实表。它将事实销售与 DimReason 联系起来。 这看起来是一个很好的解决方案,但我不知道它是如何工作的,因为我从来没有在课堂上学习过我可以将事实与事实联系起来,因此我无法向老师证明我的选择是合理的。

如果你能解释一下,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

请找我的 cmets 解答您的问题:

首先,我可以使用指向 Fact 中相同 FK 的维度表吗?就像我的情况一样 - Sk_OnlineCustomer 和 SK_Resseler 都指向 FK_Customer。他们的身份证号码不重叠-

是的,这种情况下的维度是 Dim_Customer(例如),这可能是一个角色扮演维度。您可以公开报告视图以区分在线客户和经销商客户

其次,我是否应该建立一个原因维度,将其与事实联系起来并拥有一个大多数时候为空或带有“虚拟原因”的 FK?

是的,建立一个原因维度是有意义的。在此您可以将事实记录标记为原因

我是否应该将事实分成两张事实表,一张用于经销商,一张用于在线客户?但即使在这种情况下,我也会有一些客户不回答原因,因此 fk_reason 在新的 fact_Online_Customer 中的某些外观中会为空。

我建议您保留一个事实,因为您的业务活动是销售,您可以使用您的维度为其添加上下文、在线或经销商。如果您愿意,您可以使用单独的 Dim_Sales 维度来包含销售类型和其他您不能包含在 dact 中的销售详细信息

总结一下,您可能会对以下事实感到满意:

Fact_Sales 链接到 Dim_Customer Dim_Sales Dim_Reason(这个也可以去 Dim_Sales) Dim_Date(构建 DWH 解决方案时始终包含日期维度)

希望对您有所帮助...

【讨论】:

以上是关于事实表中的列问题的主要内容,如果未能解决你的问题,请参考以下文章

事实表中的事实值或度量是啥意思?

选择表中的列与另一个表中的列不同的数据

Ssas 多维数据集向导不会为事实表列创建度量

为什么图表中的列顺序与查询结果集中的列顺序不匹配?

为啥事实表中的维度成员集通常用作复合键?

使用另一个表中的信息更新表中的列