BI中的特殊语言——MDX

BI中的特殊语言——MDX(下)


作者: 戴子良、李苗

在上期文章中,我们针对MDX语言,从简单的语法要素入手,以进阶的方式,介绍MDX从基础到高级的应用,以及MDX与SQL之间显著的区别。本期文章将继续MDX的高级应用话题,为大家介绍MDX更为广泛的使用途径。

在SSIS中使用MDX 在处理ETL时,我们有时需要在ETL流程中嵌入MDX语言,这样在数据转换时,就可以从多维数据库中查询出所需要的数据,而且也可以对多维数据库进行修改、删除等操作。传统的BI项目一般是由OLTP系统建立数据仓库,然后建立多维数据库,最后进行报表展现或数据挖掘。在报表展现时,我们使用MDX对多维数据库进行查询,以得到结果。那么这种即席查询的结果如何保存起来,甚至进行进一步的数据处理呢?SQL Server 2005 SSIS提供了专门的工具来进行该类操作,不仅可以进行基于多维数据库的数据查询,而且还可以对多维数据集的结构进行修改、对多维数据集的数据进行处理。下面,我们就SSIS中的这一类操作进行介绍:

在SQL Server 2005 SSIS中将MDX查询结果转变为表

1)建立数据源连接。在建立好SSIS项目后,从数据流组件中拉过OLE DB数据源,在建立连接处选择新建,然后选择Microsoft OLE DB Provider for Analysis Servers 9.0。在服务器名称处键入服务器及其实例名,选择验证方式,在选择多维数据库处选择要使用的多维数据库,这里选择Adventure Works DW。

2)使用MDX语句。在数据访问模式处,选择SQL命令,然后键入要查询的MDX语句(如图1),输入: SELECT { [Date].[Calendar].[Calendar Quarter].&[2003]&[1], [Date].[Calendar].[Calendar Quarter].&[2003]&[2], [Date].[Calendar].[Calendar Quarter].&[2003]&[3], [Date].[Calendar].[Calendar Quarter].&[2003]&[4] } ON COLUMNS , { [Product].[Product Categories].[Category].&[1].SIBLINGS } ON ROWS FROM [Sales Summary] WHERE ([Measures].[Sales Amount] ) 图1:输入要查询的MDX语句

3)点击预览我们可以看到MDX查询结果的表格。

4)接下来,我们可以使用Data Conversion Transformation组件,将查询结果中的各列重新命名;也可以使用Conditional Split Transformation组件将第一季度大于100000的销售额选取出来;最终,我们将选取后的结果导入数据库的表格中去。这样,我们便实现了“从 CUBE中读取数据→转化整合→存储到另一个数据表”这样一个过程。图2为我们呈现了实现这一过程的完整SSIS数据流任务。

图2:完整SSIS数据流任务

在SQL Server 2005 SSIS中使用MDX修改CUBE的结构

1)选择执行SQL任务组件。我们从控制流工具箱中将SQL任务组件拉入设计区,双击,在连接管理器处选择新建连接,然后从提供程序处选择Microsoft OLE DB Provider for Analysis Servers 9.0,这样我们就连接到了多维数据库上,接下来我们便可以写MDX语句了。

2)在SQL状态处输入要修改CUBE的MDX语句,这样便可以对CUBE进行更新操作。如图3所示,在这里我们选择直接输入: Alter Cube [Adventure Works] Update Dimension [Destination Currency].[Destination Currency], Default_Member = [Destination Currency].[Destination Currency].[US Dollar]

图3:输入要修改CUBE的MDX语句

3)运行后我们可以看到CUBE的结构发生了改变。

在SQL Server 2005 SSIS中使用Analysis Services Execute DDL Task

在SQL Server 2005 SSIS组件中有一个是Analysis Services Execute DDL Task,它里面可以嵌入XML/A文本,在XML/A文本中可以嵌入MDX语句,执行相应的功能。图4所示的内容,向我们简单地介绍了如何使用这个组件完成对Adventure Works DW多维数据集处理:

图4:对Adventure Works DW多维数据集的处理

