壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 496|回复: 0

复杂或有趣的MDX(3)SQL查询事实表与MDX语句查询的关系示例

[复制链接]
发表于 2012/3/15 23:31:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
SQL SUM事实表成员列和MDX成员查询之间的关系如何呢?根据维度层次的定义关系,及成员在层次中的位置,情况有很多种。CSDN的boa_bi提了一个问题,是SQL、MDX关系的简单的一种。

问题描述:
如果简单的这样写
with member [Measures].[a] as '([Measures].[Store Sales]+[Measures].[Store Cost])*[Measures].[Sales Count]'
select
{[Measures].[a]} on columns,
{[Store].[All Stores].[USA]} on rows
from sales
我的理解:显示出来的数字应该是所有USA地区数据做([Measures].[Store Sales]+[Measures].[Store Cost])*[Measures].[Sales Count]运算之后再做和
运行之后发现这个与在management studio中执行如下的SQL语句的结果不一样
select sum((
[Store Sales]+[Store Cost])*[Sales Count])
from sales where region=1;
不知道哪里出了问题?

假设
1、假设采用SASS 2000及附带Foodmart2000示例解释问题;

2、假设USA所在的维度,即店面的地区维是规则的维度(如果是各分支层次不一的维度,则更复杂);

解答
在给定的示例中,两者的结果一般情况下应该是不一样的,除非USA下面只有一个成员或USA是叶子成员,或事实数据的数值比较特殊造成恰好相同,至于这个特殊条件是什么,则需要解析方程求的,这里没能力再深究了。

两者结果不同的原因,通过示例解释如下:

假设:

dw中关于USA,只有以下几行事实数据,需要求解result=(b+c)*a。

则:

1)事实数据的形式及数值进一步假设如下:


国家  省份  a    b    c

1      1    1  10  100

1      2    2  20  200

1      3    3  30  300

2) MDX计算

2.1) mdx运算时,首先是执行聚合运算,在地区上聚合出USA,结果可以看作如下内容:

国家  省份  a    b    c

1    all  6    60  600

2.2) 然后再执行公式指定的运算,最终得到的结果为3960 :

result=(60+600)*6=3960

3) SQL计算

3.1) Sql运算时,首先遍历每一行,并对当前行计算指定的公式,如下:

r1=(10+100)*1=110

r2=(20+200)*2=440

r3=(30+300)*3= 990

3.2)然后再对刚才遍历各行的计算结果执行sum聚合,则得到最终结果为1540:

result=r1+r2+r3=110+440+990=1540

4)结论

boa_bi的问题中,MDX与SQL计算结果的不一致是由各自的计算优先顺序导致的,其实也类似于我们在编程中常遇到的其他Sum(calc(expresion)) <>calc(sum(expressionItems)) 的问题。

探讨
那么如何撰写语句,使两者相同呢?

在上例中,如果将第一个MDX需要重新写过,你试一下这样是否可以,将问题描述中MDX语句的[Store].[All Stores].[USA]做以下改动,可能是可以产生相同结果的:

1)对USA先求叶子,也就是最末的一个级别上的Descendants;

2)再对对上一步求Aggregate;

即,原语句中的[Store].[All Stores].[USA]用如下内容替换即可(需自己调试):
Aggregate(Descendants([Store].[All Stores].[USA],[Store].[Store Name]))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 17:04 , Processed in 0.010269 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表