好文档 - 专业文书写作范文服务资料分享网站

MDX用户指南

天下 分享 时间: 加入收藏 我要投稿 点赞

MDX用户指南

作者 林志贤

状态 创建 时间 2006-3-21 说明 初稿 第1章 简介

MDX为MultiDimensional Expressions的缩写,多维表达式,是标准的OLAP查询语言。在多数OLAPServer都提供MDX支持,如Microsoft SQL Server OLAP Services,SAS,Hyperion Essbase等。支持多维对象与数据的定义和操作。MDX 在很多方面与结构化查询语言 (SQL) 语法相似,但它不是 SQL 语言的扩展;事实上,MDX 所提供的一些功能也可由 SQL 提供,尽管不是那么有效或直观。

如同 SQL 查询一样,每个 MDX 查询都要求有数据请求(SELECT 子句)、起始点(FROM 子句)和筛选(WHERE 子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据的特定部分。MDX 还提供了可靠的函数集,用来对所检索的数据进行操作,同时还具有用用户定义函数扩展 MDX 的能力。

MDX为多维数据库提供了表达式查询语法,用于查询Cube数据,并提供了许多强大的分析函数,用于支持常用的OLAP分析。

Kingdee OLAP实现了MDX语法,提供了大多数MDX函数,部分函数未实现,因为我们认为当前没有必要实现。本文档后面会提供支持的函数列表。

本指南更像一本入门教程。更为详细的信息可以参考SQLServer OLAP Services联机文档。

第2章 基本概念

2.1 Cube结构

在介绍MDX之前,我们简单介绍一下cube结构,理解cube结构是学习MDX的前提。我们采用SQLServer OLAP Services自带的事例OLAP数据库FoodMart来描述。我们建议你阅读《Olap模型设计指南》来学习、熟悉Cube结构。

Cube是联机分析的关键。它们是一种多维结构,包括原始事实数据、聚合数据,这些数据聚合允许用户快速进行复杂查询。 Cube包含两个基本的概念:维度和度量。

维度(Dimension):维度提供了分类描述,表示一类分析角度,用户通过维度来分

析度量数据。

度量(Measures):度量表示用来聚合分析的数字信息,如数量,销售金额等。 重要: 度量的集合组成了一个特殊的维度,叫做”Measures”。

一个维度可以包含级别的层级结构,级别(Level)表示特定的分类.比如,地区维度可以包含级别层级:Country、State、City。每个级别比它的父级别在数据粒度上更加细粒度。又比如:一个时间维可能包含级别:年、季、月。 成员,是最重要的概念之一。一个成员是维度(包括度量维Measures)上的一个项目值,时间维度上“年”级别的成员可能有2000、2001,月成员有1、2、3等等。

计算成员是一种运行时通过特殊表达式动态计算的成员。计算成员可以定义为度量。计算成员不影响现有的cube数据,它基于cube数据,通过各种数学表达式和各种函数定义,可以创建复杂的表达式。任何动态分析功能,都可以通过计算成员实现,比如实现占比、同期比等等。

2.2 示例Cube数据库

示例OLAP数据库结构(FoodMart Sales Cube,来自Microsoft OLAP Services)。

维 度 维度名 Customers 级别 Country State City Name Edication Level Gender Marital Status Product Family Product Department Product Category Product SubCategory Brand name Product Name Media Type Store Country Store Sate Store City Stoe Name 描述 顾客的地理分布层级 Education Level Gender Marital Status Product 顾客教育水平,一个级别,扁平结构 顾客性别 顾客婚姻状况 产品维,6个级别 Promotion Media Store 促销媒体 商店的地理分布层级 Stoe Size in SQFT Store Type Time Store Square Feet Store Type Years Quarters Months Yearly Income 度量 商店面积 商店类型 时间维 Yearly Income

度量名 Unit Sales Store Cost Store Sales Sales Count Store Sales Net Sales Average

顾客年收入 描述 Number of units sold Cost of goods sold Value of sales transactions Number of sales transactions Value of sales transactions less cost of goods sold Store sales/sales count 2.3 表达式表示法

维度、级别、成员等,一般用唯一名称UniqueName来标示,可以用[]包围name,如果name有空格或者以数字开头,必须使用[],否则可以忽略。UniqueName是根据层级结构表示的一种方法。即递归显示出祖先的名称。

维度(Dimension):维度直接用[]包围。Product的唯一名称为[Product]或Product,维度Education Level的唯一名称为[Education Level]。度量维为[Measures]。 级别(Level):级别的UniqueName为[维度名称].[级别名称],如[Product].[ Product Family],同样,如果没有空格,[]可以省略,如Product.[Product Family]。

成员(Member):成员的UniqueName格式为[维度].(Parent Member UniqueName).[Member Name],如上面时间维上的2003年2月份的UniqueName为[Time].[1].[2],中间的1为1季度,因为该维度的结构为年、季、月。

度量(Measure):度量实际上是属于度量维的成员。如度量Unit Sales的UniqueName为[Measures].[Unit Sales]。

UniqueName是OLAP元素内部的表示法,在MDX查询语言中,可以使用UniqueName来表示元素。同时,MDX还提供模糊和其它等价的元素标示方式。表现在:

1)省略维度名标示级别,如果一个维度的级别名称在整个Cube中是唯一的,那么可以省略维度名来查询级别。如Product.[Product Family]可以写成[Product

Family]。

2)省略维度名标示成员,如果省略维度名,可以标示该维度最高级别的成员,如[Time].[2000]可以写成[2000],[Measures].[Unit Sales]可以写成[Unit Sales]。 3)成员挂在级别下,即成员不一定要写成[维度].(Parent Member UniqueName).[Member Name],可以写成[维度].[级别].[Member Name].如2000年3月可以写成[Time].[Months].[3]。

模糊查询表示法,都基于不会重复的假设,如果有重复的元素,取第一个查找到的元素作为查询结果,可能发生错误。因此,建议使用完备的表示法。

2.4 元组、集合

元组用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。元组内不能包含来自同一个维度的多个成员。元组用()包围。如:

(时间.[下半年])

(时间.[下半年],[产品].[手机].[Nokia])

如果一个元组是由单个维度的成员组成,那么可以不用()包围,即(时间.[下半年])可表示成:时间.[下半年]。

集合是零个、一个或多个元组的有序集合。集合最常用于在 MDX 查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。在 MDX 语法中,元组用花括号括起来以构造集合,下面的示例显示具有两个元组的集合:

{ (时间.[上半年], 路线.非陆地.航空), (时间.[下半年], 路线.非陆地.海路) } 一个集合可包含同一个元组不止一次的出现。下面的集合是可接受的: { 时间.[下半年], 时间.[下半年] }

集合指以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。

注意,单个元组的集合不等于元组。如{时间.[下半年]}不等于 时间.[下半年]。 在MDX语法中,很多函数语义中包含元组和集合,作为参数或者返回值。

MDX用户指南

MDX用户指南作者林志贤状态创建时间2006-3-21说明初稿第1章简介MDX为MultiDimensionalExpressions的缩写,多维表达式,是标准的OLAP查询语言。在多数OLAPServer都提供MDX支持,如MicrosoftSQLServerOLAPServices,SAS,Hyperi
推荐度:
点击下载文档文档为doc格式
4q0ax726md7yogl1itk20zdc523y3q00i2d
领取福利

微信扫码领取福利

微信扫码分享