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

我们在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中一个维度中的多个表之间的连接关系有且只能有一个,如果定义了多个连接关系实际上也只有一个会起作用。

 

转载于:https://www.cnblogs.com/OpenCoder/p/5760468.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值