Mdx为MultiDimensional  Expressions的缩写,多维表达式,是标准的OLAP查询语言。在多数OLAPServer都提供Mdx支持,如Microsoft Sql Server OLAP Services,SAS,Hyperion Essbase等。支持多维对象于数据定义和操作。Mdx很多方面与结构化查询语言(SQL)语法相似,但他不是SQL语言的扩展;事实上,Mdx所提供的一些功能也可由SQL提供,尽管不是那么有效或直观。

如同SQL查询一样,每个Mdx查询都要求有数据请求(select子句)、起始点(From子句)和筛选(where子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据的特定部分。Mdx还提供了可靠的函数集,用来检索的数据进行操作,同时还具有用户定义函数扩展Mdx的能力。

Mdx为多维数据库提供了表达式语查询语法,用于cube数据,并提供了许多强大的分析函数,用于支持常用的OLAP分析。

语法

维度、级别、成员等,一般用唯一名称UniqueName来标示,可以用[]包围name,如果name有空格或者数字开头,必须使用[],否则可以忽略。UniqueName是根据层次结构表示的一种方法。即递归显示出祖先的名称。

维度(Dimension):维度直接用[]包围。比如Product的唯一名称为[Product]或Product。

级别(Level):级别的UniqueName为[维度名称].[级别名称],如[year].[2001],同样,如果没有空格,[]可以省略,如year.[2001]。

成员(Member):成员的UniqueName格式为[维度].(Parent  Member  UniqueName).[Member Name],如:时间维上的2003年2月份的UniqueName为[2003].[1].[2],中间的1为1季度,因为该维度的结构为年、季、月。

度量(Measure):度量实际上市属于维度维的成员,也就是说度量(Measure)是任何Cube的一个维度。如:度量Unit Sales的UnqiueName为[Measures].[Unit Sales]

UniqueName是OLAP元素内部的表示法,在Mdx查询语言中,可以使用UniqueName来表示元素。

Mdx还提供模糊和其他等价的元素的表示方式:

<1>省略维度名表示级别,如果一个维度的级别名在整个Cube中是唯一的,那么可以省略维度名来查询级别。如Product.[Product Family]可以写成[Product Family]

<2>省略维度名称表示成员。如果省略维度名,可以标示该维度最高级别的成员,如[Time].[2000]可以写成[2000],[Measures].[Unit Sales]可以写成[Unit Sales]。

<3>成员挂在级别下,即成员不一定要写成[维度].(Parent  Member  UniqueName).[Member Name],可以写成[维度].[级别].[Member Name],如2000年3月可以写成[Time].[Months].[3]

模糊查询表示法,都基于不会重复的假设,如果有重复的元素,取第一个查找的元素作为查询结果,可能发生错误,因此,建议使用完备的表示法

元组、集合

元组用于定义来自多维数据切片;他是由一个或多个维度的单个成员的有序集合组成。元组内不包含来自同一个维度的多个成员(可以理解为坐标),元组用()包围。

如:

(时间.[下半年])

(时间.[下半年],[产品].[手机].[Nokia])

如果一个元组是由单个维度的成员组成,那么可以不用()包围,即(时间.[下半年])可表示为:时间.[下半年]

集合(Set)是零个、一个或多个元组的有序集合。集合最常用于在Mdx查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。在Mdx语法中,元组用花括号{}来构造集合

举例,下面是具有两个元组的集合:

{(时间.[上半年],路线.非陆地.航空),(时间.[下半年],路线.非陆地.海路)}

一个集合可包含同一个元组不止一次的出现。这样也是可以的:

{时间.[下半年],时间.[下半年]}

集合值以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。

注意:单个元组的集合不等于元组。如{时间.[下半年]}不等于  时间.[下半年]。

在Mdx语法中,很多函数语义中包含元组和集合,作为参数或者返回值。

Mdx基本语法结构

先看看Mdx基本语法结构:

SELECT  [axis specification] ON COLUMNS,

[axis specification] ON ROWS

FROM

[cube name]

WHERE

[silcer specification]

1、[axis specification]可以看成是轴的成员选择。

2、[silcer specification]表示切片上的成员,可以看成过滤信息,[silcer specification]可选,如果没有指定,取系统默认的维度成员作为切片

轴维度和切片器维度

当设计多维表达式(Mdx)查询时,应用程序一般查看多维数据集并将维度集合划分为两个子集:

1、轴维度,为多个成员检索数据的维度

2、切片器维度,为单个成员检索数据的维度。

因为轴维度和切片器维度都从要查询的多维数据集的多个维度构造,所以用这些术语将要查询的多维数据集使用的维度与在由Mdx查询返回的多维数据集中创建的维度区分开。

例如:

假定存在名为TestCube的多维数据集,具有两个名为Route和Time的简单维度。因为多维数据集的度量值是Measures维度的一部分,所以该多维数据集总共有三个维度。查询要提供一个矩阵,可以在该矩阵内跨路线和时间比较Packages度量值

在下面的Mdx查询实例中,Route和Time维度用作轴维度,Measures维度用作切片器维度。Members函数表明要用于构造集合的维度或级别的成员,而不必再Mdx查询中显示声明给定维度或级别的各个成员。

SELECT

{Route.nonground.Members} ON COLUMNS

{Time.[1st half].Members} ON ROWS

FROM

TestCube

WHERE  ([Mesures].[Packages])

指定维度的内容:

轴维度决定多维结果结果集的边缘。多维表达式(Mdx)使用Select子句通过将集合指派到特定轴来指定轴维度。

在下面的语法示例中,每个<axis_specification>值定义一个轴维度。数据集中轴的个数等于多维表达式(Mdx)查询中<axis_specification>值的个数。Mdx查询最多可以支持128个指定轴,但几乎没有Mdx查询会用到5个以上的轴。

<axis_specification>语法可分解为:

<axis_specification>::=<set> ON <axis_name>

<axis_name>::=COLUMNS|ROWS

轴维度上的只能接受集合<set>,如果是手动指定成员集合,必须用{}包围,如果使用Mdx集合函数,则不需要用{}包围,因为集合函数返回值为集合。一个轴维度上可以包含几个维度,如:

SELECT

{

[Measures].[Sales_Dollars], [Measures].[Sales_Units],

[Measures].[Sales_Units_max]

}

ON

columns,

CrossJoin(

{

[State].[Canada], [State].[Mexico], [State].[USA]

},

{

[Product].[Bread], [Product].[Dairy], [Product].[Meat]

}

) ON rows

FROM

sales

WHERE

([Time].[All Time], [Employee].[All Employee])

Columns轴上是手工指定成员元组集合,用{}包围,Rows轴使用集合函数CrossJoin,该函数返回两个集合的交集,Rows轴上包含两个维度State和Product。

指定切片器维度的内容

切片器维度筛选器多维数据,可以通过将切片器维度包含在多维表达式(Mdx)查询的Where子句来限制所返回的数据。

假定未显示指派给轴的维度是切片器维度,并用其默认成员进行筛选。则默认成员为最高级别的的第一个成员。

切片器维度还可通过Mdx语法的Where子句进行显示指定。Where子句的语法可分解为:

[WHERE  [<silcer_specification>]]

切片器维度只可接受评估为单个元组的表示式。如下例所示:

WHERE  ([Time].[1st half],[Route].[nonground])

BI开发之——Mdx基础语法(转至指尖流淌)的更多相关文章

  1. BI开发之——Mdx基础语法(2)(转至指尖流淌)

    结合webcast中老师的讲解,现在把基础语法应用通过几个案例应用如下: 一.维度的概念 上图中一个维度(Dimension):Region 改为度下有四个级别(Levels):country.pro ...

  2. SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

    原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...

  3. JSP开发中的基础语法

    JSP 语法 JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代码片段 %> 或者 ...

  4. openresty开发系列15--lua基础语法4表table和运算符

    openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表)Table 类型实现了一种抽象的"关联数组".即可用作数组,也 ...

  5. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  6. openresty开发系列13--lua基础语法2常用数据类型介绍

    openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...

  7. Java 教程(开发环境配置+基础语法)

    Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.ora ...

  8. HTML 网页开发、CSS 基础语法——二.互联网原理

    1. 互联网的运行过程 ①用户通过输入网址,发送一个HTTP请求到服务器中去,服务器里面存储了程序员上传的所有网页文件. ② 服务器一旦接收到请求,就会将我们所有的相关网页文件,回传到客户端,通过HT ...

  9. SQL使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

    在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息,今天把自己工作过程中经常用到的一些数据库引擎存储过程,系统视图等等总结一下以备不时之用.下面 ...

