【问题标题】:SSAS One to Many Dimensional RelationshipSSAS 一对多维度关系
【发布时间】:2012-05-02 03:17:15
【问题描述】:

SSAS 中的问题,供大家参考。我试图在 OLAP SSAS 多维数据集环境中定义一对多关系。但是,我在定义主键时遇到了问题。示例表如下。前 3 个表之间的关系很容易定义(TradeDate、NYMEX Trades 和 NYMEX Contract)。但是,我的目标是在 NYMEX 合约和模型合约之间建立一对多的关系。换言之,来自 1 份 NYMEX 合约的数据将在模型合约数据集中多次使用。

表格:交易日期

  • 交易日期 (PK)
  • 年份
  • 月 等等……

表格:NYMEX 交易(NO PK)

  • 合同名称
  • 交易日期
  • 价格

表格:NYMEX 合约

  • 合同名称 (PK)

表格:合同范本

  • 模型合同名称 (PK)
  • 合同名称

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

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

【问题讨论】:

  • 您应该考虑将此问题移至姊妹站点:dba.stackexchange.com 带有ssas 和/或mdx 标记的问题可能有更好的机会在那里得到解答。
  • 你可以标记它(以便版主转移它),或者你将它发布到那里并自己删除这个问题。
  • 您为什么要尝试创建 1-M 关系而不是层次结构?如果 Model Contract 中的 ContractName 与 NYMEX Contract 中的 ContractName 相同,那不应该是外键吗? ModelContractName 似乎是 Model Contract 中最细粒度的元素,因此不同的名称列表应该是合适的候选键(尽管整数代理键可能会更好。)

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


【解决方案1】:

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

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

附带说明一下,您应该始终使用代理键作为您的维度。它们有几个优点,例如事实表中的存储空间、缓慢变化的维度、源系统解耦......

【讨论】:

  • 如果可能的话,一定要考虑改造以包含代理键!
【解决方案2】:

你需要在这里做二维。

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

其次,正如我所见,您应该加入 NYMEX 合约和模型合约并制定维度。您可以使用命名查询在 DSV 上连接它们或创建 SQL 视图,或者您可以在 DSV 上分离两个表并在维度上连接它们。

第三,NYMEX Trades 是您的事实表。创建好之前的两个维度后,您应该将它们添加到多维数据集,并使用字段 ContractName 和 TradeDate 将它们与维度关系选项卡上的事实表连接起来

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多