mondrian 源码解读(二)-MDX

什么是MDX?

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分析。

MDX的基本概念

Cube

Cube是联机分析的关键。它们是一种多维结构,包括原始事实数据、聚合数据,这些数据聚合允许用户快速进行复杂查询。
立方体结构

Cube包含两个基本的概念:维度和度量。

维度(Dimension)

维度提供了分类描述,表示一类分析角度,用户通过维度来分析度量数据.

度量(Measures)

度量表示用来聚合分析的数字信息,如数量,销售金额等.

重要: 度量的集合组成了一个特殊的维度,叫做”Measures”.

层次(Hierarchy)

一个维度可能有多个钻取路径,一个层次规定一种路径如何钻取。所以维度可能有多个层次,例如时间层次:年,月,日或者年,季度,星期,日。

级别(Level)

一个层次可以包含级别的层级结构,级别(Level)表示特定的分类.比如,地区维度可以包含级别层级:Country、State、City。每个级别比它的父级别在数据粒度上更加细粒度。又比如:一个时间维可能包含级别:年、季、月。

成员(Level)

成员,是最重要的概念之一。一个成员是维度(包括度量维Measures)上的一个项目值,时间维度上“年”级别的成员可能有2000、2001,月成员有1、2、3等等。

计算成员

计算成员是一种运行时通过特殊表达式动态计算的成员。计算成员可以定义为度量。计算成员不影响现有的cube数据,它基于cube数据,通过各种数学表达式和各种函数定义,可以创建复杂的表达式。任何动态分析功能,都可以通过计算成员实现,比如实现占比、同期比等等。

元组

元组用于定义 来自多维数据集的数据切片 ;它由来自一个或多个维度的单个成员的有序集合组成 。元组内不能包含来自同一个维度的多个成员 .元组用() 包围.如 :

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

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

集合

集合是零个、一个或多个元组的有序集合 。集合最常用于在 MDX 查询中定义轴维度和 切片器维度 ,并且同样可能只具有单个元组或可能在某些情况下为空。在 MDX 语法中,元组用花括号括起来以构造集合 ,下面的示例显示具有两个元组的集合:

{ (时间 .[上半年], 路线.非陆地 .航空), ( 时间.[下半年 ], 路线. 非陆地.海路 ) }
一个集合可包含同一个元组不止一次的出现 。下面的集合是可接受的:
{ 时间 .[下半年], 时间.[下半年 ] }

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

注意,单个元组的集合不等于元组。如 {时间.[ 下半年]}不等于 时间.[ 下半年].
在MDX语法中,很多函数语义中包含元组和集合,作为参数或者返回值。

关系

基础元素

  • Set,Tuple
  • Axis,Slicer
  • Cube->Dimension-Hierarchy-Level-Member
  • Axis->Set->Members or Tuples->Members from different hierarychies

下图展现了MDX基本结构
MDX的表示

执行

  • 解析FROM语句,选定查询的Cube;
  • 解析WHERE语句,对Cube做切块;
  • 解析WITH语句中的命名SETS,执行预定义计算;
  • 解析每一个轴(Rows,Columns,…..)上的的Tuples,计算轴上的字段;
  • 解析NONEMPTY,在轴的交叉点上计算出结果。

ps:以上内容来自网络,我只是总结下,mdx更详细请移步微软mdx官方网站:http://msdn.microsoft.com/zh-cn/library/ms145514.aspx