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表与表之间的关系(一对多关系)
数据库表与表之间的关系 一对多:一个学校可以有多个学生,一个学生只能有一个学校 多对多:一个学生可以有多个老师,一个老师可以教多个学生 一对一:一个人只能有一个身份证号,一个身份证号只能找到一个人 一 ...
随机推荐
- linux关机
init 0; init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等.shutdown 就是使用这种机制.init定义了8个运行级别(runle ...
- 两排滚动js
html: <div class="mr_frbox"> <div class="showtitle"> ...
- webstorm注册
选择“license server” 输入:http://114.215.133.70:41017(适用ws2016.2.2) 2.3选择activation code注册 43B4A73YYJ-ey ...
- 8款实用Sublime text 3插件推荐
Sublime Text作为一个尽为人知的代码编辑器,其优点不用赘述.界面整洁美观.文本功能强大,且运行速度极快,非常适合编写代码,写文章做笔记.Sublime Text还支持Mac.Windows和 ...
- jni学习
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机(VM) 内部运行的 ...
- android PopupWindow实现从底部弹出或滑出选择菜单或窗口
本实例弹出窗口主要是继承PopupWindow类来实现的弹出窗体,布局可以根据自己定义设计.弹出效果主要使用了translate和alpha样式实现,具体实习如下: 第一步:设计弹出窗口xml: &l ...
- 第八篇 Integration Services:高级工作流管理
本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...
- 理解MapReduce
理解MapReduce Hadoop的MapReduce过程具有如下形式: 1) map: (K1, V1) => list(K2, V2) 2) redu ...
- iOS 延迟执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), ...
- 转:python webdriver API 之鼠标事件
前面例子中我们已经学习到可以用 click()来模拟鼠标的单击操作,而我们在实际的 web 产品测试中 发现,有关鼠标的操作,不单单只有单击,有时候还要和到右击,双击,拖动等操作,这些操作包含在Act ...