您的位置:首页 > 其它

MDX功能初探

2008-10-15 10:19 253 查看
本文讲述了在分析数据时,利用SQL Server Analysis Service 2005多维数据集的MDX语言可以轻松实现关系数据库T_Sql语句难于实现的功能。

在关系型数据库中存放着基本的、日常的数据,通常使用T_SQL语句来查询想要的数据,但要在海量数据中分析数据出现的规律,挖掘出自己关心的数据,使用T_SQL语句就难于实现了。比如公司领导要实时了解公司运营状况,通过查看报表了解以下信息:

本月比上月的销售额增长了多少个百分点?

本季度第一个月比上季度第一个月的销售额增长了多少个百分点?

其实,这两个需求就是我们常说的同比和环比问题,而在关系型数据库中使用T_SQL语句难于实现。如何用简单的语句实现上述报表要求,并提高查询分析效率 呢?将关系型数据库中的数据放到适合分析的多维数据集结构(多维数据集结构不作介绍)中,利用Microsoft SQL Server 2005 Analysis Services(SSAS)中的MDX语言来查询,事情会变得轻而易举。关系型数据库能够实时存放数据,但不适合作查询分析。也就是说,T_SQL是关 系型数据库的查询语言,适用于对基础数据的增加、删除、修改和查询;MDX是多维数据集的查询语言,适用于查询分析数据,它的查询分析功能比T_SQL语 言更加灵活,但它不能对数据进行增加、删除和修改。对于MDX语言,在MSDN中对它的定义是:多维表达式(Multidimensional Expression,MDX),是用于在 Microsoft SQL Server 2005 Analysis Services(SSAS)中处理和检索多维数据的查询语言。

通过以下例子可以展现出MDX的分析功能,例子均采用SQL Server 2005的Analysis Services的Adventure Works DW示例库。

需求:使用MDX语句查询2001年至2004年的销售量。
实现方法:在SQL Server Management Studio中连接Analysis Services,选中Adventure Works DW多维数据库,新建查询,在查询窗口里粘贴以下MDX语句:

以下是代码:

select [Measures].[Internet Sales Amount] on 0,
[Date].[Calendar Year].&[2001]:
[Date].[Calendar Year].&[2004] on 1
from [Adventure Works]
运行结果如图1。



图1

这是一个非常简单的MDX语句。由于MDX是基于多维数据集结构,即Cube的查询语句,可以从各个维度(本例为日期)来分析各度量值(本例为销售额),所以其查询效率比使用T_SQL查询关系型数据库提高很多倍。

在分析数据的问题上,MDX的优势不仅表现在查询效率上,还表现在它能轻而易举地实现很多T_SQL语句难于实现的功能。

那么如何使用MDX来实现刚才提到的同比和环比问题呢?

实现环比功能[/b]
需求:本月销售额及本月比上月销售额的增长率。
实现方法:在Management Studio的查询窗口中输入粘贴以下MDX语句:

以下是代码:

WITH MEMBER Measures.[Amount Change Rate] AS
[Measures].[Internet Sales Amount]/
([Measures].[Internet Sales Amount],[Date].[Fiscal].CurrentMember.PrevMember) -1
, FORMAT_STRING = '0%'
SELECT
{[Measures].[Internet Sales Amount], Measures.[Amount Change Rate]} ON 0,
[Date].[Fiscal].[Month].Members ON 1
FROM [Adventure Works]
运行结果如图2。



图2

实现同比功能[/b]
需求:本季度每个月比上个季度同期销售额增长了多少个百分点?
实现方法:在Management Studio的查询窗口中粘贴以下MDX语句:

以下是代码:

WITH MEMBER Measures.[Change Amount Rate] AS
[Measures].[Internet Sales Amount]/
( [Measures].[Internet Sales Amount],
Cousin([Date].[Fiscal].CurrentMember, [Date].[Fiscal].CurrentMember.Parent.PrevMember)
) - 1, FORMAT_STRING = '0%'
SELECT {[Measures].[Internet Sales Amount], Measures.[Change Amount Rate]} ON 0,
[Date].[Fiscal].[Month].Members ON 1
FROM [Adventure Works]
运行结果如图3。



图3

同比和环比是BI项目中经常要做的内容,采用MDX语句可以轻松实现这个需求。
使 用MDX不仅可以在Management Studio中进行数据分析,也可以应用于Reporting Service。将MDX查询的结果放到Reporting Service的数据集里,再用报表的形式展示出来,如图4,这不就是公司领导想要看到的报表了吗(报表制作这里不作讲解)?



图4

本文讲述了MDX不仅能够实现T_SQL语句难于实现的功能,而且能够提高查询效率。通过阅读本文,希望您能对MDX有初步印象,具体如何编写MDX语句,会在以后的文章中慢慢讲解。

关于[/b]作者[/b]
孟娇,北京迈思奇科技有限公司工程师。

[/b]原文链接:http://www.winmag.com.cn/html/2008/05/20080506162304-1.shtml

[/b]更多相关资源,请访问北京迈思奇科技有限公司(http://www.minesage.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: