搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  MDX解决方案(第2版).part2.rar
资料下载链接地址: https://bbs.pinggu.org/a-1774366.html
附件大小:
35.64 MB   举报本内容




本书全面介绍了多维表达式(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)。
英文版移步:https://bbs.pinggu.org/thread-3669710-1-1.html
两个分卷均需下载,否则解压会有问题
[hide]


[/hide]
本书相关技术
维度语言的作用对象是(多)维度数据模型。在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.7MDX中的注释 13
1.8MDX数据模型:元组和集 14
1.8.1元组 14
1.8.2集 16
1.8.3查询 17
1.9更多基本词汇 18
1.9.1CrossJoin( ) 18
1.9.2Filter() 20
1.9.3Order() 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.3Avg()函数 38
2.3.4Count(),.Count 38
2.3.5DistinctCount()函数
(Microsoft扩展) 39
2.3.6Sum()函数 39
2.3.7Max()函数 40
2.3.8Median()函数 40
2.3.9Min()函数 40
2.3.10NonEmptyCount()函数
(Hyperion扩展) 41
2.3.11Stdev()和Stddev()函数 41
2.3.12StdevP()和StddevP()函数
(Microsoft扩展) 41
2.3.13Var()和Variance()函数 42
2.3.14VarP()和VarianceP()函数
(Microsoft扩展) 42
2.4补充的函数 42
2.5命名集简介 44
2.6小结 47
第3章MDX中的通用计算和选择 49
3.1MDX中的元数据引用函数 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.70作除数的处理 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.40作除数的处理 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.6AS2005中成员的相互联系:
强层次结构性、自存在性和
属性关系 93
4.2在AS2005中修改多维数据集
上下文 96
4.2.1CREATE 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.6KPI中的多维数据集上下文 117
4.7AS2005中全局、会话和
指定查询计算之间的定义
的可见性 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.10Pareto分析与累积和 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.5Time维度 210
8.3多维数据集 211
8.3.1维度关系 214
8.3.2角色扮演维度 217
8.3.3透视图 217
8.3.4钻取 218
8.4UDM中的计算模型 218
8.5在UDM上定义安全性 219
8.6小结 224
第9章Hyperion Essbase中属性
维度和成员属性的用法 225
9.1UDA与属性 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.2ADOMD服务器对象 237
10.2.1表达式 239
10.2.2元组生成器 239
10.2.3集生成器 240
10.2.4MDX 240
10.2.5上下文 241
10.2.6服务器元数据对象 242
10.3AMO.NET托管存储过程 243
10.4静态函数与非静态函数的
性能评估 244
10.4.1调试.NET存储过程 245
10.4.2NULL、ERROR()与异常
等方面的附加程序设计 246
10.4.3使用存储过程以获得动态
安全性 248
10.4.4COM DLL存储过程 251
10.5参数与返回类型的深入
讨论 251
10.6用于COM存储过程的MDX
函数 256
10.6.1SetToStr()与
TupleToStr() 256
10.6.2Members()、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.1MDX脚本基础 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.2MDX脚本以及更复杂的
多维数据集 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.2MDX表达式赋值 326
13.3.3给子多维数据集赋予一
个错误的值 329
13.3.4将单元属性值赋给子多
维数据集 330
13.3.5条件赋值 331
13.4现实世界中的MDX脚本 332
13.4.1Time Intelligence向导 332
13.4.2回顾基本分配 335
13.5小结 336
第14章增强客户端的交互 337
14.1使用钻取 338
14.1.1Microsoft 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.2MDX KPI函数 358
14.3.3使用KPI 359
14.4小结 361
第15章客户端编程基础 363
15.1ADOMD.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.4Analysis Services 2005
中的NonEmpty函数 395
16.2.5优化排序:Order() 396
16.2.6针对较大数据集查询
的UnOrder函数 397
16.3优化求和 397
16.4将计算设计在数据库中(将
成员属性放入度量中以及
新的MDX函数Member
Value中) 398
16.5MDX脚本优化 400
16.5.1计算的细节 400
16.5.2避免叶级别的计算 401
16.5.3在多维数据集设计中避免
叶级别计算 402
16.5.4度量值表达式优化叶级别
计算 403
16.5.5叶级别计算的MDX脚本
优化 404
16.5.6Analysis Services 2005:
使用属性层次结构而不
是成员属性 406
16.5.7Analysis 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.2CREATE CUBE语句
剖析 415
17.2.3定义维度 416
17.2.4级别 417
17.2.5定义度量 422
17.2.6添加命令 423
17.2.7ROLAP与MOLAP 424
17.2.8INSERT INTO语句
剖析 424
17.2.9多维数据集目标 425
17.2.10INSERT INTO中的
OPTIONS子句 427
17.2.11SELEC子句 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.2CREATE 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.2ASSL语句剖析 437
17.4.3安全性 437
17.5小结 438
附录AMDX函数与运算符参考 439
附录B影响MDX的连接参数 523
附录C单元与成员的内部属性 541
附录D格式化字符串编码 551
附录E学习资源 559



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2026-1-18 17:41