QlikのNull問題 〜第2回 Nullに関連する3つの必須テクニック〜

こんにちは!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大丈夫?〜

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次