一、什么是MDX

MDX语句(MultiDimensionalExpressions)是一种语言,支持多维对象与数据的定义和操作。它可以表达在线分析出来数据卡上的选择、计算和一些元数据定义等操作,并赋予用户表现查询结果的能力。
MDX是由Microsoft,Hyperion等公司研究多维查询表达式,是所有OLAP高级分析所采用的核心查询语言。
如同SQL查询一样,每个MDX 查询都要求有数据请求(SELECT子句)、起始点(FROM子句)和筛选(WHERE子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据特定部分。MDX还提供了可靠的函数集,用来对所检索的数据进行操作,同时还具有用户定义函数扩展 MDX的能力。

二、使用方式

1、MDX查询语句
查询所需要的数据。
2、MDX表达式
定制需要的指标。
3、MDX脚本
指定流程由SQL执行生成自定义的效果。

三、MDX中的相关概念

1、多维数据集
2、度量值(量度)
3、维度
4、维度的层次结构
5、维度的级别
6、成员(Member)
指的是维度树上的一个节点,这里有一点需要指出,量度也是一个特殊的维度,所以对于普通维度上的 Member可以有几下几种表示方法: [Customer] 或 [Time].[1996] 等,对于特殊的维度——量度而言,也可以表示一个 Member,如: [Measures].[unitsales] 等。
标识符:[ ]
7、元组(Tuple)
是由若干个Members组成,CUBE上的一个子集(不断开的子CUBE),每一个维度上最多只能有一个 Member,对于一个 Tuple而言至少有一个维度,多则不限,顺序无关,同时对于没有列出来的那就表示为默认的 Member。
标识符:()
示例:
a) ([Regin ].[USA])
b) ([product].[computers],[time].[2008]) 。
8、集(Set)

同一维度上若干个 Members的集合,或者是若干个 Tuples的集合,但这里有一个地方需要注意,那就是如果是若干个 Tuple组成的集合是,各个 Tuple里的 Member之间存在着一定的对应关系。集合的表示方法用大括号“ {} ”,所以可能的表示方法为:
a) {[time].[2008],[time].[2009],[time].[2000]} ,这里 Set是由 同一维度的若干个 Member组成。
b) {([computer],[usa ]),([mobile],[china])} ,这个 Set是由两个 Tuples组成,这里大家可以看到,在第一个 Tuple当中,第一个 Member是名为 computer的产品,所以后面的 Tuple的第一个 Member也必须是一个产品,所以我们这里看到的是 mobile,第一个 Tuple里第二个 Member是一个国家,所以第二个 Tuple的第二个 Member也必须是一个国家名,依次类推。
标识符:{ }

四、基本语法

一个标准的 MDX查询语句就是由我们前面介绍的 MDX的三个基本对象构成,也就是 Member、 Tuple、 Set。

1、SELECT SET ON COLUMNS,
SET ON ROWS
FROM CUBE
WHERE TUPLE
2、SELECT SET ON 0,
SET ON 1
FROM CUBE
WHERE TUPLE

五、简单MDX查询示例

想象一个简单的带有时间、销售地点和度量3个维度的多维数据集,该多维数据集的名称为销售额(即SALES)。其中度量包括销售额和成本。假如想查看2005年前两个季度马萨诸塞州的销售额与成本,如图所示。

我们可以通过下面的MDX获得想要的数据:
SELECT {[MEASURES].[DOLLAR SALES],[MEASURES].[UNIT SALES]} ON COLUMNS,
{[TIME].[2005].[Q1], [TIME].[2005].[Q2]} ON ROWS
FROM [SALES]
WHERE ([CUSTOMER].[MA])

MDX查询的结果本身是一个网格,本质上是另一个多维数据集。下面将这个简单的查询拆开来仔细研究。
关键字SELECT后带需要检索内容的子句。

关键字ON和轴的名称一起使用,以指定数据库的维度显示位置。该示例查询将度量显示为列,将时间段显示为行。

MDX用大括号{ }引用来自某个特点维度或者多个维度的一组元素。这个简单的查询在其两个轴中的每一个上都只有一个维度(度量维度和时间维度)。元素间用逗号隔开。元素名称用方括号引用,并且不同组成部分之间用点号分隔。

MDX能够的FROM子句指明用于查询数据的多维数据集。这与SQL中的FROM子句类似。
WHERE子句指定在列或行(或者其他轴上)不出现的多维数据集其他维度的成员。如果不对某个维度指定一个成员,MDX将使用默认成员。WHERE子句是可选的。

提示:MDX不是大小写敏感的,可以随心所欲的混用字母大小写。

六、MDX中的简单函数和操作符

