共用方式為


自動存在

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

自動存在的概念 會將 Cube 空間限制在 Cube 中實際存在於 Cube 中的數據格,與可能因為從相同階層建立屬性階層成員的所有可能組合而存在的數據格。 這是因為某個屬性階層的成員不能與相同維度中另一個屬性階層的成員一起存在。 當 SELECT 語句中使用相同維度的兩個或多個屬性階層時,Analysis Services 會評估屬性的表達式,以確保這些屬性的成員會適當地限制為符合所有其他屬性的準則。

例如,假設您正在使用 Geography 維度中的屬性。 如果您有一個表達式會從 City 屬性傳回所有成員,而另一個表達式會將 Country 屬性的成員限制在歐洲的所有國家/地區,則這會導致 City 成員僅限於屬於歐洲國家/地區的城市。 這是因為 Analysis Services 的自動存在特性。 自動存在僅適用於相同維度的屬性,因為它會嘗試防止其他屬性運算式包含一個屬性表達式中排除的維度記錄。 自動存在也可以理解為維度數據列上不同屬性運算式的結果交集。

單元格存在

下列儲存格一律存在:

  • 與相同維度中其他階層的成員交叉時,每個階層的 (All) 成員。

  • 與非匯出同層級的交叉,或與非匯出同層級的父代或子系交叉時,導出成員。

提供非現有儲存格

非現有儲存格是系統提供的儲存格,做為查詢或計算的回應,要求 Cube 中不存在的儲存格。 例如,如果您的 Cube 具有 City 屬性階層和屬於 Geography 維度的 Country 屬性階層,以及 Internet Sales Amount 量值,則此 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 中自動存在行為的效果。

深層和淺層自動存在

自動存在可以套用至表達式做為深度或淺層。 深度自動存在 表示所有運算式都會在套用交叉分析篩選器表達式、座標軸中的子選取表達式等之後評估為符合最深的空間。 淺層自動存在 表示在目前的表達式之前先評估外部表達式,並將這些結果傳遞至目前的表達式。 預設設定為深層自動存在。

下列案例和範例有助於說明不同類型的自動存在。 在下列範例中,將建立兩個集合:一個做為匯出表達式,另一個則做為常數表達式。

//Obtain the Top 10 best reseller selling products by Name

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

取得的結果集為:

轉銷商銷售金額 折扣金額 PCT 折扣
山-200 $14,356,699.36 $19,012.71 0.13%
路-250 $9,377,457.68 $4,032.47 0.04%
山-100 $8,568,958.27 $139,393.27 1.63%
路-650 $7,442,141.81 $39,698.30 0.53%
巡迴賽-1000 $6,723,794.29 $166,144.17 2.47%
Road-550-W $3,668,383.88 $1,901.97 0.05%
路-350-W $3,665,932.31 $20,946.50 0.57%
HL 山框架 $3,365,069.27 $174.11 0.01%
路-150 $2,363,805.16 $0.00 0.00%
巡迴賽-3000 $2,046,508.26 $79,582.15 3.89%

取得的產品集似乎與 Preferred10Products 相同;因此,確認 Preferred10Products 集合:

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Preferred10Products on 1

from [Adventure Works]

根據下列結果,這兩個集合 (Top10SellingProducts, Preferred10Products) 都相同

轉銷商銷售金額 折扣金額 PCT 折扣
山-200 $14,356,699.36 $19,012.71 0.13%
路-250 $9,377,457.68 $4,032.47 0.04%
山-100 $8,568,958.27 $139,393.27 1.63%
路-650 $7,442,141.81 $39,698.30 0.53%
巡迴賽-1000 $6,723,794.29 $166,144.17 2.47%
Road-550-W $3,668,383.88 $1,901.97 0.05%
路-350-W $3,665,932.31 $20,946.50 0.57%
HL 山框架 $3,365,069.27 $174.11 0.01%
路-150 $2,363,805.16 $0.00 0.00%
巡迴賽-3000 $2,046,508.26 $79,582.15 3.89%

下列範例將說明深層自動存在的概念。 在此範例中,我們會依 [Product] 篩選 Top10SellingProducts。[Mountain] 群組中的 [Product Line] 屬性。 請注意,這兩個屬性(交叉分析篩選器和軸)都屬於相同的維度 [Product]。

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

// Preferred10Products set removed for clarity

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

產生下列結果集:

轉銷商銷售金額 折扣金額 PCT 折扣
山-200 $14,356,699.36 $19,012.71 0.13%
山-100 $8,568,958.27 $139,393.27 1.63%
HL 山框架 $3,365,069.27 $174.11 0.01%
Mountain-300 $1,907,249.38 $876.95 0.05%
Mountain-500 $1,067,327.31 $17,266.09 1.62%
Mountain-400-W $592,450.05 $303.49 0.05%
LL 山框架 $521,864.42 $252.41 0.05%
ML Mountain Frame-W $482,953.16 $206.95 0.04%
ML 山框架 $343,785.29 $161.82 0.05%
女子山短褲 $260,304.09 $6,675.56 2.56%

在上述結果集中,我們有七個新人進入 Top10SellingProducts 和 Mountain-200、Mountain-100 和 HL Mountain Frame 的清單,已移至清單的頂端。 在先前的結果集中,這三個值會插在一起。

這稱為 Deep Autoexists,因為會評估 Top10SellingProducts 集合以符合查詢的切割條件。 深層自動存在表示所有表達式都會在套用交叉分析篩選器表達式、座標軸中的子選取表達式等之後評估,以符合最深的空間。

不過,您可能想要能夠對 Top10SellingProducts 執行分析,相當於 Preferred10Products,如下列範例所示:

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Preferred10Products on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

產生下列結果集:

轉銷商銷售金額 折扣金額 PCT 折扣
山-200 $14,356,699.36 $19,012.71 0.13%
山-100 $8,568,958.27 $139,393.27 1.63%
HL 山框架 $3,365,069.27 $174.11 0.01%

在上述結果中,切割會提供只包含 [Product] 群組中 [Mountain] 群組中 Preferred10Products 的產品的結果。[產品線];如預期般,因為 Preferred10Products 是常數表達式。

此結果集也被視為淺層自動存在。 這是因為表達式會在配量子句之前進行評估。 在上一個範例中,表達式是用於說明目的的常數表達式,以介紹概念。

您可以使用 自動存在 連接字串屬性,在會話層級修改自動存在行為。 下列範例會從開啟新的工作階段開始,並將 Autoexists=3 屬性新增至連接字串。 您必須開啟新的連線,才能執行此範例。 一旦使用 [自動存在] 設定建立連線,它就會維持有效狀態,直到該聯機完成為止。

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

//Preferred10Products set removed for clarity

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

下列結果集現在會顯示 Autoexists 的淺層行為。

轉銷商銷售金額 折扣金額 PCT 折扣
山-200 $14,356,699.36 $19,012.71 0.13%
山-100 $8,568,958.27 $139,393.27 1.63%
HL 山框架 $3,365,069.27 $174.11 0.01%

您可以使用連接字串中的 AUTOEXISTS=[1|2|3] 參數來修改自動存在行為;如需參數使用方式,請參閱 支援的 XMLA 屬性 (XMLA)ConnectionString

另請參閱

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