《高级多维数据集问题.ppt》由会员分享,可在线阅读,更多相关《高级多维数据集问题.ppt(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十五章 MDX的概述与常用函数本章主要讲述以下内容:lMDX概述 【了解了解】lTuple与集合【了解了解】5/29/2023115.1 MDX概述 MDX(Multidimensional Expressions)-多维表达式。MDX(多维表达式的英文首字母缩写词)是一种语法,支持多维对象与数据的定义和操作。MDX 在很多方面与结构化查询语言(SQL)语法相似,但它不是 SQL 语言的扩展;事实上,MDX 所提供的一些功能也可由 SQL 提供,尽管不是那么有效或直观。如同 SQL 查询一样,每个 MDX 查询都要求有数据请求(SELECT 子句)、起始点(FROM 子句)和筛选(WHERE
2、 子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据的特定部分。MDX 还提供了可靠的函数集,用来对所检索的数据进行操作,同时还具有用用户定义函数扩展 MDX 的能力。如同 SQL,MDX 提供管理数据结构的数据定义语言(DDL)语法。其中有用于创建(和删除)多维数据集、维度、度量值以及它们的坐标对象的 MDX 命令。5/29/2023215.1 MDX概述 SQL 和和 MDX 比较比较 多维表达式(MDX)语法乍看起来与结构化查询语言(SQL)的语法非常相似。在很多方面,MDX 所提供的功能也与 SQL 相似;甚至经过努力可以在 SQL 中复制某些由 MDX 提供的功
3、能。然而,SQL 和 MDX 之间存在一些显著区别。SQL 和 MDX 之间最显著的区别在于 MDX 具有引用多个维度的能力。尽管在 Microsoft SQL Server 2000 Analysis Services 中存在单独使用 SQL 查询多维数据集的可能性,但是 MDX 所提供的命令却可以专门检索具有几乎任意多个维度的多维数据结构中的数据。SQL 处理查询时仅涉及列和行这两个维度。因为 SQL 只设计用来处理二维表格格式数据,所以列和行这两个术语在 SQL 语法中具有意义。比较而言,MDX 在查询中则可处理一个、两个、三个或更多的维度。因为 MDX 中可以使用多个维度,所以每个维度
4、称作一个轴。MDX 中的列和行这两个术语在 MDX 查询中仅用作前两个轴维度的别名;还有其它指派了别名的维度,但对于 MDX 这些别名本身没有真实意义。MDX 支持这些别名是为了显示。5/29/2023315.1 MDX概述 在 SQL 中,SELECT 子句用于定义查询的列布局,而 WHERE 子句用于定义行布局。可是在 MDX 中 SELECT 子句可用于定义几个轴维度,而 WHERE 子句可用来多维数据限制于特定的维度或成员。在 SQL 中,WHERE 子句用于筛选查询所返回的数据。在 MDX 中,WHERE 子句用于提供查询所返回的数据切片。虽然这两个概念相似,却不可等同。SQL 查询
5、使用 WHERE 子句包含应该或不应该在结果集中返回的项目的任意列表。虽然筛选中长的条件列表可以缩小所检索数据的范围,但是不要求子句中的元素必须产生清晰而简洁的数据子集。然而在 MDX 中,切片的概念意味着 WHERE 子句中的各个成员标识来自不同维度的数据的不同部分。由于多维数据的结构化结构,不可能请求同一维度的多个成员的切片。因为这一点,MDX 中的 WHERE 子句能提供清晰而简洁的数据子集。创建 SQL 查询的过程也与创建 MDX 查询的过程不同。SQL 查询的创建者将二维行集的结构形象化并加以定义,并且编写对一个或多个表的查询对该结构进行填充。相反,MDX 查询的创建者通常将多维数据
6、集的结构形象化并加以定义,并且编写对单个多维数据集的查询对该结构进行填充。这可能导致多维数据集具有任意数量的维度,例如,可能存在一个维度的数据集。5/29/2023415.1 MDX概述 SQL 结果集的视觉形象是直观的;集合是一个行与列组成的二维表格。但是,MDX 结果集的视觉形象就不直观。因为多维结果集可以有三个以上的维度,所以将该结构形象化比较困难。要在 SQL 中引用这些二维数据,在引用称为字段的单个数据单元时,可以使用适合于数据的任何方法,列名称和行的唯一标识均可。但是,MDX 在引用数据单元时,不管数据形成的是单个单元还是一组单元,都使用一种非常特定并且统一的语法。尽管 SQL 和
7、 MDX 具有相似的语法,但是 MDX 语法功能异常强大,而且,它可以非常复杂。然而,因为设计 MDX 本来意图是为了提供一种查询多维数据的简单而有效的方法,所以它采用了一致且易于理解的方式使用户认清二维查询和多维查询在概念上的区别。5/29/2023515.1 MDX概述 MDX中的几个重要的概念维度、级别、成员和度量值1,成员的表达方式与函数q一般成员 “成员”(Member)是“维度”中的一个项目。举例:销货日期_日.年 (形式)销货日期_日.季度(形式)销货日期_日.2000.第2季.May 使用“索引键”指定特定的成员。成员索引键是提供维度用来识别特别成员时使用。主要是使用在某一层次
8、的成员不维一时,可以使用两种方式来识别。如:销货日期_日.2000 销货日期_日.年.&2000引用成员索引键确保在可更改维度中以及在具有非唯一成员名的维度中成员的正确标识。5/29/2023615.1 MDX概述 MDX中的几个重要的概念维度、级别、成员和度量值1,成员的表达方式与函数q成员函数Ancestor(MDX)返回某个成员在指定级别或距离上的祖先。ClosingPeriod(MDX)返回某个成员在指定级别上的后代中的最后一个同级。Cousin(MDX)返回与指定的子成员在父成员下方具有相同的相对位置的子成员。CurrentMember(MDX)返回迭代过程中指定的维度或层次结构的当
9、前成员。DataMember(MDX)返回系统生成的、与某个维度的非叶成员相关联的数据成员。DefaultMember(MDX)返回维度或层次结构的默认成员。FirstChild(MDX)返回成员的第一个子成员。5/29/2023715.1 MDX概述 q成员函数FirstSibling(MDX)返回成员的父成员的第一个子成员。Item(成员)(MDX)返回指定元组中的成员。Lag(MDX)返回在所在维度中位置比指定成员靠前且靠前位数为指定位数的成员。LastChild(MDX)返回指定成员的最后一个子成员。LastSibling(MDX)返回指定成员的父成员的最后一个子成员。Lead(MDX
10、)返回在所在维度中位置比指定成员靠后且靠后位数为指定位数的成员。LinkMember(MDX)返回相当于指定层次结构中的指定成员的成员。Members(字符串)(MDX)返回字符串表达式所指定的成员。5/29/2023815.1 MDX概述 q成员函数NextMember(MDX)返回指定成员所在级别的下一个成员。OpeningPeriod(MDX)返回指定级别(也可以是指定成员)的后代中的第一个同级。ParallelPeriod(MDX)返回上一期间中与指定成员具有相同的相对位置的成员。Parent(MDX)返回成员的父成员。PrevMember(MDX)返回指定成员所在级别中的上一个成员。
11、StrToMember(MDX)返回由MDX格式的字符串指定的成员。UnknownMember(MDX)返回与级别或成员相关联的未知成员。ValidMeasure(MDX)通过将不适用的维度强制到其顶层,来返回虚拟多维数据集中的有效度量值。5/29/2023915.2 Tuple与集合(Set)qTuple元组用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。换言之,元组是一种成员向量;请把元组看作基础数据库中的一个或多个记录,其这些列内的值归入这些分类。一
12、系列关系图给出了元组的各种类型。5/29/20231015.2 Tuple与集合(Set)qTuple多维数据集的阴影部分表示(时间.下半年)元组。请注意该元组包括了多维数据集的一半,因为它未排除源或路线维度中的任何信息。5/29/20231115.2 Tuple与集合(Set)qTuple下面的关系图加入阴影以表现(时间.下半年,路线.非陆地.航空)元组。5/29/20231215.2 Tuple与集合(Set)本元组表示位于这些成员的交集内的单元。在MDX中,元组根据其复杂性依照语法进行构造。如果它仅由来自单个维度的一个成员组成(通常称作简单元组),则以下语法是可接受的。时间.下半年 如果
13、它由来自不止一个维度的成员组成,则元组所表示的成员必须括在圆括号内,如以下示例所示。(时间.下半年,路线.非陆地.航空)由单个成员组成的元组也可括在圆括号内,但这不是必需的。元组常常编组成集合,以便在MDX查询中使用5/29/20231315.2 Tuple与集合(Set)元组(Tuple)函数1.Current 返回迭代过程中集合中的当前元组。语法语法 Set.CurrentCurrent注释注释 在集合的迭代过程中,迭代过程每一步中所操作的元组就是当前元组。此函数返回该元组。2.Item从指定的元组中返回成员。或者,从集合中返回元组。语法语法成员成员Tuple.Item Item(Inde
14、x)从 Tuple 中指定的元组中返回成员。将返回的成员是通过 Index 中元组内的成员基于零的位置来指定。5/29/20231415.2 Tuple与集合(Set)元组(Tuple)函数元组元组Set.ItemItem(String Expression,String Expression.|Index)从 Set 中指定的集合返回元组。将返回的元组是通过 String Expression 中的名称来指定,或通过 Index 中集合内的元组基于零的位置来指定。示例示例成员成员以下示例返回 1999:(1999,Sales,2000,Sales).Item(0)如果 1996 是 Time
15、 维度的 Year 级别中的第一个成员,则下面的示例返回 1996:Time.Year.Members.Item(0)元组元组下面的示例返回(1996,Sales):(1996,Sales),(1997,Sales),(1998,Sales).Item(0)5/29/20231515.2 Tuple与集合(Set)元组(Tuple)函数3.StrToTuple从具有多维表达式从具有多维表达式(MDX)格式的指定字符串表达式中构建元格式的指定字符串表达式中构建元组。组。语法语法StrToTuple(StrToTuple(String ExpressionString Expression)示例示
16、例下例返回下例返回(Sales,1994):StrToTuple(Sales,1994)StrToTuple(Sales,1994)5/29/20231615.2 Tuple与集合(Set)元组和维数元组和维数元组可包括多个维度中的成员,也可包括来自同一个维度的多个成员。术语维数用来表示元组中成员所描述的维度。顺序在元组的维数中起一定作用,并可影响集合内元组的使用。5/29/20231715.2 Tuple与集合(Set)集合集合集合是零个、一个或多个元组的有序集合。集合最常用于在 MDX 查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。下面的示例显示具有两个元
17、组的集合:(时间.上半年,路线.非陆地.航空),(时间.下半年,路线.非陆地.海路)一个集合可包含同一个元组不止一次的出现。下面的集合是可接受的:时间.下半年,时间.下半年 集合指以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。在 MDX 语法中,元组用花括号括起来以构造集合。注意:由单个元组组成的集合不是元组;MDX 将其解释为集合。某些 MDX 函数接受元组作为参数,而如果传递单个元组集合,则会产生错误。元组和单个元组集合不可互换。5/29/20231815.2 Tuple与集合(Set)聚合函数聚合函数显式键入元组并将它们括在花括号内并不是检索集合的
18、唯一方法。MDX 支持许多种返回集合的函数。冒号运算符使使您得以使用成员的自然顺序创建集合。例如下面的集合:第一季度:第四季度 检索与下面的集合相同的成员集合:第一季度,第二季度,第三季度,第四季度 冒号运算符是一种包含函数;冒号运算符两边的成员都将包含在结果集内。其它返回集合的 MDX 函数可单独使用,也可作为以逗号分隔的成员列表的一部分使用。例如,下面所有的 MDX 表达式都是有效的:时间.Children 时间.Children,路线.非陆地.航空 时间.Children,路线.非陆地.航空,源.Children 5/29/20231915.2 Tuple与集合(Set)聚合函数聚合函数
19、AddCalculatedMembers向集合中添加计算成员。向集合中添加计算成员。AllMembers返回包含指定维度或级别的所有成员的集合,包括计算成员。返回包含指定维度或级别的所有成员的集合,包括计算成员。Ancestors返回指定距离上某个成员的所有祖先。返回指定距离上某个成员的所有祖先。Ascendants返回成员祖先的集合,包括成员本身。返回成员祖先的集合,包括成员本身。Axis返回与主轴关联的集合。返回与主轴关联的集合。BottomCount从集合底端开始返回指定数目的项,可以选择首先对集合从集合底端开始返回指定数目的项,可以选择首先对集合排序。排序。BottomPercent对
20、集合排序,并返回底端的对集合排序,并返回底端的 n 个元素,这些元素的累积个元素,这些元素的累积合计至少为指定的百分比。合计至少为指定的百分比。BottomSum对集合排序,并返回底端的对集合排序,并返回底端的 n 个元素,这些元素的累积合计个元素,这些元素的累积合计至少为指定的值。至少为指定的值。Children返回成员的子代。返回成员的子代。Crossjoin返回两个集合的矢量积。返回两个集合的矢量积。Descendants返回某一成员在指定级别上的或者距某一成员指定距离的返回某一成员在指定级别上的或者距某一成员指定距离的后代集合,可以选择包含或不包含其它级别上的后代。后代集合,可以选择包
21、含或不包含其它级别上的后代。Distinct从集合中删除重复的元组。从集合中删除重复的元组。5/29/20232015.2 Tuple与集合(Set)DrilldownLevel将集合中的成员从指定级别深化一个级别。将集合中的成员从指定级别深化一个级别。另一种方法另一种方法是,在集合中的指定维度上深化。是,在集合中的指定维度上深化。DrilldownLevelBottom将集合底端的将集合底端的 n 个成员从指定级别深化一个级别。个成员从指定级别深化一个级别。DrilldownLevelTop将集合顶端的将集合顶端的 n 个成员从指定级别深化一个级别。个成员从指定级别深化一个级别。Drilld
22、ownMember在第一个集合与第二个集合的交集中深化。在第一个集合与第二个集合的交集中深化。DrilldownMemberBottom类似于类似于 DrilldownMember,除了只包括底端,除了只包括底端的的 n 个子代。个子代。DrilldownMemberTop类似于类似于 DrilldownMember,除了只包括顶端的,除了只包括顶端的 n 个子代。个子代。DrillupLevel从集合的某一指定级别之下的成员浅化。从集合的某一指定级别之下的成员浅化。DrillupMember在第一个集合与第二个集合的交集中浅化。在第一个集合与第二个集合的交集中浅化。Except查找两个集合之
23、间不同的项,可以选择保留重复项。查找两个集合之间不同的项,可以选择保留重复项。Extract从析取的维度元素中返回元组集合。即从析取的维度元素中返回元组集合。即 Crossjoin 的反运算。的反运算。Filter返回根据搜索条件对集合进行筛选所得到的集合。返回根据搜索条件对集合进行筛选所得到的集合。Generate将集合应用到另一集合的每个成员,然后用将集合应用到另一集合的每个成员,然后用 union 运算合并所运算合并所得的集合。得的集合。Head返回集合中指定数目的前若干个元素。返回集合中指定数目的前若干个元素。Hierarchize在层次结构中对集合的成员排序。在层次结构中对集合的成员
24、排序。5/29/20232115.2 Tuple与集合(Set)Intersect返回两个输入集合的交集,可以选择保留重复项。返回两个输入集合的交集,可以选择保留重复项。LastPeriods返回指定的成员之前(包含该成员)的成员集合。返回指定的成员之前(包含该成员)的成员集合。Members返回维度、层次结构或级别中所有成员的集合。返回维度、层次结构或级别中所有成员的集合。MtdPeriodsToDate 函数的快捷函数,将级别指定为函数的快捷函数,将级别指定为 Month。NameToSet基于包含成员名称的字符串表达式,返回一个包含单个成员基于包含成员名称的字符串表达式,返回一个包含单个
25、成员的集合。的集合。NonEmptyCrossjoin返回两个或多个集合的矢量积,除空成员之外。返回两个或多个集合的矢量积,除空成员之外。Order排列集合的成员,可以选择保留或打破层次结构。排列集合的成员,可以选择保留或打破层次结构。PeriodsToDate返回指定级别上的一个时期(成员)集合,从第一个时期返回指定级别上的一个时期(成员)集合,从第一个时期开始到指定的成员为止。开始到指定的成员为止。QtdPeriodsToDate 函数的快捷函数,将级别指定为函数的快捷函数,将级别指定为 Quarter。Siblings返回成员的兄弟,包括成员本身。返回成员的兄弟,包括成员本身。Strip
26、CalculatedMembers从集合中删除计算成员。从集合中删除计算成员。StrToSet用字符串表达式构造一个集合。用字符串表达式构造一个集合。Subset从集合中返回元素的子集。从集合中返回元素的子集。Tail从集合尾部返回子集。从集合尾部返回子集。ToggleDrillState切换对成员的钻取状态。此函数是切换对成员的钻取状态。此函数是 DrillupMember 和和 DrilldownMember 的组合。的组合。5/29/20232215.2 Tuple与集合(Set)TopCount从集合顶端开始返回指定数目的项,可以选择首先从集合顶端开始返回指定数目的项,可以选择首先对集
27、合排序。对集合排序。TopPercent对集合排序,并返回顶端的对集合排序,并返回顶端的 n 个元素,这些元素个元素,这些元素的累积合计至少为指定的百分比。的累积合计至少为指定的百分比。TopSum对集合排序,并返回顶端的对集合排序,并返回顶端的 n 个元素,这些元素的个元素,这些元素的累积合计至少为指定的值。累积合计至少为指定的值。UNION返回两个集合的并集,可以选择保留重复项。返回两个集合的并集,可以选择保留重复项。VisualTotals动态计算集合中指定的子成员的合计,并在结动态计算集合中指定的子成员的合计,并在结果集中对合计的标签使用某种模式来显示。果集中对合计的标签使用某种模式来
28、显示。Wtd PeriodsToDate 函数的快捷函数,将级别指定为函数的快捷函数,将级别指定为 Week。Ytd PeriodsToDate 函数的快捷函数,将级别指定为函数的快捷函数,将级别指定为 Year。5/29/20232315.2 Tuple与集合(Set)集合和维数集合和维数与元组一样,集合也有维数。由于集合由元组组成,因此集与元组一样,集合也有维数。由于集合由元组组成,因此集合的维数用其中各个元组的维数表达。正因为如此,所以合的维数用其中各个元组的维数表达。正因为如此,所以集合中的元组必须具有相同的维数。换言之,下面的示例集合中的元组必须具有相同的维数。换言之,下面的示例不能
29、作为集合使用:不能作为集合使用:(时间时间.下半年下半年,路线路线.非陆地非陆地.航空航空),(),(路线路线.非陆地非陆地.航空航空,时间时间.下半年下半年)集合内元组的顺序非常重要;例如,它集合内元组的顺序非常重要;例如,它影响轴维度内的嵌套顺序。第一个元组表示第一个或最外影响轴维度内的嵌套顺序。第一个元组表示第一个或最外部维度,第二个元组表示次外部维度,以此类推。部维度,第二个元组表示次外部维度,以此类推。5/29/20232415.2 Tuple与集合(Set)注释的表达方式注释的表达方式在在MDX中,可以有中,可以有3种方式标示注释:种方式标示注释:/(C+式的正斜线式的正斜线)/*
30、/(C式的正斜线和星号组合式的正斜线和星号组合)-(SQL式的连字符号式的连字符号)例子:例子:WITH MEMBER Measures.销货数量成长销货数量成长 AS Measures.销货数量销货数量*1.2/使用计算成员的做法,将销货数量使用计算成员的做法,将销货数量*1.2,/以作为预估销货数量的计算。以作为预估销货数量的计算。Select Measures.销货数量销货数量,Measures.销货数量成长销货数量成长 on columns,系列系列.书籍书籍.书名书名.members on rows-以书名当作列分类标准以书名当作列分类标准from 业务分析模式业务分析模式/*此分析
31、模式此分析模式 主要是说明注释的应用主要是说明注释的应用*/5/29/20232515.2 Tuple与集合(Set)空数据集的处理空数据集的处理在使用在使用MDX查询时,查询时,“空数据集空数据集”的解读也会根据的解读也会根据不同的运算符进行不同的解读。不同的运算符进行不同的解读。1,是任何数值运算符(是任何数值运算符(+,-,*,/)的操作数时,被视)的操作数时,被视为为“0”,因此用作分母时,将产生错误的结果。因此用作分母时,将产生错误的结果。2,是字符串连接运算符是字符串连接运算符(|)的操作数时,被视为的操作数时,被视为“空空字符串字符串”。3,是比较运算符是比较运算符(=,=,)的
32、操作数时,将根的操作数时,将根据另一个操作数的数据类型是数值或字符串,来据另一个操作数的数据类型是数值或字符串,来决定它的作用是零或空字符串。决定它的作用是零或空字符串。4,作为定序数值时,空数据与作为定序数值时,空数据与0的位置相同。的位置相同。5/29/20232615.2 Tuple与集合(Set)也可以采用简单忽略空数据集。使用也可以采用简单忽略空数据集。使用NON EMPTY关键字来关键字来处理。处理。如:如:SELECT 销货日期销货日期_日日.季度季度.Members on columns,non empty 系列系列.书籍书籍.书名书名.members on rowsFROM
33、业务分析模式业务分析模式WHERE(Measures.销货数量销货数量)5/29/20232715.2 Tuple与集合(Set)建立计算成员建立计算成员WITH MEMBER Measures.销货数量成长销货数量成长 AS Measures.销货数量销货数量*1.2Select Measures.销货数量销货数量,Measures.销货数量成长销货数量成长 on columns,系列系列.书籍书籍.书名书名.members on rowsFrom 业务分析模式业务分析模式WITH MEMBER Measures.退货率退货率 AS-(销货型态销货型态.退退货货;Measures.销货数量销
34、货数量)/(销货型态销货型态.销货销货,Measures.销货数量销货数量),format=0.00%也可以使用内建格式也可以使用内建格式 FORMAT_STRING=Percent来表示。来表示。5/29/20232815.2 Tuple与集合(Set)Crossjoin函数的使用函数的使用 主要是返回两个集合的叉乘结果。使用的语法为:主要是返回两个集合的叉乘结果。使用的语法为:Crossjoin(Set1,Set2)另一种表达方式为另一种表达方式为Set1*Set25/29/20232915.2 Tuple与集合(Set)使用函数与表达式使用函数与表达式1,算术运算与比较运算算术运算与比较
35、运算支持最基本的算术运算。与传统的四则运算符一样,在解析算术运算符支持最基本的算术运算。与传统的四则运算符一样,在解析算术运算符时,会遵循时,会遵循“由左而右由左而右”、“先乘除,后加减先乘除,后加减”的顺序,还可以配合的顺序,还可以配合括号进行。括号进行。常用的比较运算符。主要是【常用的比较运算符。主要是【】、【】、【=】、【】、【】、】、【=】等。】等。WITH MEMBERS Measures.绩优绩优 AS IIf(Measures.销货数量销货数量200,“是是”,”否否”)逻辑运算符有逻辑运算符有AND、OR和和NOT.5/29/20233015.2 Tuple与集合(Set)数值函数数值函数1,Aggregate2,Iif3,Avg4,Count集合函数集合函数1,BottomCount2,BottomPercent3,BottomSum4,Children5,Filter6,Head7,Intersect8,LastPeriods9,Mtd10,Order etc.5/29/202331进一步学习l1.l2.微软MSDN参考l3.Sourceforgel/上查询OLAP相关的软件l4.OLAP论文参考5/29/202332下学期见姜建华5/29/202333