MDX多维查询

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 一样,表示对数据集的限制。例如 MDX 语句:
SELECT
{[Product].[All Products].[Food], [Product].[All Products].[Drink]} ON COLUMNS
FRO

MDX 中的重要概念 使用成员、元组和集 (MDX) MDX 语法元素 标识符 表达式 使用多维数据集表达式和子多维数据集表达式 使用维度表达式 使用成员表达式 使用元组表达式 使用集表达式 使用标量表达式 使用空值 运算符(MDX 语法) 算术运算符 位运算符 比较运算符 串联运算符 集运算符 一元运算符 赋值运算符 函数(MDX 语法) 使用字符串函数 使用数学函数 使用逻辑函数 使用成员函数 使用元组函数 使用集函数 使用维度函数、层次结构函数和级别函数 使用存储过程 (MDX) 注释(MDX 语法) 保留关键字(MDX 语法) MDX 查询基础知识 基本 MDX 查询 EXISTING 关键字 用查询轴和切片器轴限定查询 指定查询轴的内容 指定切片器轴的内容 在简单示例中使用查询轴和切片器轴 在查询中建立多维数据集上下文 在 MDX 中生成子多维数据集 在 MDX 中生成命名集 创建查询作用域的命名集 创建会话作用域的命名集 在 MDX 中生成计算成员 在 MDX 中生成单元计算 创建和使用属性值 操作数据 修改数据 使用变量和参数 MDX 脚本编写基础知识 基本 MDX 脚本 管理作用域和上下文 错误处理 支持的 MDX MDX 语言参考 MDX 语法约定 MDX 语句参考 MDX 脚本编写语句 MDX 数据定义语句 MDX 数据操作语句 MDX 运算符参考 --(注释) -(排除) -(负) -(减) *(叉积) *(乘) /(除) ^(幂) /*...*/(注释) //(注释) :(范围) +(加) +(正) +(字符串串联) +(联合) <(小于) <=(小于或等于) (不等于) =(等于) >(大于) >=(大于或等于) AND IS NOT OR XOR MDX 函数参考 AddCalculatedMembers Aggregate AllMembers Ancestor Ancestors Ascendants Avg Axis BottomCount BottomPercent BottomSum CalculationCurrentPass CalculationPassValue Children ClosingPeriod CoalesceEmpty Correlation Count(维度) Count(层次结构级别) Count(集) Count(元组) Cousin Covariance CovarianceN Crossjoin Current CurrentMember CurrentOrdinal CustomData DataMember DefaultMember Descendants Dimension Dimensions Distinct DistinctCount DrilldownLevel DrilldownLevelBottom DrilldownLevelTop DrilldownMember DrilldownMemberBottom DrilldownMemberTop DrillupLevel DrillupMember Error Except Exists Extract Filter FirstChild FirstSibling Generate Head Hierarchize Hierarchy IIf Intersect IsAncestor IsEmpty IsGeneration IsLeaf IsSibling Item(成员) Item(元组) KPIGoal KPIStatus KPITrend KPIWeight KPICurrentTimeMember KPIValue Lag LastChild LastPeriods LastSibling Lead Leaves Level Levels LinkMember LinRegIntercept LinRegPoint LinRegR2 LinRegSlope LinRegVariance LookupCube Max MeasureGroupMeasures Median Members(集) Members(字符串) MemberToStr MemberValue Min Mtd Name NameToSet NextMember NonEmpty NonEmptyCrossjoin OpeningPeriod Order Ordinal ParallelPeriod Parent PeriodsToDate Predict PrevMember Properties Qtd Rank RollupChildren Root SetToArray SetToStr Sib
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值