共用方式為


Cube 空間

適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Cube 空間是 Cube 屬性階層成員與 Cube 量值之乘積。 因此,Cube 空間是由 Cube 中所有屬性階層成員的結合乘積和 Cube 的量值所決定,並定義 Cube 的大小上限。 請務必注意,此空間包含所有可能的屬性階層成員組合;即使是在現實世界中可能被視為不可能的組合,亦即城市是巴黎,國家/地區是英格蘭、西班牙、日本或印度或其他地方的組合。

自動存在和 Cube 空間

自動存在的概念 會將這個 Cube 空間限制為實際存在的單元格。 維度中屬性階層的成員可能與相同維度中另一個屬性階層的成員不存在。

例如,如果您有具有 City 屬性階層、Country 屬性階層和 Internet Sales Amount 量值的 Cube,則此 Cube 的空間只會包含彼此存在的成員。 例如,如果 City 屬性階層包含紐約、倫敦、巴黎、東京和墨爾本的城市;和 Country 屬性階層包含美國、英國、法國、日本和澳大利亞的國家/地區:然後,立方體的空間不包括位於巴黎和美國交匯處的空間(單元格)。

查詢不存在的儲存格時,非現有儲存格會傳回 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交集處的儲存格會顯示 Null。 同樣地,阿比蓋爾·克拉克和 Male 交集處的儲存格會顯示 Null。 這些儲存格不存在且不能包含值,但不存在的儲存格可能會出現在查詢所傳回的結果中。

當您使用 Crossjoin (MDX) 函式,從相同維度的屬性階層傳回屬性階層成員的交叉乘積時,自動存在會限制這些 Tuple 傳回至實際存在的 Tuple 集合,而不是傳回完整的笛卡兒乘積。 例如,執行 ,然後檢查下列查詢執行的結果。

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 SQL Server Analysis Services 中自動存在行為的效果。

User-Defined 階層和 Cube 空間

本主題中的先前範例會使用屬性階層來定義 Cube 空間中的位置。 不過,您也可以使用根據維度中的屬性階層定義的使用者定義階層,在 Cube 空間中定義位置。 使用者定義的階層是屬性階層階層的階層,其設計目的是方便用戶流覽 Cube 數據。

例如,上一節中 CROSSJOIN 查詢也可能撰寫如下:

SELECT CROSSJOIN  
   (  
      {[Customer].[Country].[United States]},  
         [Customer].[Customer Geography].[State-Province].Members  
   )   
ON 0   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

在上一個查詢中,Customer 維度內的 Customer Geography 使用者定義階層可用來定義先前使用屬性階層定義之 Cube 空間中的位置。 您可以使用屬性階層或使用者定義的階層來定義 Cube 空間中的相同位置。

屬性關聯性和 Cube 空間

定義相關屬性之間的屬性關聯性可改善查詢效能(藉由促進建立適當的匯總),並影響與屬性階層成員一起出現之相關屬性階層的成員。 例如,當您定義包含 City 屬性階層成員的 Tuple,且 Tuple 未明確定義 Country 屬性階層成員時,您可能會預期預設 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 關鍵詞會與 CurrentMemberName (MDX) 函式搭配使用,以建立導出成員以供查詢使用。 如需詳細資訊,請參閱 基本 MDX 查詢 (MDX)

在上一個查詢中,會傳回與 State 屬性階層每個成員相關聯的 Country 屬性階層成員名稱。 預期的 Country 成員隨即出現(因為 City 與 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) 成員 (“All Customers”),因為Education與 City 之間沒有關聯性。 因此,Education 屬性階層的 (All) 成員會是任何涉及未明確提供 Education 成員之 City 屬性階層之 Education 屬性階層的預設成員。

計算內容

另請參閱

MDX 中 重要概念
Tuple
自動存在
使用成員、Tuple 和集合 (MDX)
視覺效果總計和非視覺效果總計
MDX 語言參考 (MDX)
多維度表達式 (MDX) 參考