共用方式為


使用空白值

空白值代表特定成員、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 唯一賣出的 Category:

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 函數。下列查詢顯示兩個導出量值,其中一個會計算 Product Category 的數目,另一個會顯示具有 [Internet Tax Amount] 量值和 Calendar Year 2001 值的 Product Category 數目:

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 運算子套用到兩個布林 (Boolean) 運算元的結果。

AND

TRUE

EMPTY

FALSE

TRUE

TRUE

FALSE

FALSE

EMPTY

FALSE

EMPTY

FALSE

FALSE

FALSE

FALSE

FALSE

這個表格會顯示將 OR 運算子套用到兩個布林運算元的結果。

OR

TRUE

FALSE

TRUE

TRUE

TRUE

EMPTY

TRUE

TRUE

FALSE

TRUE

FALSE

這個表格會顯示 NOT 運算子如何取消或反轉布林運算子的結果。

套用 NOT 運算子的布林運算式

結果

TRUE

FALSE

EMPTY

EMPTY

FALSE

TRUE