SSAS 2012 使用维度值过滤其他维度表

Posted

技术标签:

【中文标题】SSAS 2012 使用维度值过滤其他维度表【英文标题】:SSAS 2012 Using a dimension value to filter other dimension tables 【发布时间】:2012-10-19 20:03:38 【问题描述】:

我有一个客户表和其他几个包含客户 ID 的维度表。

我想要的是由***客户选择过滤的维度表。

如果我有:

客户 身份证 |名称

维度A 身份证 |客户 ID |价值1 身份证 |客户 ID |价值2

维度B 身份证 |客户 ID |价值3 身份证 |客户 ID |价值4

事实 身份证 |维度BId | FactValue1 ... 身份证 |维度BId |事实价值2 ...

..是否可以过滤 CustomerId 并通过维度值向下渗透到事实表?

或者,我是否总是需要在维度使用中将客户与事实相关联?我可以看到如何通过 DimensionA 将 Customer 与 Fact 关联起来,但我只能将它与一个中间表关联,而不是两个或更多。

或者,我是否还需要在 Fact 表中实际包含 CustomerId?

如有任何帮助,我们将不胜感激。

【问题讨论】:

【参考方案1】:

这一切都取决于您用于 DataWarehouse 的架构。

我认为星型架构是您拥有的最佳选择。

如果你使用它,你需要在事实表中有一个 customer_id 并通过维度使用来链接它们。 DimensionA 和 DimensionB 也是如此(即 Fact 表需要有对应的 id 为维度 A 和维度 B)。

如果您以这种方法执行此操作,则无论是维度 A 还是维度 B,都不需要客户 ID。该链接将通过 Fact 表实现。

否则考虑一下:你真的需要二维吗?由于这两个维度几乎相同,如果在数据源表中添加一个名为 Type 的新字段,其中 type 为 A 和 B,并将类型添加到 Hierarchy 中会不会更好?这将解决很多问题并使您的架构更加一致!!!

这是来自 Ralph Kimball Kimball's_Site_Link 网站的链接,它以比我更好的方式解释了什么是什么。您会发现最后一段内容非常丰富!

【讨论】:

非常感谢您的回答。该问题的尺寸已大大简化。将 CustomerId 放在事实表上是有意义的,但我也需要将其保留在维度上,因为维度成员与给定的客户相关。我希望以某种方式将客户加入到事实维度中,以将所有内容与客户联系起来。 如果您将客户 ID 放在 Fact 表中,您将能够通过事实加入客户 ID 和维度(SSAS 将自动执行此操作)。示例:CustomerDim -> FactSales 还请记住,SSAS 不是数据库。一切都是关于您要计算的事物的聚合。如果客户-事实-维度关系不存在,则没有(明显的)理由让客户加入维度!这在维度使用选项卡中很明显,您只能将维度连接到其对应的事实表,而不能将维度连接到另一个。

以上是关于SSAS 2012 使用维度值过滤其他维度表的主要内容,如果未能解决你的问题,请参考以下文章

SSAS 2012 - 维度建模

SSAS:我的维度表可以包含事实表中没有的键吗?

SSAS - 如何处理具有有效重复项的维度?

SSAS - 维度浏览器显示不同的属性

SSAS CUBE 2 个事实表和 1 个维度

如何定义维度在 ssas 中使用的连接