MDX(multi-dimensional expressions)多维表达式是一种语法,支持多维对象与数据的定义和操作,标准的OLAP查询语言

MDX提供的一些功能 也可以由SQL提供。但是对多维对象的处理MDX比sql更直观有效。

MDX主要概念:维度(dimensions)、级别(levels)、成员(Members)和度量值(measures)

单元(cells)、元组(Tuples)和集合(Sets)

轴维度和切片维度(AXIS and SLicer Dimensions)

维度:即观察对象的个角度,直接用【】包围,如我选择时间维就用[Time],然后在维度下面在选择它对应的级别。

级别(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]

UniqueName是OLAP元素内部的表示法,在Mdx查询语言中,可以使用UniqueName来表示元素。

Mdx还提供模糊和其他等价的元素的表示方式:

<1>省略维度名表示级别,如果一个维度的级别名在整个Cube中是唯一的,那么可以省略维度名来查询级别。如Product.[Product Family]可以写成[Product Family]

<2>省略维度名称表示成员。如果省略维度名,可以标示该维度最高级别的成员,如[Time].[2000]可以写成[2000],[Measures].[Unit Sales]可以写成[Unit Sales]。

<3>成员挂在级别下,即成员不一定要写成[维度].(Parent  Member  UniqueName).[Member Name],可以写成[维度].[级别].[Member Name],如2000年3月可以写成[Time].[Months].[3]

模糊查询表示法,都基于不会重复的假设,如果有重复的元素,取第一个查找的元素作为查询结果,可能发生错误,因此,建议使用完备的表示法

元组、集合

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

如:

(时间.[下半年])

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

如果一个元组是由单个维度的成员组成,那么可以不用()包围,即(时间.[下半年])可表示为:时间.[下半年]

集合(Set)是零个、一个或多个元组的有序集合。集合最常用于在Mdx查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。在Mdx语法中,元组用花括号{}来构造集合

举例,下面是具有两个元组的集合:

{(时间.[上半年],路线.非陆地.航空),(时间.[下半年],路线.非陆地.海路)}

一个集合可包含同一个元组不止一次的出现。这样也是可以的:

{时间.[下半年],时间.[下半年]}

集合值以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。

注意:单个元组的集合不等于元组。如{时间.[下半年]}不等于  时间.[下半年]。

在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、切片器维度,为单个成员检索数据的维度。

因为轴维度和切片器维度都从要查询的多维数据集的多个维度构造,所以用这些术语将要查询的多维数据集使用的维度与在由Mdx查询返回的多维数据集中创建的维度区分开。

例如:

假定存在名为TestCube的多维数据集,具有两个名为Route和Time的简单维度。因为多维数据集的度量值是Measures维度的一部分,所以该多维数据集总共有三个维度。查询要提供一个矩阵,可以在该矩阵内跨路线和时间比较Packages度量值

在下面的Mdx查询实例中,Route和Time维度用作轴维度,Measures维度用作切片器维度。Members函数表明要用于构造集合的维度或级别的成员,而不必再Mdx查询中显示声明给定维度或级别的各个成员。

SELECT

{Route.nonground.Members} ON COLUMNS

{Time.[1st half].Members} ON ROWS

FROM

TestCube

WHERE  ([Mesures].[Packages])

指定维度的内容:

轴维度决定多维结果结果集的边缘。多维表达式(Mdx)使用Select子句通过将集合指派到特定轴来指定轴维度。

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

<axis_specification>语法可分解为:

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

<axis_name>::=COLUMNS|ROWS

轴维度上的只能接受集合<set>,如果是手动指定成员集合,必须用{}包围,如果使用Mdx集合函数,则不需要用{}包围,因为集合函数返回值为集合。一个轴维度上可以包含几个维度,如:

SELECT

{

[Measures].[Sales_Dollars], [Measures].[Sales_Units],

[Measures].[Sales_Units_max]

}

ON

columns,

CrossJoin(

{

[State].[Canada], [State].[Mexico], [State].[USA]

},

{

[Product].[Bread], [Product].[Dairy], [Product].[Meat]

}

) ON rows

FROM

sales

WHERE

([Time].[All Time], [Employee].[All Employee])

Columns轴上是手工指定成员元组集合,用{}包围,Rows轴使用集合函数CrossJoin,该函数返回两个集合的交集,Rows轴上包含两个维度State和Product。

指定切片器维度的内容

切片器维度筛选器多维数据,可以通过将切片器维度包含在多维表达式(Mdx)查询的Where子句来限制所返回的数据。

