MDX解决方案(第2版)

MDX解决方案(第2版)"

作者:
ISBN:9787302183815
定价:¥78
字数:千字
页数:
出版时间:2008.09.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

书全面介绍了多维表达式(MultiDimensional eXpressions,MDX)的应用。书中首先介绍了MDX语法、基础知识、MDX逻辑及MDX执行过程,然后讨论了命名集、排序、分类及MDX高级应用,接着介绍了Analysis Services 2000、Analysis Services 2005和Essbase三种产品的特性及细节知识,最后介绍了客户端编程、MDX优化和本地多维数据集等相关知识。附录中包含了MDX函数、操作符、连接参数、成员属性及格式化字符串代码的列表。

本书主要面向MDX的开发人员、咨询师和管理人员,也可作为大学本科教学中有关“数据库原理”和“实用数据库”的后续课程。

前言

   构建维度应用最好且最方便的方法是使用维度语言。这类维度应用以关系型在线分析处理(OLAP)和数据仓库(或数据集市)为代表。MDX(MultiDimensional eXpressions,多维表达式)是在这类应用中最广泛使用的软件语言。本书是《MDX解决方案》的第2版。在第1版之后,大量用MDX编写的分析应用发生了巨大的变化,许多服务器、第三方工具和客户端工具都能通过MDX实现对信息的计算和检索。

  作为一门语言,MDX和SQL在感觉上相近但风格不同,与其他的语言如C++、C#、Lisp和Fortran等则差异更大。读者可以将MDX看成类似Excel电子表格的公式化语言,而不是其他类型的程序设计语言。当然MDX与Excel也不同,最接近MDX特征的类比应该是类似Excel的SQL语言或类似SQL的Excel语言(如果读者还熟悉其他OLAP查询或计算语言,那么可能会发现MDX与它们更为接近。但是大多数读者可能都对此并不熟悉)。

  本书与第1版相比不仅介绍了一种新的产品,同时也进一步讲解了以前介绍过的产品的新特性。Microsoft已经发布了支持MDX的Microsoft? SQL Server 2005? Analysis Services。Hyperion Solutions也发布了Hyperion? System? 9 BI+? Analytic Services?,构成这个版本基础的Essbase功能,将OLAP引入了行业应用中(由于在本书中将反复提到这些产品的名称,我们将按照厂商的习惯使用缩略语:Analysis Services 2005、Analysis Services 2000和Essbase 9)。

