一个层次结构。想一想,对于OLAP中的某一个主题分析中的某个维度,一般也只会有一种固有级别方案。
2:语法:
最基本的语法:select 轴1,轴2,…… from 立方体模型名 where 切片
可以看到,非常类似于SQL的语法:Select 列1,列2…… from 表1,表2…… where 条件子句。
首先,需要理解轴的概念:
轴:相当于SQL里的列,想象轴,需要有点立体概念,或者,我们把问题简化,对于平面表的展示,只会存在两个轴,也就是列轴和行轴。现有的大多数OLAP展示,也只体现这两个轴,我们公司的产品也不例外。说具体一点,轴对应于一个集合。
集合:由元组形成,
元组:可包括多个维度中的成员,也可包括来自同一个维度的多个成员。
成员:维度中一次或多次数据出现的项。
再看看立方体模型:这个很好理解,也就是主题分析时形成的模型方案了,MDX只支持单一模型。
最后看一下 切片:这和SQL中的筛选一样。不过,因为OLAP的数据是立体的,多维的,要变成平面,就需要切啊,切啊,把一些不需要展示的维度设定固定值(也就是切一下)。注意:当不指定任何切片时,一般的实现是将未出现的维度的默认成员值做为切片值。
3:计算成员列
一般用 With Member 计算成员 as '' 来生成计算成员列,然后在Select中引用。
as中的表达式,可以使用MDX函数。
4:MDX函数
函数很多,除了常见的数值,逻辑,字符串处理,特有的是:维度/层次/级别函数,成员函数,聚合函数。
某些函数是具有很强的业务性的:比如 BottomSum:取出指定和值的底部若干行。这类函数,需要在实际应用在才能体会。
5:SOLVE_ORDER
这个用来指定计算成员中的计算传递顺序,因为计算成员间有一个计算传递和顺序的问题。
6:成员属性
属性作为一种扩充,也就是将某些列作为维度的扩充值,进行补充说明。一般在定制立方体模型时确定。在我们的实现中,还将属性作为了一种配置方案,比如 Caption属性用来作为维度的显示值,Name属性作为标识值。这个具体要看前端展示的解释方式