通过上面三个组件(OLE DB数据源、执行SQL任务、Analysis Services Execute DDL Task)的使用,我们了解了如何在SQL Server 2005 SSIS中应用MDX。从而通过ETL的流程,完成了建立/修改多维数据库、从多维数据集中查询数据、回写回关系型数据库等事务,实现了关系型数据库与多维数据库之间的交换。

3、MDX脚本

在上期的介绍中,我们了解到通过编写MDX语句可以建立多种计算成员,方便多维数据集的数据进行实时计算。那么,针对更改多维数据集的操作,我们也会使用MDX脚本来完成。 MDX脚本通常由一个或多个MDX表达式或语句构成,通过这些表达式或语句,我们可以用一系列计算结果来填充多维数据集。打开Analysis Services多维数据库设计器的计算选项卡,我们通常使用的是“窗体视图”结构(如图5),而点击“脚本视图”后(如图6),会发现二者界面大有不同。

图5:窗体视图结构

图6:脚本视图

原本设计视图化的窗体编辑器变成了脚本编辑器,在脚本窗口中的Calculate命令下,我们就可以编写MDX表达式或语句,来定义多维数据集的计算过程。相比较来说,窗体编辑器更像是一个向导,它为我们提供了定义某一类数据项(比如:计算成员、命名集)的个性化结构界面;而脚本编辑器则以简单的文本录入界面,让我们直接输入丰富的MDX语句和函数,完成复杂逻辑的MDX定义与计算。

MDX脚本分类

在Analysis Services当中,MDX脚本分为两类:

默认MDX脚本。在我们创建多维数据集时,Analysis Services会为我们创建一个默认的MDX脚本,这个脚本将会定义我们整个多维数据集的计算过程。具体来说,在我们创建一个新的多维数据集时,打开计算选项卡,必然会出现一个单独的Calculate语句,而这条语句就是Analysis Services为我们创建的一个默认MDX脚本。通常这条Calculate语句位于MDX脚本的开始位置,指明了在第一次传递过程中应计算整个多维数据集。当然,默认MDX脚本中还会包含创建命名集(对应语句为:Create Set)、赋值以及计算成员(对应语句为Create Member)的脚本命名。

用户定义MDX脚本。顾名思义,在创建多维数据集后,我们可以根据业务需求自由添加自定义的MDX脚本,这样既扩展了多维数据集的计算功能,又实现了许多复杂的商务规则。

MDX脚本内容在MDX脚本中,我们可以使用MDX语句,来管理MDX脚本的上下文、作用域以及流控制的操作,在这里我们同样可以使用创建计算成员与命名集的语句来编写脚本。

类型
语句
说明
管理脚本上下文
Calculate
计算子多维数据集,还可以确定子多维数据集中所包含维度的求解次序。
Existing
强制在当前上下文中计算所指定的集合。
Freeze
将所指定子多维数据集的单元值锁定为其当前值。
管理作用域
Scope
把指定 MDX 语句的作用域限制于指定的子多维数据集。
条件语句
If
引用条件逻辑添加到MDX脚本当中,条件为真,执行语句。
Case
根据条件逻辑有条件地从多次比较中返回特定值。

MDX脚本参数

编写SQL语句时,我们有时根据设计所需使用参数,而在MDX脚本当中,我们也是可以使用参数化语句,而参数的表达方式,也不尽相同,仍以“@”来标识。那么,在MDX当中,唯一不同的就是,参数设置仅支持文字或标量值,如果要创建引用成员、集合或元组参数时,我们就要使用MDX函数进行转换,如 StrToSet函数(该函数将返回具有多维表达式格式的指定字符串表达式所构建的集合)或StrToMember函数(该函数将返回具有多维表达式格式的指定字符串表达式中的成员)等等。

小结

我们通过两期专栏,为大家介绍了BI中的特殊语言——MDX。和SQL语言的功能类似,MDX专门用于创建/修改多维数据结构、查询多维数据结果;然而,与SQL语言相比,MDX又具备更强大的功能:用于定义更丰富的数据元素,如计算成员、命名集和KPI。我们可以通过多种途径来使用MDX,比如:在ETL流程中嵌入MDX、在AS中使用“计算”和 “KPI”设计器视图编辑MDX、直接创建MDX脚本等等。

你可能感兴趣的:(数据结构,sql,sql,server,脚本,嵌入式)