本书相关技术

  维度语言的作用对象是(多)维度数据模型。在OLAP行业没有正式的或者详细的数据模型标准,并且需要处理的细节非常之多。但是,有相当一部分的通用模型可以转化到大部分的实际应用中。MDX有一套标准语法能很好地处理许多服务器的构建和功能。同时厂商还扩展了MDX访问附加功能的能力。

  MDX源自Microsoft的OLAP规格中OLE DB的一部分,虽然Microsoft曾经控制着这个语言,但由于有一些OLAP厂商采用了该语言,行业成员相信这个语言对多数厂商更为有用。Microsoft最终将控制权交给了XMLA协会(http://www.xmla.org),这是一个致力于协调和促进“用于分析的XML标准”的组织。“用于分析的XML”是一种Web服务的API,Microsoft、Hyperion和SAS等组织率先支持了这种API。

  本书尝试采取一种重视实际效果的课程学习方式,这种方式介于学习语言和学习如何在三种产品版本中使用这种语言之间。这三种产品是:

● Microsoft Analysis Services 2005

● Essbase 9

● Microsoft Analysis Services 2000

  Microsoft在2005版中对基本的数据模型进行了大量的修改,还有相当一些修改是为了支持MDX与其他的建模工具协同工作。本书花了大量的篇幅用于讲述如何应用这些新特性。Hyperion Essbase的模型也有了大量的附加功能。

  其他支持MDX的服务器产品有Applix、Microstrategy、MIS AG、Mondrian、SAP和SAS Institute。其他公司,如Simba和Digital Aspects,也提供了工具和SDK,以帮助使用MDX和相关的API,构建服务器和客户端。大量的客户端工具向最终用户提供了对访问和使用MDX的高级应用的支持。

  要真正掌握MDX,读者需要真正掌握服务器如何支持OLAP,以及MDX如何工作,这两个问题常常相互影响、相互作用。强大的MDX延伸了维度设计的能力,完善的服务器设计能减少利用MDX解决问题的需要。这是一本介绍MDX的书籍,因此我们不会试图告诉读者怎样避免使用MDX,但是会指出在某些应用场合不必使用MDX。

本书的组织形式

  如果读者是MDX新手,本书也适合您。因为本书的章节是按照MDX语法、功能到使用的顺序进行安排的。第1~3章引入MDX的基础和用法。第4章深入讨论了实际执行MDX的逻辑,真正理解MDX在三个产品中运行的细节,第4章的内容仅仅只是个开始。然后在第5~7章中详细论述了这些细节。从第8章开始介绍各种产品的特性。所以本书的前半部分主要侧重于功能和技术的背景知识,后半部分才将具体的应用引入到Microsoft和Hyperion的产品中。

  附录A包括对标准MDX的函数和操作符以及三种产品的扩展功能的索引。这些函数是MDX语言的重要组成部分,将它们适当地加以组合就能解决许多不同的问题。可以称它们是MDX的词汇,所以掌握这样的词汇越多越好。幸亏这些词汇没有多到足够成为一章的程度,否则就得在第3章和第4章之间另外添加一章,当读者学完MDX的基本用法后就要立刻学习这些函数。在这些章节中,将会多次提到要求读者参阅附录A,这里我们也希望读者能提前阅读一下附录A。另外,不可能在书中介绍完每个函数的用法,所以读者应该根据自己的需要自行在附录A中查找。

  读者在前7章中将学到很多技术和技巧,而在后续的章节中将扩展这些技术和技巧,或是在应用中用到它们。事实上,我们不可能解决读者的所有问题,但我们希望让读者拥有解决实际问题的能力。

  MDX适用于很多应用。为了简化举例和解答的过程,本书仅集中讨论两个问题。Waremart 2005数据库是一种通用的参照标准,虽然只有一个简单的多维数据集可操作,但它涉及到了Hyperion和Microsoft产品中的许多特性和技术。在详细讲述Analysis Services 2005功能的章节(有8、10、13、14章)中也会涉及到该产品中附带的Adventure Works数据库。第13章还包含了一系列简单但更高级的数据库。

本书未涉及的内容

  本书不会涉及到非MDX构建分析应用的内容。开发人员如果需要关于Microsoft的工具方面的内容,可以阅读Sivakumar Harinath与Stephen R. Quinn合著的Professional SQL Server Analysis Services 2005 with MDX,或者阅读Joy Mundy和Warren Thornthwaite合著的The Microsoft Data Warehouse Toolkit: With SQL Server 2005 and the Microsoft Business Intelligence Toolset。

本书读者对象

  本书针对的读者是需要学习和熟练掌握MDX的开发人员、咨询师和管理人员。MDX涉及到计算和选择,可以用来处理完整应用中的大部分问题,所以作为一名前端开发人员应该关注在MDX中找到各种表达和规则的相应匹配,然后得到修改后的查询。也许读者是ASP或JSP开发人员,或者正在SQL Server的报表服务中开发报表,都需要能转换简单或复杂的报表请求。也许读者正在开发服务器端的计算,并对逻辑或安全过滤建模。这些都可以归结到编写MDX或通过某些GUI程序生成MDX。虽然GUI程序可能吸引了读者的注意力,但是读者最好对它的用途和限制有正确的认识。

学习本书需要的工具

  为了运行本书中的查询示例,读者需要一个能发送MDX和接收结果的前端工具或API。随SQL Server Management Studio一同发布的Microsoft SQL Server就能运行MDX查询。如果是从Analysis Service 2000升级而来,则可能其中MDX的示例还是原来的版本。Hyperion Essbase包含了Analytic Administration Services控制台和Essmsh命令解释程序。其他的工具也是可用的,可以在下面相关的网站上找到。

网站上的内容

  网站上有示例数据库的一个集合,还包括在Analysis Services和Essbase中可以使用的代码,以及Essbase的MDX查询接口。

小结

  MDX是一种特殊的语言,在某些方面与您熟悉的语言相似,但又在其他方面与众不同。不管您是否熟悉OLAP的概念,或者您还是新手,都会发现按照MDX语言固有的规律进行学习是可以掌握这门语言的。我们并没有假设您已有任何的语言基础,但是我们希望您能从本书中学到一些新知识。最后,希望您能在学习和使用MDX的过程中找到乐趣。

  

 

  

  

  

  

  

  

  

  

  

目录

第1章  MDX入门 1

   1.1  什么是MDX 1

   1.2  查询基础 2

   1.3  轴框架:名称与编号 4

   1.4  大小写敏感与布局 5

   1.5  构造简单的MDX 6

         1.5.1  逗号(,)与冒号(:) 6

         1.5.2  .Members 7

1.5.3  使用.Children获得一个成员

的子成员 8

1.5.4  使用Descendants()获取一个

成员的后代成员 9

   1.6  去除查询结果中的空切片 11

   1.7  MDX中的注释 13

   1.8  MDX数据模型:元组和集 14

         1.8.1  元组 14

         1.8.2  集 16

         1.8.3  查询 17

   1.9  更多基本词汇 18

         1.9.1  CrossJoin( ) 18

         1.9.2  Filter() 20

         1.9.3  Order() 22

   1.10  查询成员属性 24

   1.11  查询单元属性 26

   1.12  客户端结果数据布局 27

   1.13  小结 28

第2章  计算成员和命名集简介 29

2.1  采用计算成员形式的维度

计算 29

   2.2  计算成员作用域 30

2.2.1  计算成员和查询的WITH

部分 31

         2.2.2  公式的优先级(求解顺序) 32

   2.3  基本的计算函数 37

         2.3.1  算术操作符 37

         2.3.2  概要统计操作符 37

         2.3.3  Avg()函数 38

         2.3.4  Count(),.Count 38

2.3.5  DistinctCount()函数

(Microsoft扩展) 39

         2.3.6  Sum()函数 39

         2.3.7  Max()函数 40

         2.3.8  Median()函数 40

         2.3.9  Min()函数 40

2.3.10  NonEmptyCount()函数

(Hyperion扩展) 41

         2.3.11  Stdev()和Stddev()函数 41

2.3.12  StdevP()和StddevP()函数

(Microsoft扩展) 41

         2.3.13  Var()和Variance()函数 42

2.3.14  VarP()和VarianceP()函数

(Microsoft扩展) 42

   2.4  补充的函数 42

   2.5  命名集简介 44

   2.6  小结 47

第3章  MDX中的通用计算和选择 49

   3.1  MDX中的元数据引用函数 51

3.2  多种比率﹑均值﹑百分比和

分配 52

3.3  贡献率(同一层次结构中级别

之间的简单比率) 52

         3.3.1  对总额的贡献率 53

         3.3.2  使用.CurrentMember函数 53

         3.3.3  使用.Parent函数 53

3.3.4  使用.CurrentMember函数和

.Parent函数获得父对象份额 53

         3.3.5  使用Ancestor函数 54

3.3.6  使用.CurrentMember函数和

Ancestor函数计算祖先对象

的份额 54

         3.3.7  0作除数的处理 56

   3.4  基本分配 56

3.4.1  基于另一种比率的数量比例

分配 56

         3.4.2  沿层次结构的非加权分配 57

   3.5  均值 57

         3.5.1  简单均值 57

         3.5.2  加权均值 58

3.6  基于时间的引用和时间序列

的计算 60

3.6.1  各时期(Period-to-Period)的

引用和计算 60

         3.6.2  去年同期的引用和计算 61

   3.7  本年至今的聚合 61

3.8  移动均值和52周的最高价/

最低价 63

3.9  使用LastPeriods()选择基于

目标成员的时间范围 65

3.10  沿不同维度的不同聚合(使用

MDX的半加性度量) 65

3.11  混合聚合:非时间总和,沿时

间的均值、最小值与最大值 66

3.12  混合聚合:非时间总和,沿时

间维度的期初/期末结余 66

3.13  对于缓慢变化值的余额转结

和最后输入的结余报告 67

3.14  查找数据全部输入的最后

时间成员 71

3.15  在MDX表达式中使用成员

属性(计算和分类) 71

3.16  处理边界条件(超出范围的

成员,0或其他作除数) 74

           3.16.1  处理不足的范围尺寸 74

           3.16.2  处理不足的层次结构深度 75

           3.16.3  处理错误的级别引用 75

           3.16.4  0作除数的处理 76

   3.17  小结 77

第4章  MDX查询上下文与执行 79

4.1  查询中的单元上下文和解析

次序 80

         4.1.1  查询的执行阶段 80

         4.1.2  单元求值(对任何单元) 87

         4.1.3  解析NON EMPTY轴 89

4.1.4  解析AS2005中的HAVING

子句 90

4.1.5  循环上下文和

.CurrentMember函数 92

4.1.6  AS2005中成员的相互联系:

强层次结构性、自存在性和

属性关系 93

4.2  在AS2005中修改多维数据集

上下文 96

         4.2.1  CREATE SUBCUBE语句 97

4.2.2  在AS2005中的FROM子句

中使用SELECT 103

4.2.3  无限递归:在计算上下文

可能遇到的“陷阱” 106

         4.2.4  特定产品解析次序的使用 106

4.3  非数据:无效数字、NULL

(空)和无效成员 109

4.3.1  无效计算:0作除数和数字

错误 109

         4.3.2  空单元的语义 110

         4.3.3  无效位置 112

   4.4  计算中的单元属性优先级 114

         4.4.1  显示格式化的优先级 115

         4.4.2  计算单元中的数据类型 116

   4.5  操作中多维数据集的上下文 117

   4.6  KPI中的多维数据集上下文 117

4.7  AS2005中全局、会话和

指定查询计算之间的定义

的可见性 117

   4.8  小结 119

第5章  命名集与集的别名 121

   5.1  命名集:作用域和上下文 121

   5.2  命名集的常规使用 122

   5.3  集的别名 124

         5.3.1  集的别名的示例 124

         5.3.2  深入了解集的别名 126

         5.3.3  当集的别名是必需的情况 128

   5.4  小结 130

第6章  MDX中的排序和分类 131

   6.1  函数 131

   6.2  典型的Top-N选择 132

6.2.1  加入分类数(使用Rank()

函数) 134

6.2.2  在集中取得Top-N的后代

成员及其他关联成员 138

6.3  获得最少/最多元组以达到

临界值 140

6.4  获取元组Top N百分比 142

6.5  在维度次序中放置成员/元组

(首先/最后放置祖先成员) 143

6.6  集的反向排序 144

   6.7  小结 145

第7章  MDX高级应用 147

7.1  将父对象/祖先成员排在子

对象之后(而不是之前) 148

7.2  返回成员下面的子树,并连同

成员一起返回其祖先成员 148

7.3  使用Generate()将元组操作

转化为集操作 149

7.4  日期计算/日期算术 150

7.5  对行/列/轴上选择的成员定

义比率(而非对指定维度定

义比率) 153

7.6  基于报表的父对象总额,

报表总额的贡献率 156

7.6.1  方法1:唯一的标准MDX

方法 156

7.6.2  方法2:在Analysis Services

中考虑使用VisualTotals() 161

7.6.3  方法3:使用AS2005子

多维数据集 163

7.7  层次结构中越过级别的层次

结构排序 164

7.8  基于多重规则的单个集排序 165

7.9  多重层排序或多重维度排序 166

7.9.1  对每个维度采取相同排序

规则的嵌套排序 166

7.9.2  依据不同标准的嵌套维度

排序 167

   7.10  Pareto分析与累积和 169

7.11  返回top-selling(最畅销)产品

(或其他重要的名称)作为

度量 173

7.12  已选成员集的最新事件 174

7.13  积聚大量数据所需的时间集

(建立沿时间向前或向后合计

的集) 177

7.14  乘法聚合(乘积代替加和) 180

7.15  通过集中的并列分类包含

所有元组 184

   

   7.16  公用维度时间分析 186

   7.17  样本分析 188

   7.18  小结 195

第8章  使用Microsoft Analysis 

Services的属性数据模型 197

   8.1  统一维度模型 197

   8.2  维度 199

         8.2.1  属性、层次结构与联系 201

         8.2.2  维度查询 205

         8.2.3  成员属性 207

         8.2.4  父-子层次结构 209

         8.2.5  Time维度 210

   8.3  多维数据集 211

         8.3.1  维度关系 214

         8.3.2  角色扮演维度 217

         8.3.3  透视图 217

         8.3.4  钻取 218

   8.4  UDM中的计算模型 218

   8.5  在UDM上定义安全性 219

   8.6  小结 224

第9章  Hyperion Essbase中属性

维度和成员属性的用法 225

   9.1  UDA与属性 225

9.2  在查询轴检索UDA和

属性值 226

9.3  在计算中使用UDA和属性 227

9.4  基于UDA和属性值选择基

维度成员 227

9.4.1  使用Attribute函数选择基于

共用属性值的成员 228

9.4.2  使用WithAttr函数选择基于

属性值的成员 229

9.4.3  使用UDA函数选择共用

UDA值的成员 230

9.5  用IN连接基成员和属性层次

结构 230

9.5.1  连接基成员及其实际属性

成员 231

         9.5.2  连接属性成员及其属性值 231

   9.6  小结 232

第10章  通过外部函数扩展MDX 233

   10.1  配合MDX使用存储过程 234

   10.2  ADOMD服务器对象 237

           10.2.1  表达式 239

           10.2.2  元组生成器 239

           10.2.3  集生成器 240

           10.2.4  MDX 240

           10.2.5  上下文 241

           10.2.6  服务器元数据对象 242

   10.3  AMO.NET托管存储过程 243

10.4  静态函数与非静态函数的

性能评估 244

           10.4.1  调试.NET存储过程 245

10.4.2  NULL、ERROR()与异常

等方面的附加程序设计 246

10.4.3  使用存储过程以获得动态

安全性 248

10.4.4  COM DLL存储过程 251

10.5  参数与返回类型的深入

讨论 251

10.6  用于COM存储过程的MDX

函数 256

10.6.1  SetToStr()与

TupleToStr() 256

10.6.2  Members()、StrToSet()与

StrToTuple() 256

10.7  外部函数示例:

TimeSpanUntilSum()函数 258

   10.8  加载和使用存储过程 260

   10.9  存储过程名称解析 261

   10.10  在MDX中调用存储过程 262

10.11  对存储过程的其他考虑

因素 263

   

   10.12  小结 263

第11章  通过MDX改变多维数据集

和维度环境 265

11.1  在会话中改变维度的默认

成员 266

   11.2  维度回写操作 266

11.2.1  创建新成员 267

11.2.2  在维度中移动成员 267

11.2.3  删除成员 268

11.2.4  更新成员定义 268

   11.3  刷新单元数据与维度成员 269

   11.4  把数据写回多维数据集 269

11.4.1  标准单元写回 270

11.4.2  提交与回滚 270

11.4.3  使用UPDATE CUBE 270

   11.5  小结 273

第12章  Microsoft Analysis Services

中计算的多种方法 275

   12.1  计算机制概述 276

12.1.1  度量的固有聚合 276

12.1.2  使用一元运算符汇总 277

12.1.3  自定义成员公式 279

12.1.4  计算成员 280

12.1.5  单元计算 283

12.1.6  条件格式化 287

   12.2  各类计算如何交互 288

12.2.1  无单元计算的交互 288

12.2.2  单元计算传递 289

12.2.3  使用求解顺序来决定

传递中的公式 293

12.2.4  计算成员本身不是

聚合的 294

12.2.5  自定义汇总、自定义成员

与计算单元结果的固有

聚合 295

12.3  使用不同计算技术时应注意

的问题 295

   12.4  小结 296

第13章  Analysis Services 2005中

的MDX脚本 297

   13.1  MDX脚本基础 297

13.1.1  什么是MDX 脚本 297

13.1.2  计算语句 299

13.1.3  子多维数据集 300

13.1.4  赋值与聚合 303

13.1.5  赋值与计算成员 307

13.1.6  赋值与命名集 308

13.2  MDX脚本以及更复杂的

多维数据集 309

13.2.1  多属性层次结构 309

13.2.2  用户层次结构 315

13.2.3  父子属性层次结构 316

13.2.4  多对多维度 317

13.2.5  事实维度与引用维度 319

13.2.6  半累加性度量与非累加

性度量 319

13.2.7  一元运算符与自定义成

员公式 321

   13.3  高级MDX脚本 323

13.3.1  定义带有SCOPE的子

多维数据集 323

13.3.2  MDX表达式赋值 326

13.3.3  给子多维数据集赋予一

个错误的值 329

13.3.4  将单元属性值赋给子多

维数据集 330

13.3.5  条件赋值 331

   13.4  现实世界中的MDX脚本 332

13.4.1  Time Intelligence向导 332

13.4.2  回顾基本分配 335

   13.5  小结 336

第14章  增强客户端的交互 337

   14.1  使用钻取 338

14.1.1  Microsoft Analysis Services 

2005中针对钻取的改进与

改变 338

14.1.2  钻取MDX I 339

14.1.3  与钻取相关的重要问题 340

14.1.4  钻取MDX II 342

14.1.5  钻取安全性 343

   14.2  使用操作 343

14.2.1  使用操作能够做什么? 344

14.2.2  操作的目标 347

14.2.3  定义操作 348

14.2.4  与操作相关的编程注意

事项 351

14.2.5  删除操作 354

   14.3  使用KPI 355

14.3.1  创建KPI 355

14.3.2  MDX KPI函数 358

14.3.3  使用KPI 359

   14.4  小结 361

第15章  客户端编程基础 363

   15.1  ADOMD.NET基础 364

15.1.1  先决条件 365

15.1.2  建立连接 365

   15.2  处理元数据 366

15.2.1  获取构架行集 366

15.2.2  使用构架行集时的互操

作性问题 367

15.2.3  使用元数据对象模型 367

15.2.4  使用元数据对象模型时

的互操作性问题 368

15.2.5  维度特性 368

15.2.6  处理ADOMD.NET

元数据缓存 369

   15.3  执行查询 370

15.3.1  执行命令 370

15.3.2  参数化命令 371

15.3.3  使用CellSet对象 372

15.3.4  关于从查询中获取信息

的更多细节 376

15.3.5  关键性能指标 381

   15.4  执行操作 382

   15.5  处理“平展的”MDX结果 383

   15.6  小结 387

第16章  优化MDX 389

16.1  从Analysis Services 2000

到Analysis Services 2005

的体系结构改动 390

16.2  优化集操作 391

16.2.1  交叉联接集合之上求和 391

16.2.2  交叉联接集之上进行

筛选 393

16.2.3  优化TopCount()和

BottomCount() 394

16.2.4  Analysis Services 2005

中的NonEmpty函数 395

16.2.5  优化排序:Order() 396

16.2.6  针对较大数据集查询

的UnOrder函数 397

16.3  优化求和 397

16.4  将计算设计在数据库中(将

成员属性放入度量中以及

新的MDX函数Member

Value中) 398

16.5  MDX脚本优化 400

           16.5.1  计算的细节 400

           16.5.2  避免叶级别的计算 401

16.5.3  在多维数据集设计中避免

叶级别计算 402

16.5.4  度量值表达式优化叶级别

计算 403

16.5.5  叶级别计算的MDX脚本

优化 404

16.5.6  Analysis Services 2005:

使用属性层次结构而不

是成员属性 406

16.5.7  Analysis Services 2005:

使用Scope来替代IIF 407

16.6  在MDX脚本中避免使用

慢速函数 409

16.6.1  为了更好的性能而改变

计算逻辑:流计算 409

16.6.2  使用服务器本地特性而

不是脚本来进行与聚合

相关的计算 411

   16.7  小结 412

第17章  使用本地多维数据集 413

   17.1  选择使用何种语法 414

   17.2  使用CREATE CUBE语句 414

17.2.1  过程概述 414

17.2.2  CREATE CUBE语句

剖析 415

17.2.3  定义维度 416

17.2.4  级别 417

17.2.5  定义度量 422

17.2.6  添加命令 423

17.2.7  ROLAP与MOLAP 424

17.2.8  INSERT INTO语句

剖析 424

17.2.9  多维数据集目标 425

17.2.10  INSERT INTO中的

OPTIONS子句 427

17.2.11  SELEC子句 428

17.2.12  构造提示 430

17.2.13  从本地多维数据集到

服务器多维数据集 431

17.2.14  汇总与自定义成员

公式 431

17.3  使用CREATE GLOBAL 

CUBE语句 433

17.3.1  过程概述 433

17.3.2  CREATE GLOBAL CUBE

语句剖析 433

17.3.3  定义度量 434

17.3.4  定义维度 434

17.3.5  定义级别 435

17.3.6  定义切片成员 435

17.3.7  需要注意的事项 436

   17.4  使用分析服务脚本语言 436

17.4.1  过程概述 436

17.4.2  ASSL语句剖析 437

17.4.3  安全性 437

   17.5  小结 438

附录A  MDX函数与运算符参考 439

附录B  影响MDX的连接参数 523

附录C  单元与成员的内部属性 541

附录D  格式化字符串编码 551

附录E  学习资源 559

  

  

  

  

  

  

  

  

  

  

  

  

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个