MDX中的重要概念 文档.docx

上传人:b****5 文档编号:5011233 上传时间:2022-12-12 格式:DOCX 页数:12 大小:24.33KB
下载 相关 举报
MDX中的重要概念 文档.docx_第1页
第1页 / 共12页
MDX中的重要概念 文档.docx_第2页
第2页 / 共12页
MDX中的重要概念 文档.docx_第3页
第3页 / 共12页
MDX中的重要概念 文档.docx_第4页
第4页 / 共12页
MDX中的重要概念 文档.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

MDX中的重要概念 文档.docx

《MDX中的重要概念 文档.docx》由会员分享,可在线阅读,更多相关《MDX中的重要概念 文档.docx(12页珍藏版)》请在冰豆网上搜索。

MDX中的重要概念 文档.docx

MDX中的重要概念文档

SQLServer2005联机丛书(2007年9月)

MDX中的重要概念(MDX)

更新日期:

2006年7月17日

您可以使用多维表达式(MDX)查询多维数据或创建用于多维数据集的MDX表达式,但是需要先了解一下MicrosoftSQLServer2005AnalysisServices(SSAS)维度概念和术语。

下面一节简要介绍了您需要了解的基本维度建模概念和术语。

随后各节说明了如何应用这些概念。

有关详细信息,请参阅MicrosoftTechNet网站SQLServer2005–AnalysisServices页面中的“其他资源”部分。

有关与MDX查询和计算相关的性能问题的详细信息,请参阅SQLServer2005AnalysisServices性能指南中的“编写有效的MDX”部分。

 维度建模术语和概念

MicrosoftSQLServer2005AnalysisServices(SSAS)多维数据集是根据度量值、维度和维度属性来组织的。

下表说明了使用MDX表达式语言所需了解的维度建模术语和概念。

数据库维度(Databasedimension)

“数据库维度”是与某个键属性相关的维度属性的集合,而该键属性又与度量值维度中的事实数据相关。

维度属性(Dimensionattribute)

“维度属性”被绑定到维度表中的一个或多个列并包含成员。

维度属性可以包含客户名称、月份名称和产品名称。

成员(Member)

“成员”是维度属性(包括度量值维度)的值。

层次结构中的成员可以是叶成员、父成员、数据成员或“(全部)”成员。

度量值(Measure)

“度量值”是来自事实数据表的值,也称为“事实数据”。

度量值维度的值有时也通称为“成员”。

度量值通常是数值,但也可以是字符串值。

Measures维度(Measuresdimension)

“度量值维度”是包含多维数据集中所有度量值的维度。

度量值维度是一种特殊的维度,其中的成员通常是根据各个维度属性(存在指定的度量值)的当前成员(通常采用求和或计数方式)进行聚合。

度量值组(MeasureGroup)

“度量值组”是SQLServer2005AnalysisServices多维数据集中的相关度量值集合(通常是来自同一事实数据表的度量值)。

在SQLServer2005AnalysisServices中,一个多维数据集可包含多个度量值组。

“(全部)”成员((All)member)

“(全部)”成员是属性层次结构或用户定义的层次结构中的所有成员的计算值。

计算成员(Calculatedmember)

“计算成员”是在查询时定义和计算的维度成员。

可以在用户查询或MDX计算脚本中定义计算成员,并将其存储在服务器上。

一个计算成员对应于定义它们的维度中的多个维度表行。

数据成员(Datamember)

“数据成员”是在父子层次结构中与父成员相关联的子成员。

数据成员包含其父成员的数据值,而不是该父成员的子级的聚合值。

父成员(Parentmember)

“父成员”是父子层次结构中的成员,包含其子级的聚合值。

叶成员(leafmember)

“叶成员”是层次结构中不包含子级的成员。

子成员(Childmember)

“子成员”是层次结构中位于顶层下面的成员。

键属性(Keyattribute)

数据库维度的“键属性”是维度中的所有非键属性(以直接或间接方式)所链接到的属性。

键属性通常也是粒度属性。

粒度属性(Granularityattribute)

