SQL2000联机丛书:基本 MDX

本次摘录 来源于
SQL2000联机丛书中 基本 MDX概述
为的是对MDX有个概观的认识


基本 MDX

多维表达式 (MDX) 命令使您得以查询多维数据集之类的多维对象并返回多维数据集。

与 SQL 的情况一样,MDX 查询的作者在编写查询前必须确定所请求数据集的结构。

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

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

基本 MDX 语法——SELECT 语句
在 MDX 中,SELECT 语句用于指定包含多维数据的子集的数据集。为讨论 MDX SELECT 语句的各种语法元素,本主题提出一个基本 MDX 查询示例并将其分解为本身的各种语法元素以讨论各个元素的用途和结构。

若要指定数据集,MDX 查询必须包含有关下列各项的信息:

轴的数目。最多可在 MDX 查询中指定 128 个轴。
要包括在 MDX 查询的各个轴上的来自各个维度的成员。
设置 MDX 查询上下文的多维数据集的名称。
来自切片器维度的成员,在该维度上对来自轴维度的成员进行数据切片。
这些信息可能很复杂。如您在本主题中将看到的,MDX 语法可以简单且直观的方式使用 MDX SELECT 语句提供这类信息。

基本 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 维度的特定成员。


MDX SELECT 语句支持 WITH 关键字之类的其它可选语法,
并支持使用 MDX 函数通过计算应包含在轴或切片器维度中的内容来构造成员。

MDX SELECT 语句的语法格式与 SQL 语法类似;
可是用户将注意到以下几个显著区别:

MDX 语法通过用花括号({ 和 } 字符)括住元组或成员来辨别集合。


MDX 查询在 SELECT 语句中最多可以有 128 个轴维度,但只有前 5 个轴有别名。
轴可以用其在 MDX 查询中的顺序位置或者用其别名(如果给它指派了别名的话)来引用。
在上面的 MDX 查询示例中,使用了 COLUMNS 和 ROWS 轴别名。
此 MDX 查询还可以使用各个轴的顺序位置用以下方式编写:
SELECT
   { [Measures].[Unit Sales], [Measures].[Store Sales] } ON AXIS(0),
   { [Time].[1997], [Time].[1998] } ON AXIS(1)
FROM Sales
WHERE ( [Store].[USA].[CA] )

如同 SQL 查询一样,FROM 子句为 MDX 查询指定数据的源。
然而,与 SQL 查询不同的是,MDX 查询中的 FROM 子句被限定为单个多维数据集。
来自其它多维数据集的信息也可以进行检索,方法是使用 LookupCube 函数逐个值地进行。


WHERE 子句用于描述切片器维度。
如果某个维度没有作为 WHERE 子句的一部分提出,
则 Microsoft SQL Server 2000 Analysis Services
假定任何未指派给轴维度的维度均为切片器维度,
并用其默认成员对该维度进行筛选。
WHERE 子句可以为指定维度更改筛选进程,从而实现对所包含数据的精确控制。

指定轴维度的内容
轴维度决定多维结果集的边缘。
多维表达式 (MDX) 使用 SELECT 子句通过将集合指派到特定轴来指定轴维度。
以下信息描述在 MDX 中怎样处理这种指派。

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

<axis_specification> 语法可分解为:

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

<axis_name> ::= COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS | AXIS(<index>)

每个轴维度与一个数字相关联:0 对应于 x 轴,1 对应于 y 轴,2 对应于 z 轴,等等。
<index> 值是轴号。
对于前 5 个轴,COLUMNS、ROWS、PAGES、SECTIONS 和 CHAPTERS 这几个别名
可分别代替 AXIS(0)、AXIS(1)、AXIS(2)、AXIS(3) 和 AXIS(4) 使用。

MDX 查询无法跳过轴。
也就是说,包含一个或多个 <axis_name> 值的查询不能排除低编号轴或中间轴。
例如,查询不能有 ROWS 轴而无 COLUMNS 轴,或有 COLUMNS 和 PAGES 轴而无 ROWS 轴。

然而可以指定不带轴的 SELECT 子句(即空 SELECT 子句)。
这种情况下,所有维度均为切片器维度,并且 MDX 查询选择一个单元。
各个 <set> 值定义轴的内容。

posted on 2006-12-05 14:31  freeliver54  阅读(1130)  评论(0编辑  收藏  举报

导航