版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、徐俊刚徐俊刚()20092009年年9 9月月20092009年年11 11月月MDXMDX概述概述MDXMDX基本概念基本概念MDXMDX与与SQLSQL的比较的比较基本基本MDXMDX高级高级MDXMDX多维表达式(多维表达式(MDX) 第第5章章MDX概述概述1MDX起源起源1.1背景背景SQL对多维数据查询和统计具有一定局限性对多维数据查询和统计具有一定局限性Microsoft定义和推出定义和推出MDX事例应用程序,存在于事例应用程序,存在于Microsoft SQL Server Analysis Service中中MDX语言用于在语言用于在 Microsoft SQL Server
2、 2000/2005 Analysis Services 中操作多维信息。中操作多维信息。MDX概述概述1MDX概述概述1.2概述概述MDX( Multidimensional Expressions )是一种语法,支持多维对象与多维数据的定义和操作MDX 在很多方面与SQL语法相似,但它不是 SQL 语言的扩展;事实上,MDX 所提供的一些功能也可由 SQL 提供,尽管不是那么有效或直观。每个 MDX 查询都要求有 SELECT 子句、FROM 子句和WHERE 子句。MDX 还提供了可靠的函数集,用来对所检索的数据进行操作,同时还具有用用户定义函数扩展 MDX 的能力。MDX 提供管理数据
3、结构的 DDL 语法,其中有用于创建(和删除)多维数据集、维度、度量值以及它们的坐标对象的 MDX 命令。MDX基本概念基本概念2单元、元组和集合单元、元组和集合2.1 SQL 从表返回二维数据子集,而 MDX 从多维数据集返回多维数据子集。以下元组标识其中值为 240 的单元单元:(路线.东半球.非洲, 时间.下半年.第四季度, 源.非陆地.航空, 度量值.包 )元组元组唯一标识多维数据集中的一部分;它不必指某个特定单元(切片或切块) (路线.东半球) (时间.下半年, 路线.西半球)元组的有序集合称为集合集合 (时间.上半年.第一季度), (时间.下半年.第三季度) MDX基本概念基本概念
4、2单元、元组和集合单元、元组和集合2.1MDX基本概念基本概念2轴维度和切片器维度轴维度和切片器维度2.2定义定义SELECT 语句用来选择要返回的维度和成员,称之为轴维度。WHERE 语句用来将返回的数据限定为特定维度和成员条件,称之为切片器维度。轴维度预期返回多个成员的数据,而切片器维度预期返回单个成员的数据。MDX基本概念基本概念2其他基本概念其他基本概念2.3计算成员计算成员计算成员不是基于数据、而是基于 MDX 中估值表达式的成员用户定义函数用户定义函数用户可以创建和注册自己的函数,这些函数对多维数据进行操作,同时按 MDX 语法接受参数并返回值。PivotTable 服务服务MDX
5、 数据定义和操作服务通过 PivotTable 服务提供。PivotTable 服务用于本地多维数据集的定义和操作,使用此多维数据集可以多维格式在本地存储数据。MDX和和SQL的比较的比较3MDX相对于相对于SQL的主要特点的主要特点3.1定义定义专门检索具有几乎任意多个维度的多维数据结构中的数据,MDX 在查询中则可处理一个、两个、三个或更多的维度。在 MDX 中 SELECT 子句可用于定义几个轴维度,而 WHERE 子句可用来把多维数据限制于特定的维度或成员。WHERE 子句用于提供查询所返回的数据切片。 WHERE 子句中的各个成员标识来自不同维度的数据的不同部分MDX 查询的创建者通
6、常将多维数据集的结构形象化并加以定义,并且编写对单个多维数据集的查询对该结构进行填充MDX 结果集的视觉形象不直观。因为多维结果集可以有三个以上的维度,所以将该结构形象化比较困难基本基本MDX4基本基本MDX查询查询4.1SELECT , . FROM WHERE 要指定数据集,MDX 查询必须包含有关下列各项的信息: (1) 轴的数目。最多可在 MDX 查询中指定 128 个轴。(2) 要包括在 MDX 查询的各个轴上的来自各个维度的成员。(3) 设置 MDX 查询上下文的多维数据集的名称。(4) 来自切片器维度的成员,在该维度上对来自轴维度的成员进行数据切片基本 MDX 查询示例: 别名S
7、ELECT Measures.Unit Sales, Measures.Store Sales ON COLUMNS, Time.1997, Time.1998 ON ROWSFROM SalesWHERE ( Store.USA.CA )4基本基本MDX查询查询4.1基本基本MDX4基本基本MDX查询查询4.1基本基本MDX MDX SELECT 语句的语法格式与 SQL 语法类似;可是用户将注意到以下几个显著区别:(1) MDX 语法通过用花括号( 和 字符)括住元组或成员来辨别集合。(2) MDX 查询在 SELECT 语句中最多可以有 128 个轴维度,但只有前 5 个轴有别名。轴可以
8、用其在 MDX 查询中的顺序位置或者用其别名(如果给它指派了别名的话)来引用。SELECT Measures.Unit Sales, Measures.Store Sales ON AXIS(0), Time.1997, Time.1998 ON AXIS(1) FROM Sales WHERE ( Store.USA.CA )(3) 如同 SQL 查询一样,FROM 子句为 MDX 查询指定数据的源(4) WHERE 子句用于描述切片器维度。 成员:下图加入阴影以表示 “时间.下半年.第三季度” 成员。4成员示例成员示例4.2基本基本MDX引用成员的可选方法是引用成员键。成员键由维度用来专门
9、标识给定成员。成员键: 用 & 字符将成员键与成员名区别开时间.下半年.&Q4 ( 第四季度成员的成员键 Q4) 引用成员键确保在可更改维度中以及在具有非唯一成员名的维度中成员的正确标识。可用成员名或其成员键引用某个成员。上一示例中用其成员名 “第四季度” 引用 “时间” 维度中的成员。 4成员名和成员键成员名和成员键4.3基本基本MDX可将成员创建为 MDX 查询的一部分,以使返回的数据基于估值表达式,而不是要查询的多维数据集中所存储的数据,这些成员称为计算成员。如以下示例所示:WITH MEMBER Measures.PackagesForecast ASMeasures.
10、Packages * 1.14计算成员计算成员4.4基本基本MDXMDX 提供许多函数来从其它 MDX 实体(如维度和级别)检索成员/ FirstChild 函数允许从给定维度或级别检索所有的成员/ 下列两式具有相同效果显式声明 : 时间.上半年 函数调用 : 时间.FirstChild / 时间维度的第一个子代成员4成员函数成员函数4.5基本基本MDX元组用于定义来自多维数据集的数据切片或切块;它由来自一个或多个维度的单个成员的有序集合组成。元组用于标识来自多维数据集的特定多维数据块;元组是一种成员向量;请把元组看作基础数据库中的一个或多个记录上图表现 (时间.下半年, 源.非陆地.航空)
11、元组。由来自不止一个维度的成员组成,则元组所表示的成员必须括在圆括号内4元组元组4.6基本基本MDX集合是零个、一个或多个元组的有序集合。集合最常用于在 MDX 查询中定义轴维度和切片器维度,并且可能只具有单个元组或可能在某些情况下为空。 集合指以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值(视使用的上下文而定) 元组用花括号括起来以构造集合示例 (时间.上半年, 源.非陆地.航空), (时间.下半年,源.非陆地.海路) 时间.下半年, 时间.下半年 / 允许同一个元组重复出现4集合集合4.7基本基本MDX聚合函数冒号运算符使用成员的自然顺序创建集合两边的成员包含在结果集内:第一
12、季度:第四季度集合和维数集合的维数用其中各个元组的维数表达。集合内元组的顺序非常重要下例不能作为集合使用:集合中的元组必须具有相同的维顺序 (时间.下半年,源.非陆地.航空), (源.非陆地.航空, 时间.下半年) 4聚合函数聚合函数4.8基本基本MDX指定轴维度的内容 语法可分解为: := ON := COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS | AXIS()每个轴维度与一个数字相关联: 0 对应于 x 轴,1 对应于 y 轴,2 对应于 z 轴,等等。 值是轴号。对于前 5 个轴,COLUMNS、ROWS、PAGES、SECTIONS 和 C
13、HAPTERS 这几个别名可分别代替 AXIS(0)、AXIS(1)、AXIS(2)、AXIS(3) 和 AXIS(4) 使用。 4轴维度和切片器维度轴维度和切片器维度4.9基本基本MDX指定切片器维度的内容(1)显式指派给轴的维度是切片器维度(2)假定未显式指派给轴的维度是切片器维度,用其默认成员进行筛选。(3)如果未显式指定默认成员,如果存在“(全部)”级别,则默认成员为“全部”成员,否则为最高级别的任意成员。(全部成员的名称不必为全部。)4轴维度和切片器维度轴维度和切片器维度4.9基本基本MDXMDX 查询提供上下文:查询提供上下文:FROM 由单个多维数据集的名称完成。 这并未限制用户
14、一次使用多个多维数据集;可以使用 LookupCube 函数来从多维数据集上下文以外的多维数据集检索数据。 与 SQL 不同,MDX 查询中的 FROM 子句通常不允许连接:FROM SalesCube, OtherCube 4建立多维数据集上下文建立多维数据集上下文4.10基本基本MDX1. 成员属性的使用成员属性的使用 各个元组中每个成员的一些基本信息,如成员名、父级别、子代数目等等。这些信息即称为成员属性。成员属性可视为存储于单个维度上按维度组织的数据。 例如,若要创建 Store Name 级别中成员的成员属性 Store Type,须确保 Store Type 列与 Store Na
15、me 列在相同的表中,然后将 Store Type 作为成员属性插入到 Store Name 级别中。5创建和使用属性值创建和使用属性值5.1高级高级MDX(1) DIMENSION PROPERTIES 关键字SELECT , . FROM WHERE := ON := DIMENSION PROPERTIES ,. property 语法的分解会因所查询的属性而有所不同。维度和级别的内在成员属性前必须加上维度和/或级别的名称。 成员的内在成员属性不能由维度名或级别名限定。自定义成员属性前应加上其所驻留的级别的名称。5创建和使用属性值创建和使用属性值5.1高级高级MDXSELECT /Mem
16、bers 函数是最常用的集合函数之一, /返回维度、级别或层次结构中成员的集合 CROSSJOIN(年, (销售量, 预算销售量) ON COLUMNS, NON EMPTY 产品.MEMBERS / 关键字,非空 DIMENSION PROPERTIES 产品.SKU, 产品.SRP ON ROWSFROM SalesCubeWHERE (一月, 销售代表.All, 地理.美国)返回以下数据集:5创建和使用属性值创建和使用属性值5.1高级高级MDX(2) Properties 函数成员属性还可通过使用 MDX 中的 Properties 函数进行检索。例如,下面的 MDX 查询使用 WITH
17、 关键字来创建包含 Store Sqft 成员属性的计算成员:WITH / 生成计算成员 MEMBER 度量值.商店规模 AS Val(商店.当前成员.属性(“商店平方米”) /VB库中的函数SELECT 度量值.单个销售额, 度量值.商店规模 ON COLUMNS, 商店.商店名称.成员 ON ROWSFrom Sales5创建和使用属性值创建和使用属性值5.1高级高级MDX可以生成一个与下表中的结果集类似的结果集:请注意 MDX 查询示例中 Val( ) 函数的使用。Properties 函数是字符串类型的函数;所有用 Properties 函数检索的成员属性均将强制转换为字符串。5创建和
18、使用属性值创建和使用属性值5.1高级高级MDX(3) 内在维度和级别成员属性所有维度和级别均支持下面所列的内在成员属性。这些成员属性在特定维度或级别的上下文中使用,并且为指定维度或级别的每个成员提供值。例如,在多维表达式 (MDX) 查询中指定下列语句:Sales.Name /返回级别、维度、成员或层次结构的名称返回 Sales 维度的各个引用成员的名称:属性 描述 ID 成员的内部维护 ID Key 存储于 MEMBERS 架构行集的 MEMBER_KEY 列中 成员的值 Name 成员的名称 5创建和使用属性值创建和使用属性值5.1高级高级MDX维度成员属性前是应用属性的维度的名称下例示范
19、了正确的语法:DIMENSION PROPERTIES .ID 级别成员属性前可加上级别名,或为附加规范加上维度和级别名,如下所示:DIMENSION PROPERTIES .ID5创建和使用属性值创建和使用属性值5.1高级高级MDX(4) 内在成员属性 内在成员属性不能为特定维度或级别加以请求,而应用于多维表达式 (MDX) 查询中轴维度的所有成员例如,在 MDX 查询中指定下列语句:PROPERTIES DESCRIPTION返回对轴维度中各个成员的描述。5创建和使用属性值创建和使用属性值5.1高级高级MDX下面列出所支持的内在成员属性及描述:CALCULATION_PASS_DEPTH:
20、 仅用于计算单元。计算公式的传递深度,此属性确定解析计算公式需要多少个传递。有关传递次序的更多信息,请参见理解传递次序和求解次序。 CALCULATION_PASS_NUMBER: 仅用于计算单元。计算公式的传递号,此属性确定计算公式将分别在哪个传递上开始赋值和结束计算。该属性的默认值为 1;其最大值为 65,535。有关传递次序的更多信息,请参见理解传递次序和求解次序。 . . .5创建和使用属性值创建和使用属性值5.1高级高级MDX(5) 自定义成员属性 自定义成员属性可添加到维度中的特定命名级别中。自定义成员属性不能添加到维度的“(全部)”级别,或添加到维度本身 用来引用自定义成员属性的
21、语法类似于用来引用内在级别成员属性的语法,如下列示例所示:PROPERTIES .5创建和使用属性值创建和使用属性值5.1高级高级MDX2. 单元属性的使用 MDX 单元属性所包含的信息,是单元的内容和格式的信息。 下例显示 MDX SELECT CELL PROPERTIES 关键字语法。SELECT , . FROM WHERE := CELL PROPERTIES , .5创建和使用属性值创建和使用属性值5.1高级高级MDX下面列出用于 值的内在单元属性BACK_COLOR: 显示 VALUE 或 FORMATTED_VALUE 属性的背景颜色。CELL_EVALUATION_LIST:
22、 适用于单元的以分号分隔的一列求值公式,按从最低到最高的求解次序排列。CELL_ORDINAL: 数据集中单元的序列号。FORE_COLOR: 显示 VALUE 或 FORMATTED_VALUE 属性的前景颜色。 5创建和使用属性值创建和使用属性值5.1高级高级MDX 默认情况下,如果未用 CELL PROPERTIES 关键字,则返回的单元属性为 VALUE、FORMATTED_VALUE 和 CELL_ORDINAL(按此顺序)。 如果使用了 CELL PROPERTIES 关键字,则只返回用此关键字显式声明的单元属性。 下例示范了 MDX 查询中 CELL PROPERTIES 关键字
23、的使用:SELECT Measures.Unit Sales, Measures.Store Size ON COLUMNS, Store.Store Name.Members ON ROWSFROM SalesCELL PROPERTIES VALUE, FORMATTED_VALUE, FORMAT_STRING, FORE_COLOR, BACK_COLOR5创建和使用属性值创建和使用属性值5.1高级高级MDX3. 使用 Custom Member Options 属性 使用维度编辑器或多维数据集编辑器的 Custom Member Options 属性,可通过 Analysis Man
24、ager 设置单元属性。 Custom Member Options 属性接受每个成员的列引用,该引用包含以逗号分隔的单元属性列表。 单元属性以字符串表达式的形式表示,如例所示。FORE_COLOR=255, BACK_COLOR=65535示例为指定成员提供一个带红色前景的黄色背景。5创建和使用属性值创建和使用属性值5.1高级高级MDX4. 使用 FORMAT_STRING 单元属性 FORMAT_STRING 单元属性用于格式化 VALUE 单元属性,以创建 FORMATTED_VALUE 单元属性值。 FORMAT_STRING 单元属性对于字符串和数字原始值均能处理,它对该值应用格式表
25、达式以返回 FORMATTED_VALUE 单元属性的格式化值。5创建和使用属性值创建和使用属性值5.1高级高级MDX5. 使用字符串值符号 字符串的格式表达式可以是一部分,也可以是由分号 (;) 分隔开的两部分。 一部分格式应用于所有字符串值。 两部分时第一部分应用于字符串数据,而第二部分应用于空值和零长度字符串 ()。 (1) 字符占位符。它显示一个字符或一个空格。 (2)& 字符占位符。它显示一个字符或什么都不显示。 (3) 强制大写。以大写格式显示所有字符。 (5) ! 强制从左到右填充占位符。 5创建和使用属性值创建和使用属性值5.1高级高级MDX6. 使用数字值 数字的用户
26、定义格式表达式可以有一到四个由分号分隔的部分。如果格式参数包含一个命名数字格式,则只允许有一个部分。一部分:格式表达式应用于所有值。 两部分:第一部分应用于正值和零,第二部分应用于负值。 三部分: 第一部分应用于正值,第二部分应用于负值,第三部分应用于零。 四部分:第一部分应用于正值,第二部分应用于负值,第三部分应用于零,第四部分应用于空值。 下例具有两个部分:$#,#0;($#,#0)如果包含两个紧挨着的分号,则缺少的部分用正值的格式打印。$#,#0;Zero5创建和使用属性值创建和使用属性值5.1高级高级MDX7. 使用 FORE_COLOR 和 BACK_COLOR 单元属性 以 Mic
27、rosoft Windows 操作系统红-绿-蓝 (RGB) 格式存储单元的文本和背景的颜色信息。 范围为 0 到 16,777,215 (&H00FFFFFF) 数字的高位字节始终等于 0;低位的 3 个字节,从最低位字节到最高位字节分别决定了红色、绿色和蓝色的数量。红色、绿色和蓝色成分分别由一个 0 到 255 (&HFF) 之间的数字表示。例如,值 255 (&H000000FF) 代表红色,值 65280 (&H0000FF00) 代表绿色,而值 16711680 (&H00FF0000) 代表蓝色。5创建和使用属性值创建和使用属性值5.1高级高
28、级MDX MDX 中的命名集可能是长而复杂并且不易理解的声明 命名集是一个与别名相关联的集合表达式。命名集可将集合中的成员或函数合并。 命名集是维度成员集或所创建的可以再度使用的集合表达式。WITH SET ChardonnayChablis AS Product.All . .SELECT ChardonnayChablis ON COLUMNS, Measures.Unit Sales ON ROWSFROM Sales5生成 MDX 中的命名集5.2高级高级MDX使用 WITH 创建命名集WITH , formula_specificationSELECT , . FROM WHERE
29、:= SET AS 参数包含命名集的别名。 参数包含命名集别名所指的集合表达式。 5生成 MDX 中的命名集5.2高级高级MDX 示例使用 Filter、CurrentMember、Name 和 InStr 函数来创建 ChardonnayChablis 命名集:/ VB:InStr (start, string1, string2 , compare) /返回:指定一字符串在另一字符串中最先出现的位置。/ CurrentMember: MDX 表达式,拒绝对度量值“ chardonnay ” /的单元的访问,但允许对所有其它度量值的单元的访问/ Filter/ Filter(Set, Sea
30、rch Condition) /返回根据搜索条件对指定集合进行筛选所得到的集合。WITH SET ChardonnayChablis AS Filter(Product.Members, (InStr(1, Product.CurrentMember.Name, chardonnay) 0) OR (InStr(1, Product.CurrentMember.Name, chablis) 0)SELECT ChardonnayChablis ON COLUMNS, Measures.Unit Sales ON ROWSFROM Sales1. 使用使用 WITH 创建计算成员创建计算成员WI
31、TH , SELECT , . FROM WHERE := MEMBER AS ,SOLVE_ORDER = , = .(1) 值是计算成员的完全合法名称, 在经过计算后,将返回计算成员的值。(2)使用 SOLVE_ORDER 关键字指定计算成员的求解次序(3) 值中提供单元属性的名称和在 值中提供单元属性值,可随意指定计算成员内在单元属性的值。5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX 下例的 MDX 查询示例定义了两个计算成员。第一个计算成员 Measures.StoreType 用于表示 Store Type 成员属性。第二个计算成员 Measures.Profit
32、Pct 用于计算给定商店的总利润率,并将其表示为格式化的百分比值。WITH MEMBER Measures.StoreType AS Store.CurrentMember.Properties(Store Type), SOLVE_ORDER = 2 MEMBER Measures.ProfitPct AS Val(Measures.Store Sales - Measures.Store Cost) / Measures.Store Sales), SOLVE_ORDER = 1, FORMAT_STRING = PercentSELECT Store.Store Name.Members
33、 ON COLUMNS, Measures.Store Sales, Measures.Store Cost, Measures.StoreType, Measures.ProfitPct ON ROWSFROM Sales 计算成员可在层次结构的任意位置创建。 下例 MDX 查询示例定义作为 Beer and Wine 成员的子成员创建的计算成员,以确定给定商店的啤酒和果酒 (Beer and Wine) 的单位销售额是否至少为 100.00:WITH MEMBER Product.Beer and Wine.BigSeller AS IIf(Product.Beer and Wine 10
34、0, Yes,No)SELECT Product.BigSeller ON COLUMNS, Store.Store Name.Members ON ROWSFROM Sales5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX使用同一 MDX 中其它计算成员的计算成员:WITH MEMBER Measures.ProfitPct AS Val(Measures.Store Sales - Measures.Store Cost) / Measures.Store Sales), SOLVE_ORDER = 1, FORMAT_STRING = Percent MEMBER Me
35、asures.ProfitValue AS Measures.Store Sales * Measures.ProfitPct, SOLVE_ORDER = 2, FORMAT_STRING = CurrencySELECT Store.Store Name.Members ON COLUMNS, Measures.Store Sales, Measures.Store Cost, Measures.ProfitValue, Measures.ProfitPct ON ROWSFROM Sales第二个计算成员 Measures.ProfitValue 使用第一个计算成员 Measures.P
36、rofitPct 中创建的值来生成自己的值。2. 在计算成员中使用函数在计算成员中使用函数(1) 算术运算符: + , - , * , /(2) 比较运算符: , = , = , , =(3) 按位运算符: AND , OR , NOT , XOR (与 C 相同)(4) 集合运算符: + 对两个集合执行 Union 函数。 * 对两个集合执行 Crossjoin 函数。 - 对两个集合执行 Except 函数。 : 创建自然排序集合,并将两个成员作为终结点,这两个指定成员间的所有成员作为集合的成员包括其中。 5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX(5)数值函数 如下
37、面的 MDX 查询示例所示,当 Aggregate 函数与产生总和的度量值相组合时,功能尤其强大:WITH MEMBER Time.1st Half Sales AS Aggregate(Time.Q1, Time.Q2) MEMBER Time.2nd Half Sales AS Aggregate(Time.Q3, Time.Q4), MEMBER Time.Difference AS Time.2nd Half Sales - Time.1st Half Sales,SELECT Store.Store State.Members ON COLUMNS, Time.1st Half Sa
38、les, Time.2nd Half Sales, Time.Difference ON ROWSFROM SalesWHERE Measures.Store Sales 查询产生了各州的店面销售额总和,带有前两个计算成员用 Aggregate 函数所提供的上半年和下半年的聚合,以及由第三个计算成员提供的二者的差额。5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDXMDX 还提供了一列统计函数,以处理例程统计计算,例如,Median 函数计算集合内的中值,以下 MDX 查询:WITH MEMBER Time.1st Half Sales AS Sum(Time.Q1, Time.
39、Q2) MEMBER Time.2nd Half Sales AS Sum(Time.Q3, Time.Q4) MEMBER Time.Median AS Median(Time.Members)SELECT NON EMPTY Store.Store Name.Members ON COLUMNS, Time.1st Half Sales, Time.2nd Half Sales, Time.Median ON ROWSFROM SalesWHERE Measures.Store Sales在本示例中,除了 Time.1st Half Sales 和 Time.2nd Half Sales
40、计算成员提供的各个商店的上半年和下半年的店面销售额的聚合之外,还有 Time.Median 计算成员提供的各个商店店面销售额的中值。5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX(6) 字符串函数 MDX 提供许多字符串函数,不只是为了 MDX 表达式内的字符串处理,还为了支持 MDX 中用户定义函数。 例如,MemberToStr 函数将某成员引用转换为 MDX 格式的字符串以用于用户定义函数,因为用户定义函数不接受来自 MDX 的对象引用。5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX(7)集合函数 集合函数用于在 MDX 中返回集合,为用户提供方便生成
41、动态定义的集合和快速创建可再次使用的命名集的功能。 Members 函数是最常用的集合函数之一,它将级别或维度的所有成员(计算成员除外)作为一个集合返回。 下面的 MDX 查询示例示范了工作中的 Members 函数。SELECT NON EMPTY Store.Store Name.Members ON COLUMNS, Measures.Store Sales ON ROWSFROM Sales 本 MDX 查询示例返回了 Sales 多维数据集中的各个商店的总销售额数字。如果不用 Members 函数,则不得不显式输入各个商店名称,以使其完成本 MDX 查询示例的功能。5生成生成 MDX
42、 中的计算成员中的计算成员5.3高级高级MDX(8) 元组函数 如同集合函数,元组函数用于在 MDX 中返回元组。元组函数还用于辅助 MDX 中的用户定义函数,如 StrToTuple 函数。 由于用户定义函数不能处理 MDX 对象引用,用户定义函数可以返回 MDX 格式的字符串返回值来表示元组,并使用 StrToTuple 函数将它转换为有效的元组引用。5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX(9) 成员函数 计算成员中常常引用成员;成员函数允许计算成员执行复杂成员检索,从而同样轻松地处理层次结构和集合。 MDX 中计算成员的解可以是本质上迭代的,因为计算成员可以基于
43、对集合成员的迭代进行构造。MDX 中 CurrentMember 之类的函数使您得以利用此迭代功能5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDX(10) IIf 函数 多维表达式 (MDX) 中的 IIf 函数可用于执行简单的是或否决策。下例 MDX 查询示例:WITH MEMBER Measures.BigSeller AS IIf(Measures.Store Sales 20000, Yes, No) SELECT Store.Store Name.Members ON COLUMNS, Measures.Store Sales, Measures.BigSeller
44、ON ROWSFROM Sales 本 MDX 示例返回两行。一行是 Measures.Store Sales 成员,提供各个商店的总销售额。第二行是一个计算成员,它基于各个商店的销售额决定商店是否是个大销售商。5生成生成 MDX 中的计算成员中的计算成员5.3高级高级MDXMDX 常用多维数据集切片装载到内存,对其进行高速缓存以达到更快检索的目的。(1) 可使用 CREATE CACHE 语句。(2) WITH 语句也可完成这项任务。例如,下面的 MDX 查询使用 WITH 语句来进行高速缓存: WITH CACHE AS (Store.Store Name.Members) SELECT
45、Store.Store Name.Members ON COLUMNS, Measures.Unit Sales ON ROWSFROM Sales5生成生成 MDX 中的高速缓存中的高速缓存5.4高级高级MDX使用 WITH 创建高速缓存WITH , SELECT , . FROM WHERE 高速缓存的 值进一步分解: := CACHE AS (, .)(1) 值是用来创建高速缓存的集合表达式。 值可支持 MDX 集合函数的使用。(2) 当用 集合表达式构造高速缓存时,下列规则适用: (a) 每个 都必须包含仅来自一个维度的成员。各个成员必须互不相同。 (b) 各个 必须来自不同的维度。(
46、c) 不能包含度量值。 5生成生成 MDX 中的高速缓存中的高速缓存5.4高级高级MDX计算单元功能通过使您得以定义单元的特定切片(称为计算子多维数据集),并将公式应用到该计算子多维数据集内的各个单元来提供此功能。应用公式时,依据的是可应用于每个单元的可选条件。计算成员是维度成员,其值于运行时通过在定义计算成员时所指定的表达式计算而得到。(1) 使用 CREATE CELL CALCULATION 语句。对于现有多维数据集,ALTER CUBE 语句也可用来添加计算单元。(2) 若要创建用于会话生存周期的计算单元,请使用 CREATE CELL CALCULATION 语句。(3) 若要创建用
47、于查询生存周期的计算单元,请使用 WITH 语句5生成生成 MDX 中的计算单元中的计算单元5.5高级高级MDX使用 WITH 创建计算单元WITH , SELECT , . FROM WHERE := CELL CALCULATION FOR () AS , := property_name = , = . 值是计算单元的名称。 包含一列正交的、单维度 MDX 集合表达式,而每个表达式都必须解析为下列集合分类之一:5生成生成 MDX 中的计算单元中的计算单元5.5高级高级MDX空集合:解析为空集合的 MDX 集合表达式。在这种情况下,该集合被忽略。 单个成员集合:解析为单个成员的 MDX 集
48、合表达式。 级别成员的集合:解析为单个级别的成员的 MDX 集合表达式。其示例为 .Members MDX 函数。若要包括计算成员,请使用 .AllMembers MDX 函数。 后代的集合:解析为指定成员后代的 MDX 集合表达式。其示例为 Descendants(, , ) MDX 函数。 5生成生成 MDX 中的计算单元中的计算单元5.5高级高级MDX1. 在在 MDX 中使用用户定义函数中使用用户定义函数:无参数调用:MyNewFunction( )有参数调用:MyNewFunctionWithParms(Parameter1, 2, 800)5在在 MDX 中创建和使用用户定义函数中
49、创建和使用用户定义函数5.6高级高级MDX2. USE LIBRARY 语句: 用 USE LIBRARY 语句执行外部库的装载。用户定义函数都必须与 COM 类相关联,这些类通常以 Microsoft ActiveX 动态链接库 (DLL) 的形式提供。 假如用户定义函数位于 C:WinntSystem 、名为 MyFunc.dll 的 ActiveX DLL 的一部分,可将其装载如下:USE LIBRARY C:WINNTSYSTEMMyFunc.dll与 MyFuncClass类关联,可装载库:USE LIBRARY MyFunc.MyFuncClass 当引用可能位于不同服务器的不同位
50、置的库时,推荐使用本方法。 多个库可以用单个 USE LIBRARY 语句同时装载:USE LIBRARY C:WINNTSYSTEMMyFunc.dll, C:WINNTSYSTEMNewFuncs.dll不带参数的 USE LIBRARY 语句将注消所有函数库。5在在 MDX 中创建和使用用户定义函数中创建和使用用户定义函数5.6高级高级MDX3. DROP LIBRARY 语句语句DROP LIBRARY 语句可用于卸载特定库或卸载所有的库:DROP LIBRARY MyFunc.MyFuncClassPivotTable 服务支持 DROP LIBRARY 语句。5在在 MDX 中创建和使用用户定义函数中创建和使用用户定义函数5.6高级高级MDX4. 创建用户定义函数创建用户定义函数 用户定义函数可用支持 COM 接口的任何编程语言创建 用户定义函数可接受任何可强制转换为字符串、数字或者字符串数组或数字数组的参数。 用户定义类型或对象引用不能用作参数。 数组也可用作参数 返回空值的函数(例如 Visual Basic 中的子程序)也可使用,例如,如果想要在 MDX 语句中使用 MyVoidFunction() 函数,可采
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版四年级上册数学第三单元 乘法 测试卷带下载答案
- 物业员工工作总结范文10篇
- 认真承诺我发誓
- 语文味激发学生学习兴趣的关键
- 语文学习心得与策略分享
- 货车司机聘用合同案例
- 购销合同书写规范及示例
- 购销合同范本格式写作规范
- 跟随大卫科波菲尔的英语脚步
- 运费结算合同协议编写指南
- 毗尼日用切要
- 食品机械与设备期末考试复习题目
- 试论盗窃罪的秘密窃取
- 危重病人管理制度.ppt
- 网页新闻编译原则和技巧
- 江苏省高级人民法院有关农村土地承包纠纷案件纪要
- 重庆市高级人民法院关于当前民事审判若干法律问题的指导意见
- 试验室主要设备电压功率表
- 民族中学“百日消防安全攻坚战”实施方案
- 数字逻辑课程设计 ----数字记步器
- 化学工程专业毕业设计聚丁二烯生产设计
评论
0/150
提交评论