`
jacky6024
  • 浏览: 80603 次
  • 性别: 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).

    多维表达式(MDX),多维表达式(MDX),多维表达式(MDX).

    多维表达式 (MDX) 语言介绍

    多维表达式 (MDX) 语言介绍.....................

    多维表达式 (MDX) 参考手册

    本手册内容收集整理自网络公共资源文档,为了方便PowerBI用户参考使用而作,请勿用于商业用途。

    多维数据查询MDX教程(全)

    使用多维数据集表达式和子多维数据集表达式 使用维度表达式 使用成员表达式 使用元组表达式 使用集表达式 使用标量表达式 使用空值 运算符(MDX 语法) 算术运算符 位运算符 比较运算符 串联运算符 集运算符 一元...

    多维数据查询MDX教程(全).zip

    多维数据查询MDX教程(全).zip

    mdx多维表达式

    关于mdx资源的实用表达式,系统的对mdx进行描述,方便进行应用

    指定查询轴的内容 (MDX)

    指定查询轴的内容 (MDX) 查询轴用于指定由多维表达式 (MDX) SELECT 语句所返回的单元集的范围。通过指定单元集的范围可以限定客户端可以看到的返 回数据。

    一步一步学习MDX语言

    Microsoft SQL Server 2005 Analysis Services (SSAS) 允许在多维表达式 (MDX) 语法中使用函数。函数可以在任何有效的 MDX 语句中使用,并且经常用于查询、自定义汇总定义以及其他计算。本节介绍 Analysis Services ...

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

    以foodmart sales数据为例,介绍了MDX的基本语法和MDX的核心函数,让大家对MDX有个基本的了解。

    python当中连接数据库,需要遇到MDX语句,此处是对MDX的简单介绍

    MDX 的全称是 Mutil Dimensional Expressions ,是由 Microsoft , Hyperion 等公司研究多维查询表达式,是所有 OLAP 高级分析所采用的核心查询语言。MDX 的基本结构有三种: Members 、 Tuple 、 Set 。1) Members ...

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

    AddCalculatedMembers Aggregate AllMembers Avg Axis Call Children Crossjoin DefaultMember Dimension Dimensions Distinct DistinctCount Filter FirstChild FirstSibling Hierarchy IIf Intersect Is IsEmpty ...

    注释(MDX 语法)

    维表达式 (MDX) 语句和脚本。通过使用注释说明代码,可使程序代码在日后更易于维护。通常使用注释记录程序名称、作 者姓名和主要代码更改的日期。也可以使用注释说明复杂的计算或解释编程方法。

    指定切片器轴的内容 (MDX)

    SQL Server 2005 联机丛书(2008 年 11 ...切片器轴将对多维表达式 (MDX) SELECT 语句返回的数据进行筛选,限定返回的数据,从而只返回与指定成员相关的数 据。切片器轴是在 MDX 中 SELECT 语句的 WHERE 子句中定义的。

    基于实例化视图的MDX语句执行性能优化 (2008年)

    多维表达式(MDX)语句多用于实现对海量数据的多维分析,如何对MDX语句的执行过程进行优化,进而提高查询速度是构建在线分析处理系统的一个难点。该文采用预建实例化视图的方法,使得原先基于事实表和维表的多表连接...

    mdx 中文 教程

    mdx 中文教程 mdx 语法基础 供初学者入门使用

    mdx 英文版 教程

    mdx英文版教程 第1章 MDX入门  1.1 什么是MDX  1.2 查询基础  1.3 轴框架:名称与编号  1.4 大小写敏感与布局  1.5 构造简单的MDX  1.5.1 逗号(,)与冒号(:)  1.5.2 .Members  1.5.3 使用.Children获得一...

    15个经典的MDX查询

    15个经典的MDX查询,以美国某公司产品销售分析预测为例,从各个方面介绍MDX的使用以及相关语法

    MD-SQL:一种基于MDX的多维数据查询语言.pdf

    MD-SQL:一种基于MDX的多维数据查询语言.pdf

    15个经典MDX查询

    15个经典的MDX查询,学习MDX好帮手

Global site tag (gtag.js) - Google Analytics