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

最新文章

  1. 深入理解JSX
  2. IOAPIC重定位中断处理函数思路整理
  3. io.js入门(三)—— 所支持的ES6(下)
  4. 深入理解css系列:css定位
  5. AspNetPager 免费分页控件7.5.1版发布!
  6. rabbitmq消息队列——"路由"
  7. powershell 批量生成文件
  8. sc7731 Android 5.1 LCD驱动简明笔记之三
  9. C# 线程锁Lock 死锁
  10. ruby中Block, Proc 和 Lambda 浅析
  11. Java 7 Fork/Join 并行计算框架概览
  12. 最新最全的html5标签集合
  13. python垃圾回收
  14. 设置java.library.path的值(Mac/Linux/Windows)
  15. GCC参数详解 一
  16. MapReduce(二)常用三大组件
  17. 初次使用VCS仿真软件
  18. oracle之 调整 I/O 相关的等待
  19. 简单DP
  20. 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]

热门文章

  1. [LeetCode]题解(python):063-Unique path II
  2. Surround the Trees---hdu1392(凸包GraHam模板)
  3. Introduction to Project Management(II)
  4. ASP.NET MVC 中将数据从View传递到控制器中的表单提交法
  5. 四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName
  6. iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)
  7. svn使用svnsync实现双机热备
  8. 概率dp入门
  9. 第十三篇 Integration Services:SSIS变量
  10. Vue.2.0.5-单文件组件