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

时间:2013-09-11 22:13:24

标签: sql ssas olap

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

我有一个包含我所有客户的客户表。然后,我有一个订单事实表,其中包括客户ID,但是,并非所有客户都订购了某些东西,因此Orders Fact不包含客户表中每个客户的客户ID。

这似乎是一个合理的情况,但是我在处理我的多维数据集时遇到了一些问题,其中没有任何东西可以解决问题,除了使用我的Dimension的命名查询,我特意筛选出任何不支持有任何订单。这解决了错误,但如果我不需要,我宁愿不必这样做。也许我的Key Not Found错误确实存在另一个潜在问题。

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

谢谢

2 个答案:

答案 0 :(得分:1)

我会说是的......设置中几乎没有“伤害”,最多只存储比你需要的更多的字节。在这种情况下,让客户在维度表中订购任何东西都不会对任何事情造成任何损害,并且很可能是一个nessacary步骤,因为客户从创建到订单再到创建和订购。

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

我经常发现'归档'维度值在所有引用它的事实记录被重新命名后很久就会挂起。

对我来说似乎没有任何伤害,没有任何恶意......

答案 1 :(得分:0)

是的,当然。

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

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

但是现在你添加一个新的事实表,warehouse_receives_shipment,这些数据可以追溯到2005年。

您不需要两个日历维度表。