SSAS一对多维度关系

时间:2012-04-30 14:39:12

标签: sql ssas relationship dimensions primary-key-design

对于你们的SSAS问题。我试图在OLAP SSAS多维数据集环境中定义一对多关系。但是,我遇到了定义主键的问题。示例表如下。前3个表之间的关系很容易定义(TradeDate,NYMEX Trades& NYMEX Contract)。但是,我的目标是在NYMEX合同和模型合同之间建立一对多的关系。换句话说,来自1 NYMEX Contract的数据将在Model Contract数据集中多次使用。

表:TradeDate

  • TradeDate(PK)
  • 月 等...

表:NYMEX交易(无PK)

  • ContractName
  • TradeDate
  • 价格

表:NYMEX合约

  • ContractName(PK)

表:模型合同

  • ModelContractName(PK)
  • ContractName

我需要在NYMEX合约和模型合同之间建立一对多的关系...但是我的PK在模型合同中的错误列上。有什么想法吗?

为了帮助澄清 - 我正在尝试定义维度 - >维度关系。表“模型合同”是一个查找表。

2 个答案:

答案 0 :(得分:6)

您所拥有的是您的事实数据(交易)与维度数据(模型合约)之间的多对多关系的示例。看看这个:dimension relationship 。您的情况很少见,因为模型合同只能分配给一个合同名称,但仍然属于多对多案例。这是在维度建模中使用桥接表来处理的,在SSAS中它们称之为中间事实表。一旦你有这样的DSV设置: enter image description here

然后,您将在项目中创建维度,然后为ModelContract创建一个度量值组,以便能够将其用作中间事实表。然后,您将为多维数据集设置维度用法,选择多对多关系:

enter image description here enter image description here

作为旁注,您应始终使用代理键作为尺寸。它们有几个优点,例如事实表中的存储空间,缓慢变化的尺寸,源系统解耦,......

答案 1 :(得分:0)

你需要在这里做2个维度。

首先,您不应将日期添加为整个维度的一部分。日期本身应作为维度存在。

第二,正如我所见,你应该加入NYMEX合约和模型合约并制作一个维度。您可以使用命名查询在DSV上加入它们或创建SQL视图,也可以在DSV上将两个表分开并将它们连接到维度上。

第三,NYMEX Trades是您的事实表。一旦创建了两个先前的维度,就应该将它们添加到多维数据集,并使用字段ContractName和TradeDate

将它们与维度关系选项卡上的事实表连接起来。