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