使用空值

空值表示特定成員、元組或單元為空。 空格值表示該特定格的資料無法在底層事實表中找到,或該格元組代表不適用於該立方體的成員組合。

Note

雖然空值與零值不同,但空值通常大多數時間被視為零。

以下查詢說明空值與零值的行為:

WITH  
//A calculated Product Category that always returns 0  
MEMBER [Product].[Category].[All Products].ReturnZero AS 0  
//Will return true for any null value  
MEMBER MEASURES.ISEMPTYDemo AS ISEMPTY([Measures].[Internet Tax Amount])  
//Will true for any null or zero value  
//To be clear: the expression 0=null always returns true in MDX  
MEMBER MEASURES.IsZero AS [Measures].[Internet Tax Amount]=0  
SELECT  
{[Measures].[Internet Tax Amount],MEASURES.ISEMPTYDemo,MEASURES.IsZero}  
ON COLUMNS,  
[Product].[Category].[Category].ALLMEMBERS  
ON ROWS  
FROM [Adventure Works]  
WHERE([Date].[Calendar].[Calendar Year].&[2001])  

以下資訊適用於空值:

  • IsEmpty 函式回傳 TRUE 當且僅當函式中指定的元組所識別的儲存格為空。 否則,函式會回傳 FALSE。

    Note

    IsEmpty 函式無法判斷成員表達式是否回傳 null 值。 要判斷是否從表達式回傳 null 成員,請使用 IS 運算子。

  • 當空格值是任一數值運算子(+, -, *, /)的運算元時,若另一個運算元為非空值,則空格值視為零。 若兩個運算元皆為空,數值運算子回傳空格值。

  • 當空格值是串接運算子(+)的運算元時,若另一個運算元為非空值,則空格值被視為空字串。 若兩個運算元皆為空,串接運算子會回傳空格值。

  • 當空格值是任一比較運算子的運算元(=. <>, =>, =, ><, ),<空格值會被視為零或空字串,視另一個運算元的資料型態是數值還是字串而定。 若兩個運算元皆為空,則兩個運算元皆視為零。

  • 當數值彙整時,空格值與零相同位置。 在空格值與零之間,空格在零之前會被整合。

  • 當彙整字串值時,空格值會與空字串在同一位置。 在空格值與空字串之間,空字串會先於空字串進行排序。

處理 MDX 語句與立方體中的空值

在多維表達式(MDX)語句中,你可以尋找空值,然後對資料有效(即非空)的儲存格進行特定計算。 在執行計算時刪除空值很重要,因為若包含空格值,某些計算(如平均值)可能不準確。

如果你底層的事實表資料中儲存了空值,預設在處理立方體時會將它們轉為零。 你可以在衡量指標上使用 「空處理 」選項,來控制空事實是否會轉為 0、變成空值,甚至在處理過程中拋出錯誤。 如果你不希望查詢結果中出現空格值,應該建立查詢、計算成員或 MDX 腳本語句,來消除空值或以其他值取代。

要移除查詢中的空列或欄,可以在軸集合定義前使用 NON EMPTY 陳述式。 例如,以下查詢僅回傳產品類別自行車,因為該類別是2001年曆年唯一銷售的類別:

SELECT  
{[Measures].[Internet Tax Amount]}  
ON COLUMNS,  
//Comment out the following line to display all the empty rows for other Categories  
NON EMPTY  
[Product].[Category].[Category].MEMBERS  
ON ROWS  
FROM [Adventure Works]  
WHERE([Date].[Calendar].[Calendar Year].&[2001])  

更一般地,要移除集合中的空元組,可以使用 NonEmpty 函數。 以下查詢顯示兩個計算指標,其中一個計算產品類別數量,另一個顯示具有指標[網路稅額]及2001年曆年數的產品類別數量:

WITH  
MEMBER MEASURES.CategoryCount AS  
COUNT([Product].[Category].[Category].MEMBERS)  
MEMBER MEASURES.NonEmptyCategoryCountFor2001 AS  
COUNT(  
NONEMPTY(  
[Product].[Category].[Category].MEMBERS  
,([Date].[Calendar].[Calendar Year].&[2001], [Measures].[Internet Tax Amount])  
))  
SELECT  
{MEASURES.CategoryCount,MEASURES.NonEmptyCategoryCountFor2001 }  
ON COLUMNS  
FROM [Adventure Works]  

更多資訊請參見 NonEmpty (MDX)。

空值與比較運算元

當資料中出現空值時,邏輯運算子與比較運算子可能會回傳第三個 EMPTY 結果,而非僅為 TRUE 或 FALSE。 這種三重數值邏輯的需要是造成應用程式錯誤的來源。 這些表格說明了引入空值比較的影響。

下表顯示對兩個布林運算元應用 AND 運算子的結果。

AND TRUE EMPTY FALSE
真 TRUE FALSE FALSE
空的 FALSE EMPTY FALSE
假 FALSE FALSE FALSE

下表顯示對兩個布林運算元應用 OR 運算子的結果。

OR TRUE FALSE
真 TRUE TRUE
空的 TRUE TRUE
假 TRUE FALSE

下表顯示 NOT 運算子如何否定或反轉布林運算子的結果。

應用 NOT 運算子的布林表達式 評估為
TRUE FALSE
EMPTY EMPTY
FALSE TRUE