前面,我们将“多维数据集空间”定义为其属性层次结构的成员的交集。“自动共存”的概念将此多维数据集空间限制为那些实际存在的单元。维度中属性层次结构的成员可能不与相同维度中其他属性层次结构的成员共存。
例如,某多维数据集具有 City 属性层次结构、Country 属性层次结构和 Internet Sales Amount 度量值,则此多维数据集的空间仅包含那些共存的成员。例如,如果 City 属性层次结构包含城市 New York、London、Paris、Tokyo 和 Melbourne,而 Country 属性层次结构包含国家(地区)United States、United Kingdom、France、Japan 和 Australia,则该多维数据集的空间不包含 Paris 和 United States 相交处的空间(单元)。
当查询单元不存在时,不存在的单元返回空,即它们无法包含计算结果,并且您不能定义写入此空间的计算。例如,下面的语句包含不存在的单元。
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]
执行前面的查询时,Aaron A. Allen 与 Female 相交处的单元将显示空。同样,Abigail Clark 与 Male 相交处的单元也将显示空。这些单元不存在并且不能包含值,但不存在的单元可出现在查询返回的结果中。
如果使用 Crossjoin (MDX) 函数返回同一维度属性层次结构中的属性层次结构成员的叉积,自动共存将限制只返回那些实际存在的元组集,而不是返回整个笛卡尔积。例如,运行以下查询并检查其结果。
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
注意: |
|---|
|
请注意 0 用于表示列轴的名称,它是列轴“axis(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 中自动共存行为所带来的影响。