在AS2005的From子句中使用Select从句
2007-03-22 14:20
399 查看
[align=center]在AS2005的From子句中使用Select从句[/align]
跟Sql的From子句中嵌套使用Select语句一样,mdx表达式中也可以嵌套使用Select从句。这些嵌套的Select子句本质上相当与SubCube,语法上与CreateSubcube相似。下面的这个例子以及展示结果也许能说明这点。
[align=left]SELECT[/align]
[align=left]{ [Customer].[Customer].[Region].Members,[/align]
[align=left][Customer].[Customer].[State].Members } *[/align]
[align=left]{ [Measures].[Unit Sales], [Measures].[Dollar Sales] } on 0,[/align]
[align=left][Time].[YQMD].[Quarter].Memberson 1[/align]
[align=left]FROM ([/align]
[align=left]SELECT[/align]
[align=left]Filter ([/align]
[align=left][Time].[YQMD].[Quarter].Members,[/align]
[align=left][Measures].[Unit Sales] > 7500[/align]
[align=left]) on 0,[/align]
[align=left]{ [Customer].[Customer].[AZ], [Customer].[Customer].[NM],[/align]
[align=left][Customer].[Customer].[UT] } on 1[/align]
[align=left]FROM [Sales][/align]
[align=left]WHERE [Product].[ByCategory].[Category].[Tools][/align]
)
结果展示:
嵌套的Select语句就跟SubCube的定义一样,有如下的限制:
1. 不能拥有自己的With语句,不能拥有计算成员、命名集、计算单元集等等;
2. 不能使用NonEmpty或者Having关键字,所有的非空判断以及相关操作只能在外层语句中进行;
3. 不能在其任何轴上使用维度属性。
上述的限定都是为了确保内层的SubCube不依赖于后层的语句。上面的例子,内层Select效果上只是为外层的Select在Time维度和Customer维度上做了筛选,缩小了范围。有一点值得提醒,可能你已经发现内层的时间在0轴,外层的时间在1轴,对于轴的指定并不影响SubCube的生成,最终生成的还是一个独立的Cube,外层对其的查询在轴的先后顺序上不受影响。
注:为了便于理解,我们有必要提一下mdx语句在解析执行过程中的顺序:from->where->with->select。
[align=left] 从展示效果可以发现,由于Filter的作用,在行只返回了满足[Measures].[Unit Sales] > 7500的季度,列上的Customer也在上下文的关系中经过了筛选,只返回满足条件的成员。我们把这个语句列作修改,如下显示:[/align]
[align=left]SELECT[/align]
[align=left]{ [Customer].[Customer].[State].Members } *[/align]
[align=left]{ [Measures].[Unit Sales], [Measures].[Dollar Sales] } on 0,[/align]
[align=left][Time].[YQMD].[Quarter].Memberson 1[/align]
[align=left]FROM ([/align]
[align=left]..// ... 以下跟上面例子的内层Select是一样的[/align]
[align=left]SELECT[/align]
[align=left]Filter ([/align]
[align=left][Time].[YQMD].[Quarter].Members,[/align]
[align=left][Measures].[Unit Sales] > 7500[/align]
[align=left]) on 0,[/align]
[align=left]{ [Customer].[Customer].[AZ], [Customer].[Customer].[NM],[/align]
[align=left][Customer].[Customer].[UT] } on 1[/align]
[align=left]FROM [Sales][/align]
[align=left]WHERE [Product].[ByCategory].[Category].[Tools][/align]
[align=left])[/align]
查询结果则发生了很大的变化:
内层依然返回了Customer的部分成员,但是外层并没有在任何轴上引用Customer,所以Customer维度将出现在Slicer切片上,内层返回的all members,即AZ、NM、UT,外层的measures将只对这三个成员根据定义Cube的聚合规则进行聚合。
跟Sql的From子句中嵌套使用Select语句一样,mdx表达式中也可以嵌套使用Select从句。这些嵌套的Select子句本质上相当与SubCube,语法上与CreateSubcube相似。下面的这个例子以及展示结果也许能说明这点。
[align=left]SELECT[/align]
[align=left]{ [Customer].[Customer].[Region].Members,[/align]
[align=left][Customer].[Customer].[State].Members } *[/align]
[align=left]{ [Measures].[Unit Sales], [Measures].[Dollar Sales] } on 0,[/align]
[align=left][Time].[YQMD].[Quarter].Memberson 1[/align]
[align=left]FROM ([/align]
[align=left]SELECT[/align]
[align=left]Filter ([/align]
[align=left][Time].[YQMD].[Quarter].Members,[/align]
[align=left][Measures].[Unit Sales] > 7500[/align]
[align=left]) on 0,[/align]
[align=left]{ [Customer].[Customer].[AZ], [Customer].[Customer].[NM],[/align]
[align=left][Customer].[Customer].[UT] } on 1[/align]
[align=left]FROM [Sales][/align]
[align=left]WHERE [Product].[ByCategory].[Category].[Tools][/align]
)
结果展示:
嵌套的Select语句就跟SubCube的定义一样,有如下的限制:
1. 不能拥有自己的With语句,不能拥有计算成员、命名集、计算单元集等等;
2. 不能使用NonEmpty或者Having关键字,所有的非空判断以及相关操作只能在外层语句中进行;
3. 不能在其任何轴上使用维度属性。
上述的限定都是为了确保内层的SubCube不依赖于后层的语句。上面的例子,内层Select效果上只是为外层的Select在Time维度和Customer维度上做了筛选,缩小了范围。有一点值得提醒,可能你已经发现内层的时间在0轴,外层的时间在1轴,对于轴的指定并不影响SubCube的生成,最终生成的还是一个独立的Cube,外层对其的查询在轴的先后顺序上不受影响。
注:为了便于理解,我们有必要提一下mdx语句在解析执行过程中的顺序:from->where->with->select。
[align=left] 从展示效果可以发现,由于Filter的作用,在行只返回了满足[Measures].[Unit Sales] > 7500的季度,列上的Customer也在上下文的关系中经过了筛选,只返回满足条件的成员。我们把这个语句列作修改,如下显示:[/align]
[align=left]SELECT[/align]
[align=left]{ [Customer].[Customer].[State].Members } *[/align]
[align=left]{ [Measures].[Unit Sales], [Measures].[Dollar Sales] } on 0,[/align]
[align=left][Time].[YQMD].[Quarter].Memberson 1[/align]
[align=left]FROM ([/align]
[align=left]..// ... 以下跟上面例子的内层Select是一样的[/align]
[align=left]SELECT[/align]
[align=left]Filter ([/align]
[align=left][Time].[YQMD].[Quarter].Members,[/align]
[align=left][Measures].[Unit Sales] > 7500[/align]
[align=left]) on 0,[/align]
[align=left]{ [Customer].[Customer].[AZ], [Customer].[Customer].[NM],[/align]
[align=left][Customer].[Customer].[UT] } on 1[/align]
[align=left]FROM [Sales][/align]
[align=left]WHERE [Product].[ByCategory].[Category].[Tools][/align]
[align=left])[/align]
查询结果则发生了很大的变化:
内层依然返回了Customer的部分成员,但是外层并没有在任何轴上引用Customer,所以Customer维度将出现在Slicer切片上,内层返回的all members,即AZ、NM、UT,外层的measures将只对这三个成员根据定义Cube的聚合规则进行聚合。
相关文章推荐
- 在AS2005的From子句中使用Select从句
- 在AS2005的From子句中使用Select从句
- 在AS2005的From子句中使用Select从句
- MySQL的子查询中FROM和EXISTS子句的使用教程
- 使用hql查询---6.4.2: HQL查询的from子句
- 子查询三(在FROM子句中使用子查询)
- C# from子句使用问题
- MySQL的子查询中FROM和EXISTS子句的使用教程
- 一个数据表通过另一个表更新数据(在UPDAT语句中使用FROM子句)
- 使用select查询时,各子句(from、where、order、on、limit)的位置规则
- 使用包含 FROM 子句的 UPDATE
- net中的正则表达式使用高级技巧 (三)(from internet)
- Oracle pl/sql中的group by子句不能使用别名,应该这样写。
- copy_to_user()和copy_from_user()的使用
- Oracle “CONNECT BY” 使用Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询。其语法是:
- smart pointer --- shared_from_this的使用
- 45.笔记 MySQL学习——FROM子句里的子查询
- 关于union all中使用多个order by 子句引起的问题
- java使用poi解析Excel遇到Cannot get a text value from a numeric cell
- 使用 from selenium import webdriver