使用空值

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

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