多维数据集维度的属性,它将维度链接到度量值维度内度量值组中的事实数据。

如果粒度属性和键属性为不同的属性,则非键属性必须直接或间接地链接到粒度属性。

在多维数据集中,粒度属性定义维度的粒度。

多维数据集维度(Cubedimension)

“多维数据集维度”是多维数据集中的数据库维度实例。

属性层次结构(Attributehierarchy)

“属性层次结构”是包含以下级别的属性成员层次结构:

∙包含所有非重复属性成员的叶级别,叶级别的各个成员也称为“叶成员”。

∙中间级别(如果属性层次结构为父子层次结构)。

∙可选的“(全部)”级别(IsAggregatable=True),它包含属性层次结构的叶成员的聚合值。

“(全部)”级别的成员也称为“(全部)”成员。

默认情况下,将为每个维度属性定义属性层次结构(AttributeHierarchyEnabled=True)。

属性层次结构默认为可见(AttributeHierarchyVisible=True)。

均衡层次结构(Balancedhierarchy)

“均衡层次结构”是顶级成员与任何叶成员之间存在相同级别数的层次结构。

不齐整层次结构(Raggedhierarchy)

请参见“非均衡层次结构(Unbalancedhierarchy)”。

非均衡层次结构(Unbalancedhierarchy)

“非均衡层次结构”是顶级与叶级之间存在不同级别数的层次结构。

父子层次结构即是不齐整层次结构的一个例子。

非均衡层次结构也称为“不齐整层次结构”。

父子层次结构(Parent-childhierarchy)

“父子层次结构”是一种将维度属性设置为parent类型的特殊的属性层次结构。

父子层次结构是由子成员和父成员构成的非均衡层次结构。

父子层次结构包含以下级别:

∙包含父成员子级的子级别。

父成员的子级包含聚合到父成员的属性成员(包括数据成员)。

∙包含父成员的中间级别。

∙可选的“(全部)”级别(IsAggregatable=True),它包含父子层次结构叶成员的聚合值,“(全部)”级别的成员也称为“(全部)”成员。

∙每个维度中只能存在一个父子层次结构,并且必须与键属性相关。

用户定义的层次结构(User-definedhierarchy)

“用户定义的层次结构”是属性层次结构的均衡层次结构,旨在帮助用户浏览多维数据集数据。

用户定义的层次结构不添加到多维数据集空间。

在某些情况下可以隐藏用户定义的层次结构中的级别并使其以非均衡的形式显示。

属性关系(Attributerelationship)

“属性关系”是属性间的一对多关系,例如州省市自治区和城市维度属性间的关系。

成员属性(Memberproperty)

成员属性是特性成员的属性,例如客户的性别或产品的颜色。

单元(Cell)

多维数据集中的“单元”是度量值维度成员的成员与多维数据集中各个属性层次结构的成员相交处所在的空间。

∙度量值维度的成员可以是叶成员(单个事实数据)或聚合成员(例如,特定年份聚合的销售额)。

∙维度的成员可以是叶成员、数据成员、父成员或“(全部)”成员。

多维数据集空间(Cubespace)

“多维数据集空间”是多维数据集属性层次结构的成员与多维数据集的度量值的交集。

子多维数据集(Subcube)

“子多维数据集”是表示多维数据集的筛选视图的多维数据集子集。

可以使用MDX计算脚本中的Scope语句或MDX查询中的嵌套select语句定义子多维数据集。

带有嵌套select语句的子多维数据集(SubcubewithSubselect)

用MDX查询中的嵌套select语句定义的子多维数据集包含符合子多维数据集定义的所有成员,其结果如下:

∙包含层次结构的“(全部)”成员与包含层次结构的每个叶成员的结果是相同的。

∙包含任何成员将包括其祖先和后代。

∙包含用户定义的层次结构中某级别的每个成员将包含该用户定义的层次结构中的所有成员,但可排除不与此级别成员共存的其他层次结构的成员(例如不包含客户的城市)。

∙多维数据集中的每个“(全部)”成员始终存在于从该多维数据集创建的子多维数据集中。

∙子多维数据集中的聚合值将进行直接求和。

 元组

