对两个事实表之间的关系建模
Posted
技术标签:
【中文标题】对两个事实表之间的关系建模【英文标题】:Model a relationship between two fact tables 【发布时间】:2014-01-27 15:58:01 【问题描述】:我有一个 Sales 事实表、一个 Orders 事实表(均为行级详细信息)和两个用于 Order Date 和 Transaction Date 的日期角色扮演维度(来自 Date 维度)。
我试图达到这样一个点,即您可以按订单日期查看销售量度,并按交易日期查看订单量度。
如果销售来自订单,则 Sales 表具有相关 Order 行的键,如果是非订单销售,则为 null。 Order 表没有任何指向相关交易的链接。
我一直在努力思考如何根据两个事实表之间的链接对关系进行建模,而我可以开始工作的唯一方法是基于 Orders 表创建一个维度,该维度仅包含关键,然后使用多对多关系......这在某种程度上似乎完全错误,但我不确定这种情况的“正确”方法是什么。
如果可能的话,我希望在按订单日期查看销售度量时将非订单销售显示为“未知”订单日期,这样您就可以看到完整的图片,而不仅仅是来自订单的销售。使用上述方法,这不会发生。
关于需要更改哪些内容才能使其正常工作的任何建议?
【问题讨论】:
没有代码,通常很难猜出确切的问题是什么,而猜测答案通常是任何人唯一能做的事情。如果您提供之前尝试的一段代码,那么您将更容易理解您遇到的确切问题。那段代码甚至可以是根本不起作用的代码,因为它仍然可以更好地了解您正在尝试做什么。 ...什么代码?这是一个关于在事实表和暗表之间建立关系的 ssas 问题。我说的是表格和结构而不是“代码”。 【参考方案1】:你走在正确的轨道上。我会在关系数据库中创建一个视图,或者在 DSV 中创建一个命名查询,其中包含作为单列的不同的非空订单 ID,可能称之为“DimOrderId”。然后从中构建一个维度,将“Null processing”属性(您必须单击“加号”两次才能使 BIDS 中属性的“Key Columns”属性访问此属性)设置为“UnknownMember”。
然后将这个维度用于多对多关系。
【讨论】:
【参考方案2】:您应该使用 Order ID 来查找 Order Date 并将 Order Date 维度键放入 Sales Transaction 事实表中。由于每个订单可能有多个交易,因此反过来可能没有意义。如果是 1:1,你可以做相反的事情,但这意味着一旦事务发生就更新订单事实,这可能会影响加载时间的复杂性和性能。确保您确实需要按交易日期订购。
【讨论】:
以上是关于对两个事实表之间的关系建模的主要内容,如果未能解决你的问题,请参考以下文章