分享方式:


使用空值

空值表示特定成員、Tuple 或儲存格是空的。 空的數據格值表示在基礎事實數據表中找不到指定儲存格的數據,或指定儲存格的 Tuple 代表不適用於 Cube 的成員組合。

注意

雖然空值與零的值不同,但空白值通常會在大部分時間視為零。

下列查詢說明空值和零值的行為:

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])  

下列資訊適用於空值:

  • 只有在函式中指定的 Tuple 所識別的儲存格是空的時,IsEmpty 函式才會傳回 TRUE。 否則,函式會傳 回 FALSE

    注意

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

  • 當空單元格值是任一數值運算子的操作數時,如果其他操作數是非空值,則空單元格值會視為零。 如果兩個操作數都是空的,數值運算符會傳回空的單元格值。

  • 當空單元格值是字串串連運算符的操作數時,如果其他操作數是非空值,則空單元格值會視為空字串。 如果這兩個操作數都是空的,字串串連運算符會傳回空的單元格值。

  • 當空白儲存格值是任一比較運算元的操作數時,<><>><空單元格值會分別視為零或空字串,視其他操作數的數據類型為數值或字串而定。 如果兩個操作數都是空的,則兩個操作數都會視為零。

  • 在定序數值時,空白儲存格值會定序在與零相同的位置。 在空白儲存格值與零之間,空白定序會先排定在零之前。

  • 當定序字串值時,空白儲存格值會定序在與空字串相同的位置。 在空白數據格值與空字串之間,空的定序在空字串之前。

處理 MDX 語句和 Cube 中的空白值

在多維度表示式 (MDX) 語句中,您可以尋找空白值,然後在具有有效數據(也就是非空白)數據的儲存格上執行特定計算。 執行計算時消除空白值可能很重要,因為如果包含空白數據格值,例如平均值,某些計算可能會不正確。

如果空白值儲存在基礎事實數據表數據中,則根據預設,當處理 Cube 時,這些值會轉換成零。 您可以在 量值上使用 Null 處理 選項來控制 Null 事實是否轉換成 0、轉換成空值,或甚至會在處理期間擲回錯誤。 如果您不想要在查詢結果中顯示空白數據格值,您應該建立查詢、匯出成員或 MDX 腳本語句,以排除空值,或將它們取代為其他值。

若要從查詢中移除空的數據列或數據行,您可以在座標軸集定義之前使用 NON EMPTY 語句。 例如,下列查詢只會傳回 Product Category Bikes,因為這是在 Calendar Year 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])

一般而言,若要從集合中移除空的 Tuple,您可以使用 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 運算子套用至兩個布爾操作數的結果。

TRUE EMPTY FALSE
TRUE TRUE false FALSE
FALSE EMPTY FALSE
FALSE FALSE FALSE

下表顯示將 OR 運算子套用至兩個布爾操作數的結果。

OR true FALSE
TRUE TRUE TRUE
TRUE TRUE
FALSE true FALSE

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

套用 NOT 運算子的布爾表達式 評估為
true FALSE
EMPTY EMPTY
FALSE TRUE

另請參閱

MDX 函數參考 (MDX)
MDX 運算子參考 (MDX)
運算式 (MDX)