“元组”根据包含多维数据集各属性层次结构中某个属性的属性成员的组合对单元进行唯一标识。

在MDX查询或表达式中定义元组时,不必显式包含每个属性层次结构中的属性成员。

如果属性层次结构中的成员未显式包含在查询或表达式中,则该属性层次结构的默认成员为隐式包含在元组中的属性成员。

除非在多维数据集中进行显式定义,否则每个属性层次结构的默认成员均为“(全部)”成员(如果存在“(全部)”成员)。

如果属性层次结构中不存在“(全部)”成员,则默认成员为属性层次结构中的顶级成员。

除非显式定义了默认度量值,否则默认度量值为多维数据集中指定的第一个度量值。

有关详细信息,请参阅定义默认成员和DefaultMember(MDX)。

例如,以下元组通过仅显式定义Measures维度的一个成员来标识AdventureWorks数据库中的一个单元。

复制代码

(Measures.[ResellerSalesAmount])

上面的示例唯一标识了由Measures维度的ResellerSalesAmount成员和多维数据集各属性层次结构的默认成员组成的单元。

默认成员为除DestinationCurrency属性层次结构之外的各个属性层次结构的“(全部)”成员。

DestinationCurrency层次结构的默认成员为USDollar成员(此默认成员是在MDX脚本中为AdventureWorks多维数据集定义的)。

重要提示:

元组中属性层次结构的成员还受维度中定义的属性之间的关系影响。

有关详细信息,请参阅下面的属性关系和多维数据集空间。

以下查询将返回前面示例指定元组所引用的单元的值($80,450.596.98)。

复制代码

SELECT

Measures.[ResellerSalesAmount]ONCOLUMNS

FROM[AdventureWorks]

注意:

为查询中的集(此处由单个元组构成)指定轴时,必须在为行轴指定集之前先为列轴指定集。

列轴也可称为“axis(0)”或简称“0”。

有关MDX查询的详细信息,请参阅基本MDX查询(MDX)。

如前面的示例所示,您可以在查询中使用元组返回该元组所引用的单元的值。

或者您也可以在表达式中使用元组显式引用该元组中指定的成员。

查询或表达式可使用返回元组或获取元组的函数。

元组可用来引用它所指定的单元的值,或者用来指定成员组合(当元组用在函数中时)。

元组的“维数”指元组中成员的序列或顺序。

由于隐式成员总是以相同的顺序出现,因此维数通常是针对元组的显式定义成员而言。

定义元组集时,元组成员的顺序非常重要。

以下示例在列轴上的一个元组中包含了两个成员。

复制代码

SELECT

([Measures].[ResellerSalesAmount],[Date].[CalendarYear].[CY2004])ONCOLUMNS

FROM[AdventureWorks]

注意:

从多个维度显式指定元组中的成员时,必须将整个元组包含在括号中。

如果仅指定元组中的一个成员,则括号是可选的。

在前面的示例中,查询中的元组指定返回位于Measures维度的ResellerSalesAmountMeasure与Date维度中CalendarYear属性层次结构的CY2004成员相交处的多维数据集单元。

注意:

属性成员可以按成员名称或成员键引用。

在前面的示例中,您可以将对[CY2004]的引用替换为对&[2004]的引用。

 集(Sets)

集是具有相同维数的有序元组集。

以下是集的一个示例。

复制代码

SELECT

{

([Measures].[ResellerSalesAmount],

[Date].[CalendarYear].[CY2003]),

([Measures].[ResellerSalesAmount],

[Date].[CalendarYear].[CY2004])

}ONCOLUMNS

FROM[AdventureWorks]

注意:

用大括号{}指定元组集。

在前面的示例中,集中的每个元组均具有相同的维数,因为每个元组的第一个成员都是Measures维度中的成员,并且每个元组的第二个成员都是CalendarYear属性层次结构中的成员。

如果这两个元组中任意一个元组的第二个成员来自Date维度(例如CalendarMonth)中的不同属性层次结构,您将收到维数不同的错误消息。

提示:

您可以用别名创建集(称为“命名集”)。

