26
十二

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

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]))

VN:F [1.9.13_1145]
Rating: 7.0/10 (2 votes cast)
复杂或有趣的MDX问题求解(3)-SQL查询事实表与MDX语句查询的关系示例, 7.0 out of 10 based on 2 ratings

相关文章:

  1. 复杂或有趣的MDX问题求解(1)-多个相关列参与求加权平均值
  2. 复杂或有趣的MDX问题求解(4)- 求过去12个月的销售总额
  3. 一些常用的MDX查询语句(示例基于SSAS2005/SSAS2008)
  4. SSAS2005及SSAS2008中自定义MDX查询语句模板的使用
  5. 复杂或有趣的MDX问题求解(2)-根据客户上期表现求本期、本年的表现

当前没有评论!

第一个在本文留言。

发表评论

名字(必须)
邮箱(必须),(永不被公布)
网址(建议)

字体为 粗体 是必填项目,邮箱地址 永远不会 公布。

允许部分 HTML 代码:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs(网站链接)必须完整有效 (比如: http://www.bi-professional.com),所有标签都必须完整的关闭。

超出部分系统将会自动分段及换行。

请保证评论内容是与日志或 Blog 内容相关的,灌水、攻击性或不恰当的评论 可能 会被编辑或删除。