`
jacky6024
  • 浏览: 81283 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

多维查询表达式——MDX教程系列一

阅读更多

什么是 MDX

MDX 的全称是 Mutil Dimensional Expressions ,是由 Microsoft Hyperion 等公司研究多维查询表达式,是所有 OLAP 高级分析所采用的核心查询语言。

MDX 可以用来进行以下操作:

1.         calculated members (计算成员)

2.         Calculated Cells (计算单元)

3.         Security Settion (安全设置)

4.         Custom member formula ( 自定义函数 )

5.         Custom level rollup ()

6.         Actions (动作)

7.         Named sets ( 命名集合 )

8.         Server side formatting (服务器数据格式化)

 

MDX 的基本结构

MDX 的基本结构有三种: Members Tuple Set

1.         Members :指的是维度树上的一个节点,这里有一点需要指出,量度也是一个特殊的维度,所以对于普通维度上的 Member 可以有几下几种表示方法: [Customer] [Time].[1996] 等,对于特殊的维度——量度而言,也可以表示一个 Member ,如: [Measures].[ unit sales] 等。

Member 的表示方法就是用中括号的形式,“ [……] ”。

 

2.         Tuple :是由若干个 Members 组成,每一个维度上最多只能有一个 Member ,对于一个 Tuple 而言至少有一个维度,多则不限,同时对于没有列出来的那就表示为默认的 Member Tuple 的表示方法是小括号“ () ”,因为其又有 Member 构成,所以通常的格式为“ ([…],[…][…],…) ”;示例:

a)         ([Regin ].[USA])

b)        ([product].[ computers],[time].[2008])

3.         Sets :同一维度上若干个 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 查询语句就是由我们前面介绍的 MDX 的三个基本对象构成,也就是 Member Tuple Set

一个标准的 MDX 查询的语法如下:

SELECT Set ON COLUMNS,

       Set ON ROWS

FROM Cube

WHERE Tuple

示例:

SELECT

{[time].[ 1997],[time].[1998]}

ON COLUMNS,

{([product].[drink],[customer].[gender].[F]),( [product].[food],[customer].[gender].[M])}

ON ROWS

FROM

[Sales]

WHERE

([Measures].[ StoreSales ])

这个 MDX 查询就表示:查询时间为 1997 1998 两年的 drink 类产品,女消费者和 food 类产品男消费者的 Store Sales

MDX 表达式

children

它的作用是列出指定分类下的所有项,如

1.         [product type].[food].children ,这就表示列出产品类型为 food 的所有产品。

2.         [region ].[country].children ,这就表示列出所有的国家名称。

该函数不能用在 Tuple

 

CurrentMember

当前某个 Member ,举例:

某个产品销售额贡献度计算,对于某一个产品或一种类型的产品而言它的销售额贡献度指的是它的销售额与所有产品销售额的比值,此时,如果我们要用 MDX 来计算这个贡献度的值是可以采用 CurrentMember 来实现,如:

此时我们的 MDX 表达可以是:

([product].currentMember ,[ Measures].[stores sales]) / ([product].[ all products],[Measures].[stores sales])

同时因为默认情况下指的就是 currentMember ,所以上面的 currentMember 可以去掉:

([Measures].[ stores sales]) / ([product].[ all products],[Measures].[stores sales])

所有 MDX 表达式的写法是由若干个 Tuple 组成 ,比如上面的这个表达式就是由两个 Tuple 的相除构成。

prevMember nextMember

这两个元素分别指的是当前 Member 的上一个 Member 和当前 Member 的下一个 Member

利用这两个元素我们可以来实现实际当中常见的同期比(前期比),所谓的同期比指的 是:

(当前 member- 当前 member 的前一个 member / 当前 member 的前一个 member

对应到 MDX 表达式我们可以用 prevMember nextMember 来实现,如:

(([time].currentMember ,[ Measures].[store sales])-([time].prevMember ,[Measures].[storessales ]))

/

([time].prevMember ,[ Measures].[store sales])

当然因为 currentMember 可以省略,所以上面的写法也可以是:

(([ Measures ].[store sales])-([time].prevMember ,[Measures].[storessales ]))

/

([time].prevMember ,[ Measures].[store sales])

Parents FirstChild Descendants

下面的这张图就显示一个树

这张图中 all 这个节点是 97 98 parents 97 98 也是 all children ,同时 97 all firstChild

如果我们要取到 97 下的所有的月份,那么我们就需要用 Descendants 来实现,它的语法是:

Descendants( [time].[97],month) ,这里的 month 是一个 level 的名称。所有它的格式为: Descendants([ 一个 Member], 一个 level 的名称 )

比如在食品销售当中,我们要知道哪一类的食品更受消费者欢迎,这样我们需要只知道各类食品的销量,比如食物( food )、饮料 (drink) 等的具体销量 (unit sales) ,然后再计算出所有食品总的销量( total sales , 如果采用 MDX 我们可以很容易的实现,采用 MDX 后的计算哪种食品更受欢迎的表达式如下:

([food].currentMember ,[ Measures].[unit sales])

/

([food].currentMember.parent ,[ Measures].[total sales])

因为 currentMember 可以省略,所以上面的写法又可以是:

( [ Measures].[unit sales])

/

([food].currentMember.parent ,[ Measures].[total sales])

 

未完待续 ……

分享到:
评论
4 楼 chancong 2012-05-18  
貌似跟杨大川视频上讲的内容很像
3 楼 珊珊来了 2010-04-13  
写得很清晰,谢谢。
2 楼 成溪先生 2010-03-19  
 
1 楼 qqwjz 2009-07-08  

相关推荐

    MDX教程 Introduction to Multidimensional Expressions

    为了表达对这些数据的查询,OLE DB for OLAP 使用了一种功能强大的表达式语法——多维表达式(MDX)。本文将详细介绍 MDX 的核心概念及其在实际应用中的运用。 #### 多维表达式(MDX) ##### Cube 概念 在 OLAP ...

    MDX指导手册——介绍MDX的好资料

    多维表达式(Multidimensional Expressions,简称MDX)是一种功能强大的表达式语法,用于查询Microsoft SQL Server OLAP Services中的多维数据。本教程旨在通过一个具体的例子——FoodMart Sales数据集来介绍MDX的...

    数据仓库——常用MDX函数列表

    数据仓库中的MDX(Multidimensional Expressions)是一种强大的查询语言,主要用于操作多维数据集,如OLAP(在线分析处理)立方体。在MDX中,一系列预定义的函数帮助用户进行数据提取、聚合、过滤等操作。以下是一些...

    Pentaho多维分析(Mondrian)使用指南

    Mondrian的实现遵循了多项行业标准,包括MDX(Multidimensional Expressions,多维表达式)——一种用于OLAP系统的查询语言,类似于SQL在关系数据库中的作用;XMLA(XML for Analysis)——一种基于SOAP的协议,用于...

    EXCEL多维函数应用

    - **member_expression**:这是一个多维表达式 (MDX) 的文本字符串,用于计算多维数据集中的唯一成员。 - **caption**:这是可选参数,用于定义在单元格中显示的文本字符串。 **3. 使用注意事项** - 如果连接无效或...

    Expert Cube Development with Microsoft SQL Server 2008 Analysis Services

    3. **MDX计算**:详细阐述了多维表达式语言(MDX)的基础知识及其在多维数据集中的应用,包括自定义计算成员、集和度量值的创建。 #### 四、部署、监控和性能调优 这部分内容着重于多维数据集的部署、监控和性能...

    A-Query-Formulation-Language.rar_language_query

    5. 多维查询语言:如MDX(多维表达式),用于在线分析处理(OLAP)系统。 四、查询优化 查询语言的效率很大程度上取决于查询优化。优化器分析查询语句,生成最优的执行计划,以最少的时间和资源获取结果。这涉及到...

    saiku-olap-util-3.17源代码

    在Saiku中,Mondrian通常作为后端服务器,负责解析MDX(多维表达式)查询并处理对数据仓库的访问,将数据转换为用户可理解的形式。 - "META-INF":在Java项目中,META-INF目录包含关于JAR文件、应用程序或容器的元...

    saiku-filter-mdx:Saiku Filter MDX [废弃]

    Saiku是一款开源的商务智能和数据分析平台,它允许用户通过MDX(多维表达式)语言查询多维数据立方体。然而,根据提供的信息,“Saiku Filter MDX”似乎已经被废弃,这意味着可能已被其他功能或更新的解决方案所替代...

    SQL Server 2008开发新特性系列课程(14):SQL Server 2008分析服务可管理性

    SQL Server 2008引入了更强大的MDX(多维表达式)和DMX(数据挖掘表达式)支持,提供了更多的内置函数和操作符,使得数据查询和分析更为简便。此外,新版本还支持MDX脚本的调试,帮助开发者快速定位和修复问题。 4...

    Sql Server Analysis Services 标准指南附录数据库

    同时,它也展示了如何通过MDX(多维表达式)查询语言来提取和分析数据。 FoodMart 2000数据库则代表了早期的版本,这有助于理解SSAS的发展历程及其核心技术的基本原理。虽然技术上可能稍显过时,但它仍然能够提供...

    Microsoft SQL Server 2008 Analysis Services Unleashed

    **第29章:查询执行架构——计算MDX表达式** - **MDX解析**:介绍了MDX表达式的解析过程。 - **计算执行**:讲解了MDX表达式的计算执行机制。 **第30章:查询执行架构——从存储中检索数据** - **数据检索**:...

    jpivot学习总结.doc

    一个jsp文件(fee.jsp),使用jpivot的标签(jp:mondrianQuery),写入多维查询表达式。 2.1. 数据库连接  直接用jdbc  在应用服务器中定义数据源 例子在tomcat中定义了数据源feeDS 2.2. 各种维度类型  一般...

    SQL Server 2000实用教程

    了解多维数据集的创建和处理,以及如何使用MDX(多维表达式)进行复杂查询。 八、集成服务与报表服务 SQL Server 2000的Integration Services(SSIS)和Reporting Services(SSRS)分别用于数据集成和报表生成。...

    OLAP服务器的比较[借鉴].pdf

    其多维数据模型可通过MDX(多维表达式)进行查询,接口采用Web服务形式,依赖Windows IIS服务器。 Oracle 10g OLAP Option作为Oracle数据库的一个选件,依赖Oracle 10g数据库存储多维数据。尽管提供了API接口,但它...

    SQL 2005

    用户可以创建复杂的多维模型,并通过MDX(多维表达式)语言进行查询。 在数据集成服务(Integration Services,旧称Data Transformation Services, DTS)方面,SQL 2005提供了更高级的数据迁移和转换工具,支持ETL...

    Analysis Services Tutorial SQL Server 2012

    这包括维度建模(Key Performance Indicators, KPIs,层次结构,属性,度量值组等),以及如何使用MDX(多维表达式)查询语言进行数据分析。 5. **Tabular数据模型**:SQL Server 2012引入了Tabular模式,简化了BI...

    SQL Server 2008商业智能完美解决方案 1/3

    用MDX和DMX查询设计器构建基于OLAP多维数据集和数据挖掘模 型的报表; 用NET代码建立并实现自定义对象; 在Microsoft Office Excel和Office SharePoint Server中查看报表。 微软公司US-SQL Analysis Services 首席...

Global site tag (gtag.js) - Google Analytics