MDX

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MDX相关的知识,希望对你有一定的参考价值。

34-MDX 初步认识

1MDX简介

MDX(multi-dimensional expressions 多维表达式) 是一种语法,支持多维对象与数据的定义和操作。

MDX是一种和SQL类似的语言,它也可以用于查询、计算和定义一些元数据。只不过SQL是基于OLTP的,而MDX是基于OLAP,也就是说,MDX是对多维数据进行查询的。

2MDX 与 SQL

MDX在很多方面与结构化查询语言(SQL)语法相似,但它不是SQL语言的扩展;事实上MDX所提供的一些功能也可由SQL提供,尽管不是那么有效或直观。

如同SQL查询一样,每个MDX查询都要求数据请求(select 子句)、起始点(from 子句) 和筛选(where 子句)。

这些关键字以及其他关键字提供了各种工具,用来从多维数据集 析取数据的特定部分。

3MDX常用概念

多维表达式(MDX)的用途是使用多个维度的数据的访问更为简单和直观。它的主要概念如下:

维度(Dimensions)、级别(Levels)、成员(Members)和度量值(Measures)

单元(Cells)、元组(Tuples)和集合(Sets)

轴维度和切片器维度(Aixs and Slicer Dimensions)

4维度(Dimensions)、级别(Levels)、成员(Members)和度量值(Measures)

在传统的关系数据库中,用于数据定义和操作的大多数语言(如SQL)都设计为在两个维度中检索数据:列维度和行维度

OLTP: 各个表均提供二维数据。各行与各列的交集是一单个数据元素,称为字段。要在SQL查询中查看的特定列用select 语句进行指定,而要检索的行用where 子句加以限定。

而对于多维数据,则可以用具有两个以上的维度(Dimensions)的结构来表示。这些称作多维数据集的结构具有多个维度。

在多维数据集中维度的交集处,可能有不止一个数据元素,这些数据元素称为度量值(Measures)。

技术分享

OLAP: 左边的关系图说明使用,

