Mondrian的常用查询语句

Mondrian的常用查询语句

数据仓库:192.168.20.230/OLAP

逻辑模型:ntsdw.xml

逻辑模型是根据数据仓库建立起来的,所有的MDX语句时针对逻辑模型(ntsdw.xml)进行的查询,所有所有的操作都是对逻辑模型中立方、维度、层次、级别和成员进行的操作。所以理解这个逻辑模型是第一步,也是非常重要的一步。

 

所有的操作都是对成员(Members)的查询

1.  查询立方体中能源消耗总值

select {[Measures].Members } ON COLUMNS from [ntsdw]

或者select{[Measures].[nts_sample]} ON 0 from [ntsdw]

执行流程:到[ntsdw]cube中找到名为[nts_sample]measures(它江就是最终要查询的一个成员Members),又因为此度量(成员Members)的聚合方式aggregator="sum"所以查询的值是对一个轴上所有成员数据的叠加。

2.  查询2015年的能源消耗值(这里的Members就是度量表中对应的度量值[nts_sample])

select {[Measures].Members } ON COLUMNS from [ntsdw] where [time].[2015]

3.  查询2015年江苏地区的能源消耗值

select {[Measures].Members } ON 0,{[region].[江苏]} ON 1 from [ntsdw]where [time].[2015]

4.  查询2015年江苏地区照明的能源消耗总值

select {[Measures].[nts_sample]} ON 0,{[region]} ON 1,{[AllClass].[照明]} ON 3 from [ntsdw]where [time].[2015]

5.  查询2015年江苏地区天溯公司照明的能源消耗总值

select {[Measures].[nts_sample]} ON 0,{[region].[江苏]} ON 1,{[class].[照明]} ON 3,{[org].[天溯]} ON 4 from [ntsdw]where [time].[2015]

6.  查询201511日江苏地区的能源消耗总值(维度下面的级别必须11级的嵌套)

select {[Measures].Members } ON COLUMNS from [ntsdw]where [time].[2015].[1].[1]

7.  查询20151月到5月的能源消耗值

select {[Measures].[nts_sample]} ON0,{[time].[2015].[1]:[time].[2015].[5]} ON ROWS from [ntsdw]

8.  查询20151月和6月的能源消耗值

select {[Measures].Members } ON0,{[time].[2015].[1],[time].[2015].[6]} ON ROWS from [ntsdw]

Members成员的统计,是按照层次和级别来进行的。

9.  按能源类别进行能源消耗信息统计(打印输出的是一个数组)

select {[class].Members} on 0 from [ntsdw]

10. 按时间层次进行能源消耗信息统计(这里是按层次,打印输出的是所有时间能源消耗值的数组)

select {[time.default].Members} on 0 from [ntsdw]

11. 按月进行能源消耗信息的统计(这里是按级别,打印输出的是每个月的能源消耗值的数组)

select {[time month].Members} on 0 from [ntsdw]

12. 按区域进行能源消耗信息的统计(这里也是按级别)

select {[region district].Members} on 0 from [ntsdw]

13. 统计2015年、天溯研发中心、照明在南京每个区所消耗的能源

select {[region building].Members} on 0,{[org].[天溯].[研发中心]} on 1,{[class].[照明]} on 2 from [ntsdw]where [time].[2015]

 

几点要特别注意的:

(1).层次位于维度之下,大部分情况都是一个,但也有多个层次。如:时间维下面有年月日层次和年周层次。级别位于层次之下,可以有多个,如年月日层次下有年、月、日这三个级别。正是因为层次和级别的存在使得上钻和下钻操作得以进行。

(2).[time.default]后面跟的应该是Members,因为它是对时间层次的一个遍历如:[time.defult].Members;[timemonth]后面跟的应该是Members,因为它是按月级别对信息分类的一个遍历,如:[time month].Members;层次和级别与成员(Members)密切相关,究其根本是方便成员的归类统计(即切片、切面操作)

[time]则是对维度的一个限制,如[time].[2014].[1],则会限制查询的时间,究其根本是为了查询轴的限制。

(3).轴的限制可以用on {axis}语法来把维度分配到轴(Axis,复数 Axes)上,一个查询可以有多个轴。用on 0,on 1,on 2,on3...等表示,前五个轴也可以使用别名 Columns,Rows,Pages,Chapters,Sections表示

轴必须从 0开始,并且连续,不能跳过。下面的是不可以的

select {[region building].Members} on 0,{[class].[照明]} on 2 from [ntsdw]

同一个维度、层次不能同时出现在二个轴之中,否则验证不会通过,如下面的写法是不可以的。

Select {[region building].Members} on 0 from [ntsdw]where [region].[江苏].[南京]

你可能感兴趣的:(数据仓库,mondrian,MDX)