码迷,mamicode.com
首页 > 其他好文 > 详细

SSAS的维度表之间的关系只能有一个不能有多个

时间:2016-08-11 13:12:58      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子。

 

现在我们创建了一个维度Customer,由于该维度中的属性除了用到Customer表的字段以外,还要用到了Geography表的字段,所以Customer用到了两个表。

技术分享

 

但是Customer表和Geography表之间现在存在两个依赖关系

其中一个关系是Customer.CustomerKey到Geography.CustomerKey

技术分享

 

另一个关系是Customer.GeographyKey到Geography.GeographyKey

技术分享

 

在理想状态下我们认为在处理Customer维度的时候,这两个关系会作为Customer表和Geography表连接的条件同时生效,也就是说会有Customer.GeographyKey=Geography.GeographyKey and Customer.CustomerKey=Geography.CustomerKey这样一个关系存在。

 

但是实际情况是如何呢?

我们现在看一看Customer维度的属性Geography Info,它的KeyColumns是Customer表的GeographyKey字段,NameColumns是Geography表的City字段,所以这个维度属性实际上就同时用到了Customer表和Geography表

技术分享

 

接下来我们处理Customer维度,看看生成Geography Info属性时的Sql语句是怎样的

技术分享

生成Geography Info属性时的Sql语句如下

SELECT 
  DISTINCT
 [dbo_DimCustomer].[GeographyKey] AS [dbo_DimCustomerGeographyKey0_0],[dbo_DimGeography].[City] AS [dbo_DimGeographyCity1_0]
  FROM [dbo].[DimCustomer] AS [dbo_DimCustomer],[dbo].[DimGeography] AS [dbo_DimGeography]
  WHERE 
  (
   
  (
   [dbo_DimCustomer].[GeographyKey]   =  [dbo_DimGeography].[GeographyKey]
  )
 
  )

我们惊讶地发现虽然我们前面在Customer表和Geography表之间定义了两个连接关系,但是只有其中的Customer.GeographyKey=Geography.GeographyKey生效了,而Customer.CustomerKey=Geography.CustomerKey这个关系在上面的Sql语句中根本没有出现。。。

 

这说明虽然我们在Customer表和Geography表之间定义了两个连接关系,但是在处理Customer维度的时候只有一个关系是起作用的,另一个关系被SSAS忽略了。所以维度表之间的关系不能有多个,有且只能有一个。

现在我们将上面Customer.GeographyKey=Geography.GeographyKey和Customer.CustomerKey=Geography.CustomerKey从两个关系合并为一个关系如下

技术分享

技术分享

 

然后再次处理Customer维度,查看Geography Info属性的Sql语句如下

SELECT 
  DISTINCT
 [dbo_DimCustomer].[GeographyKey] AS [dbo_DimCustomerGeographyKey0_0],[dbo_DimGeography].[dbo_DimGeographyCity1_0] AS [dbo_DimGeographyCity1_0]
  FROM [dbo].[DimCustomer] AS [dbo_DimCustomer],
      (
     

    SELECT [City] AS [dbo_DimGeographyCity1_0],GeographyKey   AS [dbo_DimGeographyCustomerKey1_1],[GeographyKey] AS [dbo_DimGeographyGeographyKey1_2]
  FROM [dbo].[DimGeography]
     )
     AS [dbo_DimGeography]
  WHERE 
  (
   
  (
   [dbo_DimCustomer].[CustomerKey]   =  [dbo_DimGeography].[dbo_DimGeographyCustomerKey1_1]
  )
     AND  
  (
   [dbo_DimCustomer].[GeographyKey]   =  [dbo_DimGeography].[dbo_DimGeographyGeographyKey1_2]
  )
 
  )

很明显这一次Customer.GeographyKey=Geography.GeographyKey和Customer.CustomerKey=Geography.CustomerKey这两个连接关系都生效了,达到了我们预期的效果。

所以切记SSAS中一个维度中的多个表之间的连接关系有且只能有一个,如果定义了多个连接关系实际上也只有一个会起作用。

 

SSAS的维度表之间的关系只能有一个不能有多个

标签:

原文地址:http://www.cnblogs.com/OpenCoder/p/5760468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!