三个维度("线路""""时间")

两个度量值("""上一次") 的多维数据集。各个维度分成不同的级别(Levels),而每个级又进一步分为成员(Members)

例如,""维度提供"东半球" 级别,该级别又分为 4个成员"非洲"、"亚洲"、"澳大利亚"和"欧洲"

   

5、单元(Cell)、元组(Tuple)和集合(Set)

SQL从表返回二维数据子集,而MDX从多维数据集返回多维数据子集。多维数据集关系图表明多维成员的交集创建单元(Cells),从这些单元可以获取数据。

为标识和解析这类数据(不管这些数据是单个单元还是单元块),MDX使用称为元组(Tuples)的参照系

5.1 单元(Cell)

元组列出维度和成员来标识多维数据集内的单个单元和更大的单元部分;因为各个单元是多维数据集所有维度的交集,所以元组可以唯一标识多维数据集中的每个单元。为起到参照的作用,将多维数据集中的度量视为该多维数据集本身中的一个专用维度,名为"度量值"

技术分享

例如:在左边的关系图中,以下元组标识其中值为240的单元:(源 . [东半球] . 非洲 , 时间 . [下半年] . [第四季度] , 线路 . 航空 , 度量值 . 包)

5.2 元组(Tuple)

元组唯一标识多维数据集中的一部分它不必指某个特定单元,也不必包括多维数据集中的所有维度。以下示例均为多维数据集关系图的元组:(. [东半球])([时间 .下半年] ,.[西半球])

5.3 集合(Set)

元组的有序集合称为集合(Set)。在MDX查询中,轴维度和切片器维度由这种元组集合组合。以下示例是对关系图内多维数据集中的一个元组集合的描述。{(时间 .[上半年] .[第一季度]) ,(时间 .[下半年] .[第三季度])}

6、轴维度 和 切片器维度

SQL中,通常需要限制对表的查询所返回的数据量。例如,可能希望只看到有四十个字段的表中的两个字段,而且如果有满足特定条件的第三个字段,也只看到两个字段。可以通过在SELECT 语句中指定列,并使用 WHERE 语句基于特定准则限制所返回的行来完成此任务。

MDX中,这些概念也适用。select语句用来选择要返回的维度和成员,称之为轴维度。Where 语句用来将返回的数据限定为特定维度和成员条件,称之为切片器维度

轴维度预期返回多个成员的数据,而切片器维度预期返回单个成员的数据

   

35MDX 基本语法(成员、元组、集、轴、cube)

1MDX基本语法

MDX查询语句的结构及术语

Cube(多维数据集),Slice(切片器),Axis(轴),Set,Tuple(元组),Members(成员)

MDX查询语句的通用结构

[<with_section>]

SELECT

[<axis_specification>]

[<axis_specification>…]

FROM[<cube_specification>]

WHERE[<slicer_specification>]

<with_section>的位置用于设定自定义的计算。有两种运用,WITH SET…,WITH MEMBER…,在复杂的MDX查询语句中经常被用到。

<axis_specification>的位置用于设定轴。这个轴是反映在MDX语句的输出报表上的。常用的就是列、行、页。

<cube_specification>位置用于指定查询用的Cube ,只能指定一个。

<slicer_specification>位置用于指定限制条件,可以是多个限制条件,反映在Cube中称为切片

2MDX查询示例

基本的MDX SELECT 语句包含一个SELECT 子句和一个FROM子句,以及一个可选的WHERE子句。如下图所示:

SELECT {[Measures] .[销售量] ,[Measures] .[销售金额]} ON COLUMNS ,

{[Dim_Date] .[Year] . &[2010] ,[Dim_Date] . [Year] .&[2011]} ON ROWS

FROM [TianShan_KPI]

WHERE([Dim Shop]. [门店简称] .&[坤驰])

1SELECT 子句 决定MDX SELECT 语句的轴维度。本MDX查询示例中定义了两个轴维度。

2FROM 子句决定当提取数据以填充 MDX SELECT 语句的结果集时将使用哪个多维数据源。

3、可选用的 WHERE子句决定哪个维度或成员用作切片器维度;这将数据的析取限制于特定维度或成员。

4、本MDX 查询示例使用WHERE 子句来将轴维度的数据析取限制于门店维度的特定成员。

3、成员

成员 是代表维度中一次或多次数据出现的项。

请把维度中的成员看作基础数据库中的一个或多个记录。指的是维度树上的一个节点,是Cube 结构上的最小单位。例如,下面关系图加入阴影以表示"时间 .[下半年] .[第三季度]"成员。

技术分享

4、元组

元组用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。

由若干个Members 组成,每一个维度属性上最多只能有一个 Member对于一个Tuple 而言至少有一个维度,多则不限,同时对于没有列出来的那就表示为默认Member。Tuple 的表示方法是小括号"()",因为其又有Member 构成,所以通常的格式"([…] ,[…] ,[…])"。

示例: ([Dim Shop] .[门店简称] .&[坤驰])

([Dim Shop] .[门店简称] .&[坤驰] ,[Dim_Date] .[Year] .&[2011])

错误:Tuple 中出现了同一维度的两个成员

([Dim Shop] .[门店简称] .&[坤驰] ,[Dim Shop] .[门店简称] .&[轩达])

多维数据集的阴影部分表示 (时间 .[下半年]) 元组。请注意该元组包括了多维数据集的一半,因为它未排除 "源" 或"线路" 维度中的任何信息。

技术分享

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

以上是关于MDX的主要内容,如果未能解决你的问题,请参考以下文章

SSAS - 将 MDX 报告参数传递给 MDX 数据集查询

故事书 mdx 的 eslint

如何保存 MDX 查询并下次使用?

MDX 处理负值

mdx 规范?

如何开始使用 MDX