您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 15_高级多维数据集问题(3)
2020年2月23日星期日1第十五章MDX的概述与常用函数本章主要讲述以下内容:MDX概述【了解】Tuple与集合【了解】2020年2月23日星期日215.1MDX概述MDX(MultidimensionalExpressions)-多维表达式。MDX(多维表达式的英文首字母缩写词)是一种语法,支持多维对象与数据的定义和操作。MDX在很多方面与结构化查询语言(SQL)语法相似,但它不是SQL语言的扩展;事实上,MDX所提供的一些功能也可由SQL提供,尽管不是那么有效或直观。如同SQL查询一样,每个MDX查询都要求有数据请求(SELECT子句)、起始点(FROM子句)和筛选(WHERE子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据的特定部分。MDX还提供了可靠的函数集,用来对所检索的数据进行操作,同时还具有用用户定义函数扩展MDX的能力。如同SQL,MDX提供管理数据结构的数据定义语言(DDL)语法。其中有用于创建(和删除)多维数据集、维度、度量值以及它们的坐标对象的MDX命令。2020年2月23日星期日315.1MDX概述SQL和MDX比较多维表达式(MDX)语法乍看起来与结构化查询语言(SQL)的语法非常相似。在很多方面,MDX所提供的功能也与SQL相似;甚至经过努力可以在SQL中复制某些由MDX提供的功能。然而,SQL和MDX之间存在一些显著区别。SQL和MDX之间最显著的区别在于MDX具有引用多个维度的能力。尽管在Microsoft®SQLServer™2000AnalysisServices中存在单独使用SQL查询多维数据集的可能性,但是MDX所提供的命令却可以专门检索具有几乎任意多个维度的多维数据结构中的数据。SQL处理查询时仅涉及列和行这两个维度。因为SQL只设计用来处理二维表格格式数据,所以列和行这两个术语在SQL语法中具有意义。比较而言,MDX在查询中则可处理一个、两个、三个或更多的维度。因为MDX中可以使用多个维度,所以每个维度称作一个轴。MDX中的列和行这两个术语在MDX查询中仅用作前两个轴维度的别名;还有其它指派了别名的维度,但对于MDX这些别名本身没有真实意义。MDX支持这些别名是为了显示。2020年2月23日星期日415.1MDX概述在SQL中,SELECT子句用于定义查询的列布局,而WHERE子句用于定义行布局。可是在MDX中SELECT子句可用于定义几个轴维度,而WHERE子句可用来多维数据限制于特定的维度或成员。在SQL中,WHERE子句用于筛选查询所返回的数据。在MDX中,WHERE子句用于提供查询所返回的数据切片。虽然这两个概念相似,却不可等同。SQL查询使用WHERE子句包含应该或不应该在结果集中返回的项目的任意列表。虽然筛选中长的条件列表可以缩小所检索数据的范围,但是不要求子句中的元素必须产生清晰而简洁的数据子集。然而在MDX中,切片的概念意味着WHERE子句中的各个成员标识来自不同维度的数据的不同部分。由于多维数据的结构化结构,不可能请求同一维度的多个成员的切片。因为这一点,MDX中的WHERE子句能提供清晰而简洁的数据子集。创建SQL查询的过程也与创建MDX查询的过程不同。SQL查询的创建者将二维行集的结构形象化并加以定义,并且编写对一个或多个表的查询对该结构进行填充。相反,MDX查询的创建者通常将多维数据集的结构形象化并加以定义,并且编写对单个多维数据集的查询对该结构进行填充。这可能导致多维数据集具有任意数量的维度,例如,可能存在一个维度的数据集。2020年2月23日星期日515.1MDX概述SQL结果集的视觉形象是直观的;集合是一个行与列组成的二维表格。但是,MDX结果集的视觉形象就不直观。因为多维结果集可以有三个以上的维度,所以将该结构形象化比较困难。要在SQL中引用这些二维数据,在引用称为字段的单个数据单元时,可以使用适合于数据的任何方法,列名称和行的唯一标识均可。但是,MDX在引用数据单元时,不管数据形成的是单个单元还是一组单元,都使用一种非常特定并且统一的语法。尽管SQL和MDX具有相似的语法,但是MDX语法功能异常强大,而且,它可以非常复杂。然而,因为设计MDX本来意图是为了提供一种查询多维数据的简单而有效的方法,所以它采用了一致且易于理解的方式使用户认清二维查询和多维查询在概念上的区别。2020年2月23日星期日615.1MDX概述MDX中的几个重要的概念维度、级别、成员和度量值1,成员的表达方式与函数一般成员“成员”(Member)是“维度”中的一个项目。举例:[销货日期_日].[年](形式)[销货日期_日].[季度](形式)[销货日期_日].[2000].[第2季].[May]使用“索引键”指定特定的成员。成员索引键是提供维度用来识别特别成员时使用。主要是使用在某一层次的成员不维一时,可以使用两种方式来识别。如:[销货日期_日].[2000][销货日期_日].[年].&[2000]引用成员索引键确保在可更改维度中以及在具有非唯一成员名的维度中成员的正确标识。2020年2月23日星期日715.1MDX概述MDX中的几个重要的概念维度、级别、成员和度量值1,成员的表达方式与函数成员函数Ancestor(MDX)返回某个成员在指定级别或距离上的祖先。ClosingPeriod(MDX)返回某个成员在指定级别上的后代中的最后一个同级。Cousin(MDX)返回与指定的子成员在父成员下方具有相同的相对位置的子成员。CurrentMember(MDX)返回迭代过程中指定的维度或层次结构的当前成员。DataMember(MDX)返回系统生成的、与某个维度的非叶成员相关联的数据成员。DefaultMember(MDX)返回维度或层次结构的默认成员。FirstChild(MDX)返回成员的第一个子成员。2020年2月23日星期日815.1MDX概述成员函数FirstSibling(MDX)返回成员的父成员的第一个子成员。Item(成员)(MDX)返回指定元组中的成员。Lag(MDX)返回在所在维度中位置比指定成员靠前且靠前位数为指定位数的成员。LastChild(MDX)返回指定成员的最后一个子成员。LastSibling(MDX)返回指定成员的父成员的最后一个子成员。Lead(MDX)返回在所在维度中位置比指定成员靠后且靠后位数为指定位数的成员。LinkMember(MDX)返回相当于指定层次结构中的指定成员的成员。Members(字符串)(MDX)返回字符串表达式所指定的成员。2020年2月23日星期日915.1MDX概述成员函数NextMember(MDX)返回指定成员所在级别的下一个成员。OpeningPeriod(MDX)返回指定级别(也可以是指定成员)的后代中的第一个同级。ParallelPeriod(MDX)返回上一期间中与指定成员具有相同的相对位置的成员。Parent(MDX)返回成员的父成员。PrevMember(MDX)返回指定成员所在级别中的上一个成员。StrToMember(MDX)返回由MDX格式的字符串指定的成员。UnknownMember(MDX)返回与级别或成员相关联的未知成员。ValidMeasure(MDX)通过将不适用的维度强制到其顶层,来返回虚拟多维数据集中的有效度量值。2020年2月23日星期日1015.2Tuple与集合(Set)Tuple元组用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。换言之,元组是一种成员向量;请把元组看作基础数据库中的一个或多个记录,其这些列内的值归入这些分类。一系列关系图给出了元组的各种类型。2020年2月23日星期日1115.2Tuple与集合(Set)Tuple多维数据集的阴影部分表示(时间.[下半年])元组。请注意该元组包括了多维数据集的一半,因为它未排除源或路线维度中的任何信息。2020年2月23日星期日1215.2Tuple与集合(Set)Tuple下面的关系图加入阴影以表现(时间.[下半年],路线.非陆地.航空)元组。2020年2月23日星期日1315.2Tuple与集合(Set)本元组表示位于这些成员的交集内的单元。在MDX中,元组根据其复杂性依照语法进行构造。如果它仅由来自单个维度的一个成员组成(通常称作简单元组),则以下语法是可接受的。时间.[下半年]如果它由来自不止一个维度的成员组成,则元组所表示的成员必须括在圆括号内,如以下示例所示。(时间.[下半年],路线.非陆地.航空)由单个成员组成的元组也可括在圆括号内,但这不是必需的。元组常常编组成集合,以便在MDX查询中使用2020年2月23日星期日1415.2Tuple与集合(Set)元组(Tuple)函数1.Current返回迭代过程中集合中的当前元组。语法«Set».Current注释在集合的迭代过程中,迭代过程每一步中所操作的元组就是当前元组。此函数返回该元组。2.Item从指定的元组中返回成员。或者,从集合中返回元组。语法成员«Tuple».Item(«Index»)从«Tuple»中指定的元组中返回成员。将返回的成员是通过«Index»中元组内的成员基于零的位置来指定。2020年2月23日星期日1515.2Tuple与集合(Set)元组(Tuple)函数元组«Set».Item(«StringExpression»[,«StringExpression»...]|«Index»)从«Set»中指定的集合返回元组。将返回的元组是通过«StringExpression»中的名称来指定,或通过«Index»中集合内的元组基于零的位置来指定。示例成员以下示例返回[1999]:([1999],Sales,[2000],Sales).Item(0)如果[1996]是Time维度的Year级别中的第一个成员,则下面的示例返回[1996]:Time.Year.Members.Item(0)元组下面的示例返回([1996],Sales):{([1996],Sales),([1997],Sales),([1998],Sales)}.Item(0)2020年2月23日星期日1615.2Tuple与集合(Set)元组(Tuple)函数3.StrToTuple从具有多维表达式(MDX)格式的指定字符串表达式中构建元组。语法StrToTuple(«StringExpression»)示例下例返回(Sales,[1994]):StrToTuple((Sales,[1994]))2020年2月23日星期日1715.2Tuple与集合(Set)元组和维数元组可包括多个维度中的成员,也可包括来自同一个维度的多个成员。术语维数用来表示元组中成员所描述的维度。顺序在元组的维数中起一定作用,并可影响集合内元组的使用。2020年2月23日星期日1815.2Tuple与集合(Set)集合集合是零个、一个或多个元组的有序集合。集合最常用于在MDX查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。下面的示例显示具有两个元组的集合:{(时间.[上半年],路线.非陆地.航空),(时间.[下半年],路线.非陆地.海路)}一个集合可包含同一个元组不止一次的出现。下面的集合是可接受的:{时间.[下半年],时间.[下半年]}集合指以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。在MDX语法中,元组用花括号括起来以构造集合。注意:由单个元组组成的集合不是元组;MDX将其解释为集合。某些MDX函数接受元组作为参数,而如果传递单个元组集合,则会产生错误。元组和单个元组集合不可互换。2020年2月23日星期日1915.2Tuple与集合(Set)聚合函数显式键入元组并将它们括在花括号内并不是检索集合的唯一方法。MDX支持许多种返回集合
本文标题:15_高级多维数据集问题(3)
链接地址:https://www.777doc.com/doc-3899388 .html