こんにちは!Yokoです。
前回の記事では、IsNull関数とLen関数の結果の違いを解説しました。
今回もNull問題を扱います!
本当は1回で終わる予定だったんですが、ついでに書いておこうと思いまして…
今回の内容を理解していると、ごちゃごちゃしたロードスクリプトにおさらばして、サクッと処理できてしまいます。
では早速やってみましょう!
NullAsValueでNull値を変換する
Left Joinされたデータやテーブルで、Null値が存在する場合、Null値を自動的に特定の値に変換することができます。
例えば、会員区分がNullであれば空文字をセットするというような場合は、以下のようにスクリプトを設定します。
NullAsValue 会員区分;
Set NullValue = '';元に戻すには、こう記述します。
NullAsValue 会員区分;
Set NullValue = ;これを応用すると、こんなこともできますね。
Joinした結果として、社内外区分の社内だけが入っているこんなデータがあったとして…

こんなスクリプトを追加してあげると…
NullAsValue 社内外区分;
Set NullValue = '社外';こんな結果になります。

NullAsValue...は、宣言した後で有効になるので、Load文の直前に入れます。便利ですよね。
この方法は少し留意点があって、それは、これから発生するNullに対しては使えないということなんです。
予め、NullAsValue… Set NullValue =…で記述しておき、Left Joinで発生したNullに関しては、NullValue = で設定した値を自動的に入れるというのはできないんですよね。
つまり、既に存在するNullには有効ということになります。
一発でやるのでしたら、Mappingテーブル + ApplyMapがベストです。
Set NullInterpret = ”;で空文字をNull化
NullAsValueでNullを文字列に変換できましたが、逆に空文字をNullとして扱いたい場合は、どうするのでしょうか?
これもお決まりの方法があります。
空文字をNullに変換したい場合は、以下のように記述します。
Set NullInterpret = '';この方法では、どのカラムであろうが、空文字の場合は、Nullにしてくれます。つまり、ロードするデータ全体が対象っていうこと。
もし、空文字ではなく、’-‘(ハイフン)の場合はNullにするなら、Set NullInterpret = ‘-‘; とすればOK。
但し、空文字とハイフンの両方をNullにしたいという場合、Set NullInterpret は使えませんので、Load文の中で変換して下さい。
尚、設定を元に戻したい時は、こちらです。
Set NullInterpret = ;CoalesceでNull対策
CoalesceはSQLではよく使われる関数ですが、QlikにもCoalesce関数はあります。
Coalesceをうまく使えば、シンプルな数式で結果が得られます。
主に有用なケースは以下のような場合です。
- 複数の条件から優先順位をつけて結果が得られる(If文の効率化)
- 数値がNullで計算できない場合に、Nullを0化して計算
以下のようなデータがあるとします。
・キャンペーン1: 2026年10月1日〜11月30日は15%引き(商品コード=1)
・キャンペーン2: 2026年11月1日〜11月30日は10%引き(商品コード=1または2)

ここで、商品コード: 1 は、キャンペーンが重なっていますが、このような場合は割引率の高いほうを適用することして、最終的な割引後の金額を出すにはどうする?
…というような場合、割引が適用されない場合は、Nullになっているとすると、以下のようにスクリプトを記述します。
sales:
Load
売上日,
会員名,
商品コード,
Coalesce(キャンペーン割引率1,キャンペーン割引率2,0) as 割引率,
単価,
数量
Resident sales_tmp;Coalesce(キャンペーン割引率1,キャンペーン割引率2,0) という数式はは、以下の条件で評価されます。
① キャンペーン割引率1がNullでない場合はキャンペーン割引率1を返す
↓
② キャンペーン割引率2がNullでない場合はキャンペーン割引率2を返す
↓
③ 以上に合致しない場合は0を返す
If文で書くよりシンプルですよね。
これで、割引率が確定しましたので、割引後金額を算出します…
と書いたところで、2026年12月10日の数量はNullやないですかあ😫
実際、Nullが混在するデータで数式を記述した時に、Nullが邪魔して計算が正しくできないケースって、たまにありますよね。
これも併せて、Coalesceで処理しちゃいましょう。
sales:
Load
*,
単価 * 数量 as 割引前金額,
(単価 * 数量) * (1 - 割引率) as 割引後金額
;
Load
売上日,
会員名,
商品コード,
Coalesce(キャンペーン割引率1,キャンペーン割引率2,0) as 割引率,
単価,
Coalesce(数量,0) as 数量
Resident sales_tmp;
11行目のCoalesceで数量が Null の場合は0にしておきます。
それを元にして
(単価 * 数量) * (1 – 割引率) as 割引後金額
として割引後金額が算出されます。

Coalesceは空文字では値があると判断と判断されるので、0値にはなりません。
なので、Nullがある可能性があるのであれば、SET NullInterpret = ”; を事前に入れておくなどの対策が必要ですね。
まとめ
Nullに関連するテクニックをご紹介しました。
ポイントは以下のとおりです。
手軽にできるNull関連テクニック
- NullAsValue … Set NullValue = … でNull値を指定の値に変換
- Set NullInterpret = …で、指定文字列をNull値に変換
- Coalesce(値1, 値2, …) で、Null以外の値を取得
2回に渡り、QlikのNull関連のテクニックをご紹介しました。
Nullや空文字の扱いをきちんとしておかないと、思わぬとところで足をすくわれることもありますので、日頃から意識しておきましょうね。
ではまた!
関連記事はこちら
QlikのNull問題 〜第1回 そのIsNull大丈夫?〜


