本文讲述了在分析数据时,利用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来实现刚才提到的同比和环比问题呢?
实现环比功能
需求:本月销售额及本月比上月销售额的增长率。
实现方法:在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
实现同比功能
需求:本季度每个月比上个季度同期销售额增长了多少个百分点?
实现方法:在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语句,会在以后的文章中慢慢讲解。
关于
作者
孟娇,北京迈思奇科技有限公司工程师。
原文链接: http://www.winmag.com.cn/html/2008/05/20080506162304-1.shtml
更多相关资源,请访问北京迈思奇科技有限公司(http://www.minesage.com)
原文链接: http://www.winmag.com.cn/html/2008/05/20080506162304-1.shtml
更多相关资源,请访问北京迈思奇科技有限公司(http://www.minesage.com)