随机推荐

  1. Simple TCP/IP Echo Server & Client Application in C#

    1. TCP Server The server’s job is to set up an endpoint for clients to connect to and passively wait ...

  2. UML 之 用例图

    用例图是指由参与者(Actor).用例(Use Case)以及它们之间的关系构成的用于描述系统功能的静态视图.用例图(User Case)是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一 ...

  3. ios 推送app badge 数字累加操作

    ios 推送app badge 数字累加操作: 一:此数字需要后台配合: 二:大致原理: 后台发推送时,第一次 传badge 为1,往后,依次累加操作即可: 当用户打开app时,app向后台发送请求, ...

  4. AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用

    对于异步操作的原理我就不讲了.在这我着重讲怎么使用异步操作的doinbackground onProgressUpdate onCancelled onPostExecute这四个方法 doinbac ...

  5. InnerHtml() 与html( )的区别

    InnerHtml() 与html( )的区别 在一个 HTML 文档中, 我们可以使用 .html() 方法来获取任意一个元素的内容. 如果选择器匹配多于一个的元素,那么只有第一个匹配元素的 HTM ...

  6. p2p网贷3种运营模式

      迄今为止,接触了3套不同的P2P系统.当中一套是我參与开发的,另外两套是别的开发商提供的. P2P系统的核心实体:借款人.平台.理財人. 模式一:   借款人的线上账号由平台统一维护.借款人能够通 ...

  7. 使用RMAN方式清除

    使用RMAN方式清除 RMAN清除方式会自动清除磁盘上的归档日志文件,同时会释放控制文件中对应的归档日志的归档信息. 可以基于不同的条件来清除归档日志,如基于SCN,基于SEQUENCE,基于TIME ...

  8. 使用Nginx负载均衡搭建高性能.NETweb应用程序(转)

    一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的时候,就会创建一个线程,当线程达到几千个时 ...

  9. cxf发布 webservice服务

    导包 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar commons-collections-3.2.1.jar commons-lang-2.6.ja ...

  10. Animation.Sample用法介绍

    无意中翻到这篇问答LINK,发现了Sample的用法 如果想让Animation在编辑器状态下预览,也可以用这个接口 当你想要直接获得动画的运行结果,而不是等帧数执行到这,这时候就得调用Sample: ...