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中一个维度中的多个表之间的连接关系有且只能有一个,如果定义了多个连接关系实际上也只有一个会起作用。
SSAS的维度表之间的关系只能有一个不能有多个的更多相关文章
- mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决
※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...
- 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系
基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...
- MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系
数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...
- MYSQL--表与表之间的关系、修改表的相关操作
表与表之间的操作: 如果所有信息都在一张表中: 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性变得极差(致命的缺点) 确立表与表之间的关系.一定要换位思考(必须在两者考虑清楚之后才能得出结论) ...
- python 之 数据库(字段的约束条件,表之间的关系)
10.6 约束条件 10.61 not null .default create table t15( id int, name ) not null, sex enum('male','female ...
- MySQL 表之间的关系
表之间的关系 # 定义一张部门员工表 emp id name gander dep_name dep_desc 1 ming male 教学部 教书 2 lilei male 教学部 教书 3 ham ...
- mysql 中表与表之间的关系
如何找出两张表的对应关系 分析步骤: 1.先找出左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段 (通常是id) 2.再站 ...
- java:Oracle(聚合函数,多表查询,表之间的关系)
1.聚合函数 --max,min,sum,avg,count,nvl(,) -- max:最大值 -- max既能取数字的最大值,也可以取字符串的最大值(英文字母排列顺序),根据场景实际意义来看,最好 ...
- 五、hibernate表与表之间的关系(一对多关系)
数据库表与表之间的关系 一对多:一个学校可以有多个学生,一个学生只能有一个学校 多对多:一个学生可以有多个老师,一个老师可以教多个学生 一对一:一个人只能有一个身份证号,一个身份证号只能找到一个人 一 ...
随机推荐
- 12 Tips for Accurate Project Estimating
Projects typically involve many dynamic aspects, yet they're often constrained by finite conditions. ...
- Ubuntu 14.04安装OpenCV 3.1
从OpenCV官网上下载OpenCV官网上下载OpenCV的未编译源代码: 点击这里 国内很多网络打开OpenCV官网速度缓慢,可以点击如下地址直接从GitHub上下载OpenCV 3.1的源代码 下 ...
- JS之toString方法
1.JS中几乎每个值都有toString方法,null和undefined除外 2.对于字符串形式的值也可以使用toString()方法,返回该字符串的一个副本 3.toString(radix)方法 ...
- C#中jQuery Ajax实例(二)
上一篇写了一个简单的Ajax异步程序,这一次同样是简单的程序,只不过这次先把参数传到一般处理程序(后缀为ashx)中,再把结果传回到页面. 1.html代码: <html xmlns=" ...
- iOS ASIHTTPRequest 使用指南
http://www.devdiv.com/iOS_iPhone-ASIHTTPRequest使用指南---_lt__lt_翻译稿_gt__gt_---连载-thread-93741-1-1.html
- jq的核心基础
1.jq代码的风格 jq对象$().css();jQuery().css(); //获取jquery对象 示例$().css('background':'red').css('font-siz ...
- thinkphp文章列表及删除文章
出师不利,数据一次删完了... 教程:http://www.thinkphp.cn/topic/9757.html 首先要构造mysql数据库 模板代码 </head> <body& ...
- selenium 回放时遇到的问题
回放时,系统报”Window does not exist” 录制时,存在弹出页面 回放时,系统会报以下的错误: 问题的根本原因: window 窗口没有id和name属性,系统会自动生成name属性 ...
- Java学习——对象和类
1. 入门例子 package jihite; public class Dog{ int dogage; public Dog(String name){ System.out.println(&q ...
- extern "C" 和 DEF 文件.
参考: http://www.cnblogs.com/whiteyun/archive/2011/07/22/2113560.html 问题: 如果用了 DEF 文件来导出 DLL 的函数, 还需要在 ...