假定未显示指派给轴的维度是切片器维度,并用其默认成员进行筛选。则默认成员为最高级别的的第一个成员。

切片器维度还可通过Mdx语法的Where子句进行显示指定。Where子句的语法可分解为:

[WHERE  [<silcer_specification>]]

切片器维度只可接受评估为单个元组的表示式。如下例所示:

WHERE  ([Time].[1st half],[Route].[nonground])

转载于:https://www.cnblogs.com/lotorless/p/4333253.html

OLAP_MDX学习整理相关推荐

  1. Java设计模式(学习整理)---命令模式

    设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...

  2. 2019.07.30 学习整理

    2019.07.30 学习整理 数据类型 1. 什么是数据类型 数据类型指的就是变量值的不同类型 2. 为何对数据分类? 变量的是用来反映状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数 ...

  3. java基础学习整理(一)

    java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...

  4. Elastic Nodes Example 翻译及学习整理

    文章目录 Elastic Nodes Example 翻译及学习整理 题记: 简介: Node Class Definition Edge Class Definition GraphWidget C ...

  5. ACM竞赛学习整理--矩阵运算

    ACM竞赛学习整理–矩阵运算 了解矩阵类 [任务] 实现矩阵的基本变换 [接口] 结构体:Matrix 成员变量: int n,m 矩阵大小 int a[][] 矩阵内容 重载运算符: +.-.x 成 ...

  6. ACM竞赛学习整理开篇之01背包问题

    ACM竞赛学习整理开篇之01背包问题. 最近,偶然的一次机会让我关注信息奥赛的一些内容.发现其中的内容很有趣,是学习编程的一条很好的路径,又能很好地将数学和编程联系到一起.在csdn里看到了不少同好也 ...

  7. Vue-Cli 学习整理【转载】

    Vue-Cli 学习整理 坚果 程序猿/艺术 ​关注他 21 人赞同了该文章 1. vue-cli(vue脚手架)全集 1.1. vue-cli2脚手架 1.1.1. nodejs/npm环境安装 1 ...

  8. Wix学习整理(2)——HelloWorld安装添加UI

    在前一篇随笔Wix学习整理(1)--快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程.下面我们修改Wix源文件来给安装程序添加UI. 1 Wix的预定义UI简介 ...

  9. 2019.08.08学习整理

    2019.08.08学习整理 文件的高级应用 1.可读.可写 r+t: 可读.可写 w+t: 可写.可读 a+t: 可追加.可读 # wt with open('36w.txt', 'wt', enc ...

最新文章

  1. 每周算法讲堂 floyd
  2. linux安装软件tar.bz,CentOS下的几种软件安装方式
  3. Python 闭包相关之late binding机制
  4. 基于JavaEE实现网上拍卖系统
  5. mysql strstr_实现 strStr() 函数-算法刷题
  6. Python 标准库 —— uuid(生成唯一 ID)
  7. Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp + 输出方案
  8. c语言动态规划公共字符串,最长公共子串 C语言 动态规划
  9. html5 注册协议弹出层,js制作带有遮罩弹出层实现登录注册表单特效代码分享
  10. Shell脚本基本规则
  11. html 关于一行两列 高度不定的实现(不用table)
  12. 超难的75道逻辑思维题
  13. 用python爬取图片和搞笑段子
  14. 夺命雷公狗---微信开发54----微信js-sdk接口开发(1)之快速入门
  15. linux系统每次开机分辨率,解决linux分辨率设置过高 不能进入图形界面
  16. 机械设计基础类毕业论文文献都有哪些?
  17. 简述WebS简述WebService与.NET Remoting的区别及适应场合
  18. GTX1060 Windows7/Windows8/Windows8.1 旧版显卡驱动下载链接
  19. 全国省市json文件
  20. Uncode系列开源后端开发组件

热门文章

  1. QQ录屏|意外关机|视频丢失 找回 视频恢复|视频损坏修复 方案
  2. python哨兵循环_Python哨兵控制循环
  3. 【微信小程序】将base64图片保存至本地
  4. 01 | 论文「外审」到底看什么?
  5. Unity 回合制战斗系统(中级篇)
  6. 解析获取华为手表主题watchface hwt扩展名的包中的素材
  7. 一份深入解析Java虚拟机HotSpot手册,让我卷成美团架构师
  8. 2022危险化学品经营单位安全管理人员考试题库及在线模拟考试
  9. pypi-server搭建,pypi-server踩坑,使用twine上传
  10. js拼接URL字符串