处理复杂的MDX表达式时,使用命名集可使MDX查询更易于理解或重用。

若要使用命名集,请在集标识符的后面使用“AS”,并在该词之后跟随所需别名。

 多维数据集空间和自动共存

前面,我们将“多维数据集空间”定义为其属性层次结构的成员的交集。

“自动共存”的概念将此多维数据集空间限制为那些实际存在的单元。

维度中属性层次结构的成员可能不与相同维度中其他属性层次结构的成员共存。

例如,某多维数据集具有City属性层次结构、Country属性层次结构和InternetSalesAmount度量值,则此多维数据集的空间仅包含那些共存的成员。

例如,如果City属性层次结构包含城市NewYork、London、Paris、Tokyo和Melbourne,而Country属性层次结构包含国家(地区)UnitedStates、UnitedKingdom、France、Japan和Australia,则该多维数据集的空间不包含Paris和UnitedStates相交处的空间(单元)。

当查询单元不存在时,不存在的单元返回空,即它们无法包含计算结果,并且您不能定义写入此空间的计算。

例如,下面的语句包含不存在的单元。

复制代码

SELECT[Customer].[Gender].[Gender].MembersONCOLUMNS,

{[Customer].[Customer].[AaronA.Allen]

[Customer].[Customer].[AbigailClark]}ONROWS

FROM[AdventureWorks]

WHEREMeasures.[InternetSalesAmount]

注意:

此查询使用Members(Set)(MDX)函数返回列轴上Gender属性层次结构的成员集,并将此集与行轴上Customer属性层次结构的指定成员集相交。

执行前面的查询时,AaronA.Allen与Female相交处的单元将显示空。

同样,AbigailClark与Male相交处的单元也将显示空。

这些单元不存在并且不能包含值,但不存在的单元可出现在查询返回的结果中。

如果使用Crossjoin(MDX)函数返回同一维度属性层次结构中的属性层次结构成员的叉积,自动共存将限制只返回那些实际存在的元组集,而不是返回整个笛卡尔积。

例如,运行以下查询并检查其结果。

复制代码

SELECTCROSSJOIN

{[Customer].[Country].[UnitedStates]},

[Customer].[State-Province].Members

)ON0

FROM[AdventureWorks]

WHEREMeasures.[InternetSalesAmount]

注意:

请注意0用于表示列轴的名称,它是列轴“axis(0)”的简称。

前面的查询仅为查询中每个属性层次结构的共存成员返回单元。

前面的查询还可以使用*(Crossjoin)(MDX)函数中新的*变量来编写。

复制代码

SELECT

[Customer].[Country].[UnitedStates]*

[Customer].[State-Province].Members

ON0

FROM[AdventureWorks]

WHEREMeasures.[InternetSalesAmount]

前面的查询还可以通过以下方式来编写:

复制代码

SELECT[Customer].[State-Province].Members

ON0

FROM[AdventureWorks]

WHERE(Measures.[InternetSalesAmount],

[Customer].[Country].[UnitedStates])

虽然结果集中的元数据将不同,但返回的单元值将是相同的。

例如,在前面的查询中,Country层次结构已移到切片器轴(在WHERE子句中),因此没有显式显示在结果集中。

前面的这三个查询均阐释了SQLServer2005AnalysisServices中自动共存行为所带来的影响。

 用户定义的层次结构和多维数据集空间

本主题前面的示例使用属性层次结构定义了多维数据集空间中的位置。

不过,您还可以使用根据维度中属性层次结构所定义的用户定义的层次结构来定义多维数据集空间中的位置。

用户定义的层次结构是属性层次结构的层次结构,旨在帮助用户浏览多维数据集数据。

例如,上节中的CROSSJOIN查询也可以按照如下方式编写:

复制代码

SELECTCROSSJOIN

{[Customer].[Country].[UnitedStates]},

[Customer].[CustomerGeography].[State-Province].Members

ON0

FROM[AdventureWorks]

WHEREMeasures.[InternetSalesAmount]

在前面的查询中,Customer维度中的CustomerGeography用户定义的层次结构用于定义先前使用属性层次结构定义的多维数据集空间中的位置。

