mdx重要概念

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

语法

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

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

    [属性]是维度的基本构造块。 维度包含一组在属性关系基础上组织而成的属性。具有对外关系的任何属性必须具有与其相关属性关联的唯一键。

  2. 级别(Level):级别的UniqueName为[维度名称].[级别名称],如[year].[2001],同样,如果没有空格,[]可以省略,如year.[2001]。
  3. 成员(Member):成员的UniqueName格式为[维度].(Parent Member UniqueName).[Member Name],如:时间维上的2003年2月份的UniqueName为[2003].[1].[2],中间的1为1季度,因为该维度的结构为年、季、月。
  4. 度量(Measure):度量实际上是属于维度维的成员,也就是说度量(Measure)是任何Cube的一个维度。如:度量Unit Sales的UnqiueName为[Measures].[Unit Sales]

元组、集合

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

如:

(时间.[下半年])

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

集合(Set)是零个、一个或多个元组的有序集合。集合最常用于在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.切片器轴 - 从此层次结构集中检索单个成员的数据。