数値演算式における、空の扱いについて説明します。
Data Effectorでは、以下パラメタ、または環境パラメタを指定することで、算術演算における空の扱いおよび出力時の空の扱いを変えることができます。
コマンド利用時
連結条件ファイルのSubstituteZeroForEmptyパラメタ
集計条件ファイルのSubstituteZeroForEmptyパラメタ
ソート条件ファイルのSubstituteZeroForEmptyパラメタ
C API利用時は、環境パラメタSubstituteZeroForEmpty
参照
数値演算式については以下を参照してください。
集計機能の場合は、“A.3.1 集計式の書式”の図A.27 数値演算式
連結・ソート機能の場合は、“A.5.1 リターン式の書式”の図A.36 数値演算式
注意
なお、以降の説明では、C API利用時に環境パラメタSubstituteZeroForEmptyを設定した例で説明します。
ここでは、以下について説明します。
数値演算式に指定した項目名によって参照される項目が以下の場合、その値を空と扱います。
指定した項目名が入力ファイルに存在しない場合
指定した項目名が入力ファイルに存在し、その項目の内容がない場合
以下のレコードについて項目名「$値」で参照した結果は空となります。
番号,名前 101,AAA 102,BBB 103,CCC
番号,名前,値 201,XXX, 202,YYY,""
数値演算式に指定したテキスト式によって参照されるテキストノードが以下の場合、その値を空と扱います。
テキスト式で示されるパスの要素ノードが存在しない場合
テキスト式で示されるパスの要素ノードが存在し、その要素ノードが空要素タグの場合
テキスト式で示されるパスの要素ノードが存在し、その先頭のテキストノードの内容がない場合
以下のレコードについてテキスト式「/文書/値/text()」で参照した結果は空となります。
<文書></文書> <文書><値 /></文書> <文書><値></値></文書> <文書><値><子要素>子要素の値</子要素></値></文書> <文書><値><子要素>子要素の値</子要素>100</値></文書>
集合関数では、関数のパラメタに指定した項目に空のものが含まれる場合、空である項目を除いた、それ以外の項目の値だけで集計処理します。
count関数のパラメタ(項目参照)が指定された場合、空でない項目の数を返します。
count関数のパラメタ(項目参照)が指定されなかった場合、項目が空であるかどうかにかかわらず、グループ内の入力レコードの数を返します。
sum関数は、空でない項目の値の合計値を返します。
max関数は、空でない項目の値の最大値を返します。
min関数は、空でない項目の値の最小値を返します。
avg関数は、空でない項目の値の平均値を返します。
パラメタに指定した項目がすべて空の場合、count関数は0を返します。
パラメタに指定した項目がすべて空の場合、sum関数、max関数、min関数およびavg関数は、空を返します。
環境パラメタSubstituteZeroForEmpty設定時の注意
環境パラメタSubstituteZeroForEmptyに「YES」を指定する場合、数値演算式の最終的な演算結果が0となったのか、または演算結果は空で、それが0と出力されたのかを出力結果から判断することはできません。
また、以下の例のように空が0と出力されることにより、出力結果だけを見ると矛盾があると判断される場合があるため、注意が必要です。
以下は、各入力データの最小値および入力データ全体の最小値を求めている例です。
出力結果において、項目「値1」の最小値は「1」、項目「値2」については入力データにおける項目の内容がすべて空のため、最小値は空となり空が「0」として出力されます。
これらの結果からは項目「値1」と「値2」全体の最小値は0であると判断される恐れがありますが、実際には、出力結果の「min($値1;$値2)」にあるように、項目「値1」と「値2」全体の最小値は1です。