MDX多维查询

MDX是多维数据库(OLAP)的查询语言,本文介绍了其基本语法、轴的概念、切片维度、元组和集合、维度成员、集合操作以及计算成员。MDX查询语句包含SELECT、FROM和WHERE部分,可用于构建复杂的多维查询,例如在不同维度上进行数据切片和聚合。
摘要由CSDN通过智能技术生成

MDX

Created 星期一 24 十月 2016

MDX(Multidimensional Expressions)是多维 数据库(OLAP 数据库)的查询语言.
Mondrian 会解析MDX,转换成SQL 来查询关系数据库(可能是多条查询)。
MDX 的内容很多,功能强大,这里只介绍最基础和最重要的部分。

1 基本语法

以下是里两条MDX 查询语句及其查询结果
ð 语句1:
SELECT
{ [Measures].[Dollar Sales], [Measures].[Unit Sales] } on columns,
{ [Time].[Q1, 2005], [Time].[Q2, 2005] } on rows
FROM [Sales]
WHERE ([Customer].[MA])

语句 2
SELECT
{ [Time].[Q1, 2005], [Time].[Q2, 2005], [Time].[Q3, 2005] } on columns,
{ [Customer].[MA], [Customer].[CT] } on rows
FROM Sales
WHERE ( [Measures].[Dollar Sales] )
第一条语句查询对[Customer].[MA]这个客户在 2005 年第一、第二季度的销售额、报表期销售额。
第二条语句查询对[Customer].[MA], [Customer].[CT]这两个客户在 2005 年前三个季度的销售额。
可以看到,mdx 有类似 sql 的结构,同样有 select、from、where 这三部分。但也有很多不同。

  1. Select 字句指定一个集合,把它放到某个上。
  2. From 字句说明要从哪个数据立方体来查询。
  3. 方括号([])用于维度名、层次名、维度成员名,避免名字和函数混淆(函数名

是不加方括号的)。

  1. Where 字句指定切片,即对不出现在轴上的维度的成员的限定。
  2. Mdx 没有 group by 字句。其实分组是隐含的。
  3. Mdx 没有 order by 字句。排序只会对某个轴进行,通过使用排序函数。
  4. 和 sql 一样,mdx 也是不区分大小写的,并且可以随意分行。
  5. Mdx 中也可以包含注释,除了支持 sql 的--注释外还支持//和/* ... */注释。

2 轴

用 on {axis}语法来把维度分配到轴(Axis,复数 Axes)上,一个查询可以有多个轴。
不同轴用逗号分隔,分配的顺序是没关系的。但如果把轴调换(如 A on columns, B on rows 改成 A on rows, B on columns),结果的行和列也会转置过来。
轴用 axis(0),axis(1),axis(2)...表示,前五个轴可以使用别名 Columns,Rows,Pages,Chapters,Sections。因此 on Columns 等价于 on axis(0)。超过 5 个轴时只能用 axis(5),axis(6)...来表示(极少会需要这么多的轴)。
很多实现(包括 Mondrian)支持仅用数字表示轴,因此 on Columns 可以写成 on 0。axis(0)和别名表示可以混用,例如下面语句是可以的:
SELECT
{ [Time].[Q1, 2005], [Time].[Q2, 2005] } on axis(0),
{ [Customer].[MA], [Customer].[CT] } on rows
FROM Sales
轴必须从 0 开始,并且连续,不能跳过。下面的是不可以的:
SELECT
{ [Time].[Q1, 2005], [Time].[Q2, 2005] } on rows,
{ [Customer].[MA], [Customer].[CT] } on pages
FROM Sales
错误,跳过了轴 axis(0)(columns) 。

在大多查询中,轴一般是两个。一个轴也可以,甚至 0 个轴。
如果轴多于两个,就没法在平面上表示。如果维度多于两个,需要把多个维度(交叉后)放到一个轴上。

3 切片维度

切片(Slice)维度就是出现在 MDX 语句 WHERE 子句中的维度,跟 SQL 一样,表示对数据集的限制。例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值