1、逗号(,)与冒号(:)
可以通过枚举元素并用逗号来隔开构造一个集,例如上面示例中用到的例子。
{[TIME].[2005].[Q1], [TIME].[2005].[Q2]}
该表达式产生一个包含2005年第一季度和第二季度的集。
冒号用同一级别的两个成员作为端点,来表示这两个端点间的所有成员(与EXCEL中的指定单元格范围的用法类似)。在冒号两边可以是相同的成员,表示集中只有一个成员。例如:
{[TIME].[2005].[SEP]: [TIME].[2006].[MAR]}
该表达式表示从2005年9月到2006年3月的所有月份。
2、.MEMBERS 获取所有成员
无论用于检索,还是作为更复杂的操作的基础,获得一个维度、层次结构或者级别的成员的集是非常普遍的操作。维度、层次结构或者级别放置在.MEMBERS操作符的左边,可以返回由该元数据范围内所有成员构成的集。
例如:
[TIME].[MONTHS].MEMBERS
该表达式返回时间维度下的月这一级别的所有成员(即所有月份)。
3、.PREMEMBER获取指定成员的前一个成员
4、.NEXTMEMBER获取指定成员的后一个成员
5、使用.CHILDREN获得一个成员的子成员
另外一个常用的查询时获得一个成员的子成员。这么做的目的可能是执行一个向下钻的操作,或者为了方便的获得基于一个共同父成员的范围内的成员。例如:
[TIME].[YEARS].[2005].CHILDREN
该表达式返回2005年的所有孩子(即2005年的所有月份)。
6、.FIRSTCHILD 获取指定成员的第一个子成员
7、.LASTCHILD获取指定成员的最后一个子成员

七、更多基本词汇

1、DESCENDANTS() 获取一个成员的后代成员。
直接子代之下的后代成员,可以使用DESCENDANTS()。
语法:
DESCENDANTS(MEMBER,LEVEL,FALG)
返回MEMBER之下与LEVEL相关的成员,并且可选参数FLAG。
FLAG的可选值有:
SELF
BEFORE
AFTER
SELF_AND_BEFORE
SELF_AND_ AFTER
SELF_ BEFORE _BEFORE
LEAVES
SELF仅仅指MEMBER以下LEVEL级别上的成员,这是最常用的选项,如果忽略FLAG参数,那么默认使用SELF。例如:
DESCENDANTS([TIME].[YEARS].[2005],[TIME].[MONTH])
该将返回2005年的所有月份。
SELF_AND_BEFORE将返回MEMBER所在级别已经LEVEL级别之间的所有成员,也就是包含MEMBER在内、从LEVEL级别到MEMBER级别的所有成员。例如:
DESCENDANTS([TIME].[YEARS].[2005],[TIME].[MONTHS],
SELF_AND_BEFORE)
该表达式将返回2005年及该年的所有季度和所有月份。
2、FILTER() 过滤
FILTER()函数用来缩减集(过滤),它表示在结果集中只包含那些符合特定标准的元素。FILTER()采用一个集和一个布尔表达式作为它的参数,并且当布尔表达式为真时,返回该集的子集。
语法:
FILTER(SET,BOOLEAN-EXPRESSION)
例如:
FILTER({[PRODUCT].[PRODUCTCATEGORY].MEMBERS},
[MEASURES].[DOLLARSALES]>=500)
该表达式将返回相关美元销售额在500元以上的某类产品构成的集。
FILTER()可以操作元组构成的任何集,而不仅仅是以个维度的成员构成的集。
3、ORDER() 排序
ORDER()用来根据相关数据值给集的元组排序。
语法:
ORDER (SET,EXPRESSION,FLAG)
ORDER()的参数包括一个集、排序标准,还有一个可选的标志,该标志指示排序原则(升序或降序,包含或者忽略元组间的层次关系)。ORDER()返回的集由原来的集的元组构成,但按照新指定的顺序重新排序。
例如:
ORDER([PRODUCT].[PRODUCTCATEGORY].MEMBERS},
[MEASURES].[DOLLARSALES],BDESC)
该表达式将按销售额对产品进行降序排序(BDESC将忽略层次结构)。
4、.CURRENTMEMBER 获取当前成员
语法:
DIMENSION.CURRENTMEMBER
返回该维度的当前成员。
5、.PARENT 获取指定成员的父对象成员
语法:
MEMBER.PARENT
返回对给定成员的父对象成员。
6、NONEMPTY去除空切片
在一个多维空间中,数据稀疏现象很常见。MDX中提供了从查询的结果中移除完全为空的切片的方法,那就是使用NONEMPTY关键字。去除空切片需要做的仅仅是在待移除空切片的轴前面加上NONEMPTY关键字。NONEMPTY可以用在任何轴、维度和元组上。
7、去年同期的引用和计算
一个经常会用到的计算是查询一年前同一时期的数据,或者上一个季度同一时期和上周同一天的数据。可以使用PARALLELPERIOD()函数。
语法:
PARALLELPERIOD(LEVEL,INDEX,MEMBER)
该函数首先的到级别LEVEL中成员MEMBER的主席,然后从该祖先的兄弟成员中找到编号比该祖先小INDEX的成员(称为姻亲),最后返回该姻亲的后代成员中MEMBER的堂兄弟。
例如:
PARALLELPERIOD([YEARS],1,[MAY2006])
将返回[MAY2005]

