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

Posted

技术标签:

【中文标题】SSAS:我的维度表可以包含事实表中没有的键吗?【英文标题】:SSAS: Can my Dimension Table contain keys that are not in the Fact Table? 【发布时间】:2013-09-11 22:13:24 【问题描述】:

这是一个非常基本的问题,但我找不到可靠的答案。我的 Dimension 表中可以有 Fact 表中没有的值吗?我意识到相反的方向是有问题的。我的事实表中不能有维度表中不存在的维度键,但反过来呢?

我有一个包含我所有客户的客户表。然后我有一个包含客户 ID 的订单事实表,但是,并非所有客户都曾经订购过东西,因此订单事实不包含客户表中每个客户的客户 ID。

这似乎是一个合理的情况,但我在处理我的多维数据集时遇到了未找到键的问题,除了为我的维度使用命名查询之外似乎没有任何解决问题的方法,我专门过滤掉了任何不存在的客户有任何订单。这解决了错误,但如果我不必这样做,我宁愿不必这样做。也许我的 Key Not Found 错误确实存在另一个潜在问题。

所以,我希望有人能明确地告诉我我的方案是否应该有效。我的维度表中的记录可以多于事实表中的记录吗?如果是这样,那么我将花更多时间试图找出错误。如果没有,我将辞职,为我需要使用的每个 Fact 创建我的 Customer 表的多个视图。

谢谢

【问题讨论】:

【参考方案1】:

我会说是的...设置中几乎没有“危害”,最多您存储的字节数比您可能需要的多。在这种情况下,让尚未在维度表中订购任何东西的客户不会损害任何东西,而且很可能是一个必要的步骤,因为客户从创建尚未订购到已创建并订购。

通常维度表往往是从事实表派生的,而从事实表中派生的维度表中的值如何从事实表中派生出来有点令人困惑......但我可以看到它在你的设置中

我经常发现,在所有引用它的事实记录都被重新指向后,“存档”维度值可能会保留很长时间。

对我来说似乎没有伤害没有犯规的情况......

【讨论】:

谢谢。这就是我的想法,但是由于我的错误在我过滤掉它时消失了,所以我想确定一下。我的维度表在几个不同的 Fact 表中很常见,这就是为什么它不是专门从 Fact 派生的。出于维护目的,我宁愿能够重用它而不是创建单独的维度。感谢您的回复! Tho 扩展这个:当然,当您浏览这些 e 时,您会看到维度中的客户。 G。填充过滤器。但他们不会对这些措施有任何价值。这意味着如果您在查询中使用NON EMPTY(大多数客户端工具默认使用),您将永远不会在查询结果中看到这些客户。 “我的维度表在几个不同的 Fact 表中很常见,这就是为什么它不是专门从 Fact 派生的。”呃,我记得进入那个设置,其中 user_dimension 表被至少 5 个不同的表填充过程填充......使得无法确定哪个维度来自哪里,我必须在我的 user_dimension 表中添加一个“源”列告诉我唱片的来源。【参考方案2】:

是的,当然。

一般来说,您需要“一致的维度”,即可以跨事实表共享的维度。

假设您的 customer_orders_product 事实表使用 2010 年 1 月 1 日至 2013 年 12 月 31 日的日历维度。

但是现在您添加了一个新的事实表,warehouse_receives_shipment,并且该数据可以追溯到 2005 年。

您不会想要两个日历维度表。

【讨论】:

以上是关于SSAS:我的维度表可以包含事实表中没有的键吗?的主要内容,如果未能解决你的问题,请参考以下文章

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

在 SSAS 中建模多维数据集

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

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

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

SSAS 维度属性在多维数据集浏览器 (BIDS) 中不可见