空の値の操作
空の値は、特定のメンバー、タプル、またはセルが空であることを示します。 空のセル値は、指定されたセルのデータが基になるファクト テーブルに見つからないこと、あるいは指定されたセルの組の表すメンバーの組み合わせをキューブに適用できないことのいずれかを示します。
Note
空の値は 0 の値とは異なりますが、通常、空の値はほとんどの場合 0 として扱われます。
次のクエリでは、空の値と 0 の動作を示しています。
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 演算子を使用します。
空のセル値が数値演算子 (+、-、*、/) のいずれかのオペランドである場合、もう一方のオペランドが空でない値であるなら、空のセル値は 0 として扱われます。 両方のオペランドが空の場合、数値演算子は空のセル値を返します。
空のセル値が文字列連結演算子 (+) のオペランドである場合、空のセル値は空の文字列として扱われます(もう一方のオペランドが空でない値の場合)。 オペランドが両方とも空なら、文字列連結演算子は空のセル値を返します。
空のセル値がいずれかの比較演算子 (=. <>, =, >=, , , <) のオペランドである場合、<>空のセル値はそれぞれ、もう一方のオペランドのデータ型が数値か文字列かに応じて、0 または空の文字列として扱われます。 オペランドが両方とも空なら、どちらも 0 として扱われます。
数値を照合する場合、空のセル値はゼロと同じ場所に照合されます。 空のセル値と 0 との照合の場合、空のセル値の照合順序は、0 の前になります。
文字列の値を照合する場合、空のセル値の照合順序は、空の文字列と同じ位置になります。 空のセル値と空の文字列の間で、空の文字列の前に空の照合順序が設定されます。
MDX ステートメントおよびキューブにおける空の値の処理
多次元式 (MDX) ステートメントでは、空の値を検索し、有効な (つまり空ではない) データを持つセルに対して特定の計算を実行できます。 計算時に空の値を除去することが必要な場合があります。平均値などの計算では、空のセル値が含まれていると正確な結果を得ることができません。
空の値が基になるファクト テーブル データに格納されている場合、既定では、キューブの処理時にゼロに変換されます。 メジャーで Null 処理オプションを使用すると、null ファクトを 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 関数を使用する方法がより一般的です。 次のクエリは、2 つの計算メジャーを示しています。そのうちの 1 つは製品カテゴリの数をカウントし、もう 1 つはメジャー [インターネット税額] と Calendar Year 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)」を参照してください。
空の値と比較演算子
データに空の値が存在する場合、論理演算子と比較演算子は TRUE または FAL ではなく、EMPTY の 3 番目の結果を返す可能性がありますStandard Edition。 このような 3 値論理が必要な場合、多くのアプリケーション エラーの原因になります。 これらの表では、空の値比較を導入した場合の効果の概要を示します。
次の表は、2 つのブール型オペランドに AND 演算子を適用した結果を示しています。
かつ | TRUE | EMPTY | FALSE |
---|---|---|---|
TRUE | TRUE | false | FALSE |
空 | FALSE | EMPTY | FALSE |
FALSE | FALSE | FALSE | FALSE |
次の表は、2 つのブール型オペランドに OR 演算子を適用した結果を示しています。
OR | TRUE | FALSE |
---|---|---|
TRUE | TRUE | TRUE |
空 | TRUE | TRUE |
FALSE | TRUE | FALSE |
次の表は、NOT 演算子がブール演算子の結果を否定または反転する方法を示しています。
NOT 演算子が適用されるブール式 | 評価結果 |
---|---|
TRUE | FALSE |
EMPTY | EMPTY |
FALSE | TRUE |