可以使用属性层次结构或用户定义的层次结构来定义多维数据集中的同一个位置。

 属性关系和多维数据集空间

定义相关属性间的属性关系(通过促进相应聚合的创建)将提高查询性能,并影响与属性层次结构成员一同显示的相关属性层次结构的成员。

例如,您定义了包含City属性层次结构的成员的元组并且该元组未显式定义Country属性层次结构成员时,您可能希望默认Country属性层次结构成员是Country属性层次结构的相关成员。

不过,只有定义了City属性层次结构和Country属性层次结构之间的属性关系时,才会出现上述预期结果。

以下示例返回未显式包含在查询中的相关属性层次结构的成员。

复制代码

WITHMEMBERMeasures.xAS

Customer.Country.CurrentMember.Name

SELECTMeasures.xON0,

Customer.City.MembersON1

FROM[AdventureWorks]

注意:

请注意,WITH关键字与CurrentMember(MDX)和Name(MDX)函数一起用于创建在查询中使用的计算成员。

有关详细信息,请参阅基本MDX查询(MDX)。

在前面的查询中,返回了与State属性层次结构各成员相关联的Country属性层次结构的成员名称。

出现了预期的Country成员(因为定义了City和Country属性之间的属性关系)。

不过,如果在同一维度中没有定义属性层次结构间的任何属性关系,将返回“(全部)”成员,如以下查询所示。

复制代码

WITHMEMBERMeasures.xAS

Customer.Education.Currentmember.Name

SELECTMeasures.xON0,

Customer.City.MembersON1

FROM[AdventureWorks]

在前面的查询中,返回了“(全部)”成员(“AllCustomers”),因为Education和City间不存在任何关系。

因此,Education属性层次结构的“(全部)”成员将是任何涉及City属性层次结构(未在其中显式提供Education成员)的元组中使用的Education属性层次结构的默认成员。

 计算上下文

每个集、成员、元组或数值函数均在整个MDX表达式或语句的上下文中执行。

当参数(例如元组)传递到函数时,仅显式提供多维数据集空间中的若干个坐标。

其他坐标根据当前计算上下文来获取。

按照以下顺序确定未指定的单元坐标和属性成员的计算上下文:

1.FROM子句(如果适用)-此子句可指定整个多维数据集,或以SELECT语句的形式指定子多维数据集。

2.WHERE子句(如果适用)-此子句也称为“切片器轴”,可在其上指定集、元组或成员以限制查询在列轴或行轴上返回成员。

从概念上来说,未在列轴或行轴上显式指定的每个属性层次结构的默认成员均是切片器轴的一部分。

注意:

在切片器轴和其他轴上指定特定属性的单元坐标时,函数中指定的坐标可能优先确定轴上的集的成员。

Filter(MDX)和Order(MDX)函数是这类函数的示例-您可以按属性成员(通过WHERE子句或FROM子句中的SELECT语句排除在计算上下文之外)对结果进行筛选或排序。

3.在查询或表达式中定义的命名集和计算成员。

4.在行轴和列轴上指定的元组和集,对没有显示在行轴、列轴或切片器轴上的属性使用默认成员。

5.每个轴上的多维数据集或子多维数据集,消除了轴上的空元组并应用HAVING子句。

6.有关详细信息,请参阅在查询中建立多维数据集上下文(MDX)。

7.在以下查询中,由WHERE子句中指定的Country属性成员和CalendarYear属性成员限制行轴的计算上下文。

复制代码

SELECTCustomer.City.City.MembersON0

FROM[AdventureWorks]

WHERE(Customer.Country.France,[Date].[Calendar].[CalendarYear].[CY2004],

Measures.[InternetSalesAmount])

1.如果通过在行轴上指定FILTER函数修改此查询,并在FILTER函数中使用CalendarYear属性层次结构成员,则可以修改CalendarYear属性层次结构中的属性成员(用于为列轴上的集的成员提供计算上下文)。

复制代码

SELECTFILTER

Customer.City.City.Members,

([Date].[Ca

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1