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]
元组、集合
元组用于定义来自多维数据切片;他是由一个或多个维度的单个成员的有序集合组成。元组内不包含来自同一个维度的多个成员(可以理解为坐标),元组用()包围。
如:
(时间.[下半年])
(时间.[下半年],[产品].[手机].[Nokia])
集合(Set)是零个、一个或多个元组的有序集合。集合最常用于在Mdx查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。在Mdx语法中,元组用花括号{}来构造集合
举例,下面是具有两个元组的集合:
{(时间.[上半年],路线.非陆地.航空),(时间.[下半年],路线.非陆地.海路)}
一个集合可包含同一个元组不止一次的出现。这样也是可以的:
{时间.[下半年],时间.[下半年]}
集合值以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。
注意:单个元组的集合不等于元组。如{时间.[下半年]}不等于 时间.[下半年]。
Mdx基本语法结构
SELECT [axis specification] ON COLUMNS,
[axis specification] ON ROWS
FROM
[cube name]
WHERE
[silcer specification]
-
[axis specification]可以看成是轴的成员选择。
- [silcer specification]表示切片上的成员,可以看成过滤信息,[silcer specification]可选,如果没有指定,取系统默认的维度成员作为切片
轴维度和切片器维度
当设计多维表达式(Mdx)查询时,应用程序一般查看多维数据集并将维度集合划分为两个子集:
1.查询轴 - 从此层次结构集中检索多个成员的数据。
2.切片器轴 - 从此层次结构集中检索单个成员的数据。