页面树结构
转至元数据结尾
转至元数据起始

1. MDX 简介

MDX(multi-dimensional expressions多维表达式)是一种语法,支持多维对象与数据的定义和操作。 

1.1 MDX与SQL

MDX 在很多方面与结构化查询语言 (SQL) 语法相似,但它不是 SQL 语言的扩展;事实上,MDX 所提供的一些功能也可由 SQL 提供,尽管不是那么有效或直观。如同 SQL 查询一样,每个 MDX 查询都要求有数据请求(SELECT 子句)、起始点(FROM 子句)和筛选(WHERE 子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据的特定部分。
 文档目录:

相关文档:

1.2 MDX 中的重要概念

多维表达式 (MDX) 的用途是使对多个维度的数据的访问更为简单和直观。它的主要概念如下:
  • 维度(Dimensions)、级别(Levels)、成员(Members)和度量值(Measures)
  • 单元(Cells)、元组(Tuples)和集合(Sets)
  • 轴维度和切片器维度(Axis and Slicer Dimensions)


1.2.1 维度(Dimensions)、级别(Levels)、成员(Members)和度量值(Measures)

在传统的关系数据库中,用于数据定义和操作的大多数语言(如 SQL)都设计为在两个维度中检索数据:列维度和行维度。下面的关系图说明一个用于存储订单信息的传统关系数据库。

各个表均提供二维数据。各行与各列的交集是一单个数据元素,称为字段。要在 SQL 查询中查看的特定列用 SELECT 语句进行指定,而要检索的行用 WHERE 子句加以限定。


而对于多维数据,则可以用具有两个以上维度(Dimensions)的结构来表示。这些称作多维数据集的结构具有多个维度。在多维数据集中维度的交集处,可能有不止一个数据元素,这些数据元素称为度量值(Mensures)。
上面的关系图说明使用三个维度(“路线”、“源"和"时间")和两个度量值("包"和"上一次")的多维数据集。各个维度分成不同的级别(Levels),而每个级又进一步分为成员(Members)。
例如,"源"维度提供"东半球"级别,该级别又分为四个成员,"非洲"、"亚洲"、"澳大利亚"和"欧洲"。如您所见,即使是从多维数据源中查询简单数据也可能是一项复杂的任务。例如,多维数据集可以有三个以上的维度,或者可以只有一个维度。多维数据集、维度、级别、成员、度量值的概念对于理解 MDX 语法很重要。


如果您还不理解,可以查找其他资料以进一步了解这些主题。



1.2.2 单元(Cell)、元组(Tuple)和集合(Set)

SQL 从表返回二维数据子集,而 MDX 从多维数据集返回多维数据子集。多维数据集关系图表明多维成员的交集创建单元(Cells),从这些单元可以获取数据。为标识和析取这类数据(不管这些数据是单个单元还是单元块),MDX 使用称为元组(Tuples)的参照系。
元组列出维度和成员来标识多维数据集内的单个单元和更大的单元部分;因为各个单元是多维数据集所有维度的交集,所以元组可以唯一标识多维数据集中的每个单元。为起到参照的作用,将多维数据集中的度量视为该多维数据集本身中的一个专用维度,名为"度量值"。
例如,在前面的关系图中,以下元组标识其中值为 400 的单元:


(源.[东半球].非洲, 时间.[下半年].[第四季度], 路线.航空, 度量值.包)
元组唯一标识多维数据集中的一部分;它不必指某个特定单元,也不必包括多维数据集中的所有维度。以下示例均为多维数据集关系图的元组:


(源.[东半球]) (时间.[下半年], 源.[西半球])

元组的有序集合称为集合(Set)。在 MDX 查询中,轴维度和切片器维度由这种元组集合组成。以下示例是对关系图内多维数据集中的一个元组集合的描述。


{ (时间.[上半年].[第一季度]), 时间.[下半年].[第三季度]) }

1.2.3 轴维度和切片器维度

在 SQL 中,通常需要限制对表的查询所返回的数据量。例如,可能希望只看到有四十个字段的表中的两个字段,而且如果有满足特定条件的第三个字段,也只看到两个字段。可以通过在 SELECT 语句中指定列,并使用 WHERE 语句基于特定准则限制所返回的行来完成此任务。
在 MDX 中,这些概念也适用。SELECT 语句用来选择要返回的维度和成员,称之为轴维度。WHERE 语句用来将返回的数据限定为特定维度和成员条件,称之为切片器维度。轴维度预期返回多个成员的数据,而切片器维度预期返回单个成员的数据。


下面的部分还将对以上概念进行更详细的介绍。

2. 基本MDX

多维表达式 (MDX) 命令使您得以查询多维数据集之类的多维对象并返回多维数据集。与 SQL 的情况一样,MDX 查询的作者在编写查询前必须确定所请求数据集的结构。

2.1 基本 MDX 查询

基本多维表达式 (MDX) 查询以与下面的示例类似的方式进行构造:


SELECT [<axis_specification> [, <axis_specification>...]] FROM [<cube_specification>] [WHERE [<slicer_specification>]]


2.1.1 SELECT 语句

在 MDX 中,SELECT 语句用于指定包含多维数据的子集的数据集。

2.1.2 基本 MDX 查询示例

以下 MDX 查询示例用于讨论基本的 MDX SELECT 语句语法的各个部分:


SELECT
  { [Measures].[Unit Sales], [Measures].[Store Sales] } ON   COLUMNS,
  { [Time].[1997], [Time].[1998] } ON ROWS
  FROM Sales
  WHERE ( [Store].[USA].[CA] )

基本的 MDX SELECT 语句包含一个 SELECT 子句和一个 FROM 子句,以及一个可选的 WHERE 子句。SELECT 子句决定 MDX SELECT 语句的轴维度。本 MDX 查询示例中定义了两个轴维度。FROM 子句决定当析取数据以填充 MDX SELECT 语句的结果集时将使用哪个多维数据源。可选用的 WHERE 子句决定哪个维度或成员用作切片器维度;这将数据的析取限制于特定维度或成员。本 MDX 查询示例使用 WHERE 子句来将轴维度的数据析取限制于 Store 维度的特定成员。


2.2 成员、元组和集合

在开始创建多维表达式 (MDX) 查询之前,应当理解成员、元组和集合的定义,也要理解用于构造和引用这些元素的 MDX 语法。

2.2.1成员

成员是代表维度中一次或多次数据出现的项。请把维度中的成员看作基础数据库中的一个或多个记录,其该列内的值归入该分类。成员是描述多维数据集中的单元数据时的最低参照层次。例如,下面的关系图加入阴影以表示"时间.[下半年].[第三季度]"成员。


2.2.2元组

元组用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。换言之,元组是一种成员向量;请把元组看作基础数据库中的一个或多个记录,其这些列内的值归入这些分类。一系列关系图给出了元组的各种类型。
多维数据集的阴影部分表示 (时间.[下半年]) 元组。请注意该元组包括了多维数据集的一半,因为它未排除"源"或"路线"维度中的任何信息。
  
下面的关系图加入阴影以表现 (时间.[下半年], 路线.非陆地.航空) 元组。


在 MDX 中,元组根据其复杂性依照语法进行构造。如果它仅由来自单个维度的一个成员组成(通常称作简单元组),则以下语法是可接受的:
  时间.[下半年]
如果它由来自不止一个维度的成员组成,则元组所表示的成员必须括在圆括号内,如以下示例所示。


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

2.2.3 集合

集合是零个、一个或多个元组的有序集合。集合最常用于在 MDX 查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。下面的示例显示具有两个元组的集合:
    { (时间.[上半年], 路线.非陆地.航空), (时间.[下半年], 路线.非陆地.海路) }


集合指以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。在 MDX 语法中,元组用花括号括起来以构造集合。
对MDX的基本内容介绍到这里。