ページのトップに戻る
Interstage Data Effector ユーザーズガイド

A.3.2 数値演算式における空の扱い

数値演算式における、空の扱いについて説明します。
Data Effectorでは、以下パラメタ、または環境パラメタを指定することで、算術演算における空の扱いおよび出力時の空の扱いを変えることができます。


参照

数値演算式については以下を参照してください。

注意

なお、以降の説明では、C API利用時に環境パラメタSubstituteZeroForEmptyを設定した例で説明します。

ここでは、以下について説明します。


空の定義

入力ファイルタイプがCSV形式の場合

数値演算式に指定した項目名によって参照される項目が以下の場合、その値を空と扱います。

  • 指定した項目名が入力ファイルに存在しない場合

  • 指定した項目名が入力ファイルに存在し、その項目の内容がない場合


以下のレコードについて項目名「$値」で参照した結果は空となります。


番号,名前
101,AAA
102,BBB
103,CCC

番号,名前,値
201,XXX,
202,YYY,""

入力ファイルタイプがXML形式の場合

数値演算式に指定したテキスト式によって参照されるテキストノードが以下の場合、その値を空と扱います。


  • テキスト式で示されるパスの要素ノードが存在しない場合

  • テキスト式で示されるパスの要素ノードが存在し、その要素ノードが空要素タグの場合

  • テキスト式で示されるパスの要素ノードが存在し、その先頭のテキストノードの内容がない場合


以下のレコードについてテキスト式「/文書/値/text()」で参照した結果は空となります。

<文書></文書>
<文書><値 /></文書>
<文書><値></値></文書>
<文書><値><子要素>子要素の値</子要素></値></文書>
<文書><値><子要素>子要素の値</子要素>100</値></文書>

集合関数における空の扱い

集合関数では、関数のパラメタに指定した項目に空のものが含まれる場合、空である項目を除いた、それ以外の項目の値だけで集計処理します。


算術演算における空の扱い

環境パラメタSubstituteZeroForEmptyに「NO」を指定した場合

算術演算では、演算対象に空が含まれる場合、演算結果はすべて空を返します。


例1

「sum($値1)」が空を返す場合、以下の数値演算式の結果は空になります。

sum($値1)*100+50

例2

「min($値1)」が空を返す場合、以下の数値演算式の結果は空になります。

1/min($値1)

環境パラメタSubstituteZeroForEmptyに「YES」を指定した場合

算術演算では、演算対象に空が含まれる場合、空を0とみなして演算します。


例1

「sum($値1)」が空を返す場合、以下の数値演算式の結果は「50」になります。

sum($値1)*100+50

例2

「min($値1)」が空を返す場合、以下の数値演算式の演算時に「ゼロによる除算エラー」が発生します。

1/min($値1)

出力時の空の扱い

環境パラメタSubstituteZeroForEmptyに「NO」を指定した場合

最終的な数値演算式の結果が空となった場合、出力ファイルの項目の内容、またはテキストノードには何も出力されません。


環境パラメタSubstituteZeroForEmptyに「YES」を指定した場合

最終的な数値演算式の結果が空となった場合、出力ファイルの項目の内容、またはテキストノードの値として「0」が出力されます。


環境パラメタSubstituteZeroForEmpty設定時の注意

環境パラメタSubstituteZeroForEmptyに「YES」を指定する場合、数値演算式の最終的な演算結果が0となったのか、または演算結果は空で、それが0と出力されたのかを出力結果から判断することはできません。
また、以下の例のように空が0と出力されることにより、出力結果だけを見ると矛盾があると判断される場合があるため、注意が必要です。


以下は、各入力データの最小値および入力データ全体の最小値を求めている例です。
出力結果において、項目「値1」の最小値は「1」、項目「値2」については入力データにおける項目の内容がすべて空のため、最小値は空となり空が「0」として出力されます。
これらの結果からは項目「値1」と「値2」全体の最小値は0であると判断される恐れがありますが、実際には、出力結果の「min($値1;$値2)」にあるように、項目「値1」と「値2」全体の最小値は1です。


入力ファイル
"種別1","値1","値2"
"A","1",""
"A","",""

グループ式、集計式
グループ式: $種別1
集計式: min($種別1), min($値2), min($値1;$値2)

出力結果
"種別1","min($値1)","min($値2)","min($値1;$値2)"
"A",1,0,1