MDX语句(初学者)相关推荐

  1. SSAS的MDX语句整理

    1.基本语法: (1)基本语法: select 在列上展示的成员集合 on 列,在行上面展示的成员集 on 行 from cube where 切片 第一个on 列的列可以用0来替代,on 行的行可以 ...

  2. MDX学习笔记(整理) MDX语法

    1.1.members和Children的用法. select [Measures].[Internet Sales Count] on columns, [客户].[全名] on rows from ...

  3. SSAS的MDX的基础函数(三),及聚合函数

    1.  Filter函数 Filter(Set_Expression, Logical_Expression )返回根据搜索条件对指定集进行筛选后得到的集. Filter 函数对指定集中的每个元组计算 ...

  4. MySQL导入mdx_浅谈MDX数据库

    MDX是"MultiDimensional eXpression"的缩写,这是一种类似于SQL的数据库查询语言.这种查询语言专门用于OLAP (Online analytical ...

  5. mdx格式mysql_Schema Workbench 开发mdx和模式文件

    一.前言 安装了saiku之后,每次修改schema文件,非常耗时,每次都要经历若干步骤:修改xml.上传.重启才能生效,并且非常不利于学习和理解MDX和模式文件,踌躇之际,发现了这个工具,十分小巧方 ...

  6. mdx格式mysql_Saiku_学习_02_Schema Workbench 开发mdx和模式文件

    一.前言 saiku的查询都是通过cube来进行的.因此每当我们要进行一次多维度查询时,都要先修改xml.上传.重启才能生效,不仅效率低,还不利于学习和理解MDX和模式文件. 通过 workbench ...

  7. MDX的实例讲解(排名前15的小例子)

    MDX语句的特点: 大小写不分.members等于Members;downloads等于Downloads 维度的统计量指定要选择准确.downloads等于[Downloads] []可以少,不能多 ...

  8. MDX基本概念和语法

    MDX基本概念和语法 1 MDX简介 1.1 MDX重要概念 1.2 维度(Dimensions).级别(Levels).成员(Members)和度量值(Measures) 1.3 轴维度和切片器维度 ...

  9. mdx java_MDX大部分常用函数

    4. MDX函数列表 函数分类和说明基本上是直接从SQLServer Analysis Service拷贝的. 4.1 维度函数 表示返回值为Dimension的函数. 4.1.1 Dimension ...

最新文章

  1. @echo 与 echo的区别
  2. Three.js 新旧版本区别
  3. “最严”整改后的海淀黄庄 :学费收取仍有猫腻
  4. 9-3:C++多态之多态的实现原理之虚函数表,虚函数表指针静态绑定和动态绑定
  5. css动漫效果库,Animate.css功能强大的纯CSS3动画库 - 资源分享
  6. mysql查询每个月入职人数_按年份统计入职人数sql语句
  7. Helix QAC 2021.1
  8. python发送钉钉消息
  9. 抖音极速版/快手极速版自动浏览
  10. oracle中if语句用法,Oracle IF语句的使用 | 学步园
  11. Segmentation简记5-AuxNet: Auxiliary tasks enhanced Semantic Segmentation for Automated Driving
  12. 【计算机三级信息安全】访问控制模型
  13. 常用Linux版本虚拟机的使用比较
  14. Excel的Sumif函数
  15. 自动打开html网页脚本,开启网页全屏插件(自动开启网页全屏脚本js插件)
  16. Axure自定义Echarts交互图
  17. 《introduction to information retrieval》信息检索学习笔记1 布尔检索
  18. 14岁妹妹欲捐骨髓救乱患红血病哥哥
  19. discord Bot 实现机器人发送私信验证码
  20. linux 查看nc文件,linux下nc的使用

热门文章

  1. Linux倒序赋值用molloc函数,请教一个C语言函数malloc的问题
  2. Games101 作业6 提高内容(SAH算法)
  3. 高等代数 矩阵的运算(第4章)1 加法,数量乘法,矩阵乘法,一些特殊矩阵
  4. 已解决] 关于colorex 颜色插件增强版的疑问 [复制链接]
  5. 浪潮信息m6服务器性能,M6四路服务器——浪潮信息新品性能显著
  6. 【自然语言处理】【知识图谱】MTransE:用于交叉知识对齐的多语言知识图谱嵌入
  7. 【嵌入式开发-AD19】六文搞定Altium Designer-第一章:AD介绍及原理图库的创建
  8. py229基于python的网上咖啡商城#毕业设计
  9. 如何用java解一元二次方程方程
  10. Unity制作批量配音制作工具