WEB开发网
开发学院数据库MSSQL Server SQL Server Analysis Service中Cube的结构 阅读

SQL Server Analysis Service中Cube的结构

 2008-02-19 09:53:04 来源:WEB开发网   
核心提示: 6) Measures Dimension是一个特殊的维度,它的Members中没有All这个成员,SQL Server Analysis Service中Cube的结构(3),它的默认Member可以在建模时指定,7)对于一般的维度,在实际开发中,只要多注意一下默认的一些转化,其第一层L

6) Measures Dimension是一个特殊的维度,它的Members中没有All这个成员,它的默认Member可以在建模时指定。

7)对于一般的维度,其第一层Level的默认是“(All)”。

Turple和Set

如果说Cube好像一个坐标系,那么Turple、Set的关系就好比点和面的关系。Turple由Cube中每个Hierarchy的一个Member组成。由于Hierarchy的个数非常多,所以一般不可能在Turple表达式中把所有的Member都明确指定,故此,为了简化开发,所有没有明确指定Member的Hierarchy,用该Hierarchy的默认Member代替。也就是说:([时间].[财政].[2001].[上半年]) 等价于([时间].[财政].[2001].[上半年],[时间].[日历].[All])。另外我们需要注意的:

1) 有的说法认为:Turple是“Cube 上的一个子集(不断开的子Cube),这个看法是不准确的,因为Turple只是一个点,不是面,它仅仅由每个Hierarchy的一个Member组成的。

2) 外面()起来的表达式不一定是Turple。比如:([时间].[财政].[半年].Members,[时间].[日历].[2001].[上半年])就不是一个Turple,而是一个Set,其原因在于,Turple是点,它仅仅由每个Hierarchy的一个Member组成,如果在任何一个Hierarchy上有两个成员,则其就变成Set了。

注意:([时间].[财政].[半年].Members,[时间].[日历].[2001].[上半年])等价于Crossjoin([时间].[财政].[半年].Members,[时间].[日历].[2001].[上半年])或{[时间].[财政].[半年].Members}*{[时间].[日历].[2001].[上半年]},在SSAS的MDX中,我们可以在()中定义多个用逗号分隔开的表达式,编译器会进行分析,如果发现是Set的话,就把它转化成多个Set相乘的形式。

3) Set中的Turple可以重复。比如:{[时间].[日历].[2001].[上半年],[时间].[日历].[2001].[上半年]}并不等于{[时间].[日历].[2001].[上半年]},因为前者有两个Turple,后者只有一个。

4) SSAS能够根据上下文的需要,自动把Turple变成Set,单个Member变成Turple,多个Member变成Set。这也是我们常常混淆Turple和Set的原因。详细的例子如下:

a)上下文需要Set时,([时间].[日历].[2001].[上半年])自动转化成{[时间].[日历].[2001].[上半年]}。

b)上下文需要Turple时,[时间].[日历].[2001].[上半年]自动转化成([时间].[日历].[2001].[上半年])。

c)上下文需要Set时,[时间].[日历].[2001].Children自动转化成{[时间].[日历].[2001].Children}。

总结

总体来看,SSAS中的Cube的内部结构非常的清晰,在实际开发中,只要多注意一下默认的一些转化,使用起来是很容易的。

上一页  1 2 3 

Tags:SQL Server Analysis

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接