多维数据集空间是多维数据集属性层次结构的成员与多维数据集度量值的成员的乘积。 因此,多维数据集空间由多维数据集中的所有属性层次结构成员的组合乘积和多维数据集的度量值确定,并定义多维数据集的最大大小。 请务必注意,此空间包括属性层次结构成员的所有可能组合;即使是在现实世界中可能被视为不可能的组合,即城市是巴黎,国家/地区是英格兰、西班牙、日本、印度或其他地方。
自动存在和多维数据集空间
自动存在的概念将此多维数据集空间限制为实际存在的单元格。 在一个维度中,某个属性层次结构的成员可能无法与同一维度中的另一个属性层次结构的成员共同存在。
例如,如果多维数据集具有 City 属性层次结构、国家属性层次结构和网络销售金额度量,则该多维数据集的空间仅包含互相存在的成员。 例如,如果 City 属性层次结构包括纽约、伦敦、巴黎、东京和墨尔本的城市;国家/地区属性层次结构包括美国、英国、法国、日本和澳大利亚等国家/地区:然后,多维数据集的空间不包括巴黎和美国交汇处的空间(单元格)。
查询不存在的单元格时,非现有单元格返回 null;也就是说,它们不能包含计算,并且不能定义写入此空间的计算。 例如,以下语句包括不存在的单元格。
SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,
{[Customer].[Customer].[Aaron A. Allen]
,[Customer].[Customer].[Abigail Clark]} ON ROWS
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
注释
此查询使用 Members (Set) (MDX) 函数返回列轴上的 Gender 属性层次结构的成员集,并将此集与行轴上 Customer 属性层次结构中的指定成员集交叉。
执行上一个查询后,Aaron A. Allen 和 Female 相交处的单元格显示为空值。 同样,阿比盖尔·克拉克和男性交集处的单元格显示空值。 这些单元格不存在且不能包含值,但不存在的单元格可以出现在查询返回的结果中。
使用 Crossjoin(MDX) 函数从同一维度的属性层次结构中返回成员的交叉积时,自动存在机制会将返回的元组限制为实际存在的元组集,而不是返回完整的笛卡尔积。 例如,运行并检查以下查询的执行结果。
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
注释
请注意,0 用于指定列轴,即轴(0)的简写-即列轴。
上一个查询仅返回查询中每个属性层次结构中相互存在的成员的单元格。 * (Crossjoin) (MDX) 函数的新 * 变体也可以用来编写前一个查询。
SELECT
[Customer].[Country].[United States] *
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
还可以采用以下方式编写上一个查询:
SELECT [Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
[Customer].[Country].[United States])
返回的单元格值是相同的,尽管结果集中的元数据将有所不同。 例如,在使用上一个查询时,“Country”层次结构已移动到筛选器轴(即 WHERE 子句中),因此不会在结果集中显式显示。
上述三个查询中的每一个都演示了 SQL Server Analysis Services 中自动存在的行为的影响。
User-Defined 层次结构和立方体空间
本主题前面的示例使用属性层次结构定义多维数据集空间中的位置。 此外,您还可以在多维数据集空间中使用用户定义的层次结构来定义位置,该层次结构是基于维度中的属性层次结构定义的。 用户定义的层次结构是由属性层次结构组成的层次结构,旨在方便用户浏览多维数据集中的数据。
例如, CROSSJOIN 上一部分中的查询也可以按如下方式编写:
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[Customer Geography].[State-Province].Members
)
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
在上一个查询中,客户维度中的 Customer Geography 用户定义的层次结构用于定义以前使用属性层次结构定义的多维数据集空间中的位置。 可以使用属性层次结构或用户定义的层次结构来定义多维数据集空间中的相同位置。
属性关系和多维数据集空间
定义相关属性之间的属性关系可以提高查询性能(通过促进创建适当的聚合),并影响与属性层次结构成员一起显示的相关属性层次结构的成员。 例如,当你定义包含 City 属性层次结构中的成员的元组并且元组未显式定义 Country 属性层次结构成员时,你可能期望默认的国家/地区属性层次结构成员将是 Country 属性层次结构的相关成员。 但是,仅当在 City 属性层次结构和 Country 属性层次结构之间定义属性关系时,才会如此。
以下示例返回查询中未显式包含的相关属性层次结构的成员。
WITH MEMBER Measures.x AS
Customer.Country.CurrentMember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
注释
请注意,关键字 WITH 与 CurrentMember (MDX) 和 Name (MDX) 函数一起使用,以创建用于查询的计算成员。 有关详细信息,请参阅基本 MDX 查询(MDX)。
在上一个查询中,将返回与 State 属性层次结构的每个成员关联的 Country 属性层次结构的成员的名称。 将显示预期的国家/地区成员(因为“城市”和“国家/地区”属性之间定义了属性关系)。 但是,如果同一维度中的属性层次结构之间未定义任何属性关系,则会返回 (All) 成员,如以下查询所示。
WITH MEMBER Measures.x AS
Customer.Education.Currentmember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
在上一个查询中,返回 (All) 成员(“所有客户”),因为教育与 City 之间没有关系。 因此,当涉及 City 属性层次结构的元组中未显式提供教育成员时,教育属性层次结构的 (All) 成员将是教育属性层次结构的默认成员。
计算上下文
另请参阅
MDX中的关键概念(分析服务)
元组
Autoexists
使用成员、元组和集(MDX)
视觉总计和非视觉总计
MDX 语言参考 (MDX)
多维表达式(MDX)参考