[分享]微软BI专题-MDX功能初探

来源:互联网 发布:安卓三大邪恶软件名字 编辑:程序博客网 时间:2024/05/16 06:08
 本文讲述了在分析数据时,利用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语句,会在以后的文章中慢慢讲解。
原创粉丝点击