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. 查询2015年1月1日江苏地区的能源消耗总值(维度下面的级别必须1级1级的嵌套)
select {[Measures].Members } ON COLUMNS from [ntsdw]where [time].[2015].[1].[1]
7. 查询2015年1月到5月的能源消耗值
select {[Measures].[nts_sample]} ON0,{[time].[2015].[1]:[time].[2015].[5]} ON ROWS from [ntsdw]
8. 查询2015年1月和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].[江苏].[南京]