■目次
QlikViewでデータがNullの項目のみを対象に計算する方法
こんにちは。Lioです。
こちらは店舗ごとの売り上げデータなのですが、
flgという項目の中に値が入っていないレコードが存在しています。
この時、flgがNullのレコードのみを対象に計算を行うにはどのようにすればよいでしょうか?
ここではシンプルな方法を3つ紹介させていただきます。
1.Set分析で何かしらの値があるものを集計対象から除外する
Set分析とはQlik製品の集計において、特定の絞り込みを常に指定する方法です。
例えば、A店舗のみの売上の合計を求めたいならば、sum({<店舗={'A'}>} value)
というような数式になります。
これを「flgに何かしらの値があるものを集計対象から除外」に当てはめると、sum({$-<flg={"*"}>} value)
となります。
※Set分析の詳しい内容は以下を参照ください。
2.ロードスクリプトにてあらかじめNullのレコードに対して別のフラグを作成する
2つ目はQlikViewでのデータの主な取得方法を記述するロードスクリプトにて、あらかじめNullのレコードに対してフラグを作成する方法です。
・ロードスクリプト部分:Nullに対してhogeフラグを作成LOAD 店舗,
flg,
value,
if(len(flg)>=1,0,1) as hoge //もちろん、len()はisnullなどに代替可能です。
FROM Data_source;
・数式部分:hogeが1のレコードを対象に集計するSet分析Sum({<hoge={1}>} value)
3.Set分析を利用せずに数式内の条件分岐で対象を絞り込む
最後に一番シンプルな方法を紹介します。
これはExcelなどでも流用できる考え方です。
Sum(if(isnull(flg)=-1,value))
上記3つの方法をそれぞれ実装したイメージがこちらです。
全て正しく集計されているのがわかります。
まとめ(メリット・デメリット)
では、上記3パターンのどちらを実装したほうが良いのでしょうか?
これは利用シーンによって様々なので各々の想定されるメリット・デメリットを紹介いたします。
1.Set分析で何かしらの値があるものを集計対象から除外する
メリット:レコード数が多い場合に有効。
デメリット:Set分析を理解していない人は内容を把握できない
2.ロードスクリプトにてあらかじめNullのレコードに対して別のフラグを作成する
メリット:Set分析のみより数式の理解が易しい
デメリット:項目が増えることになるので、データサイズが大きくなる
3.Set分析を利用せずに数式内の条件分岐で対象を絞り込む
メリット:Qlik未経験の人でも内容が把握できる
デメリット:すべてのレコードに対してif文の処理が入るのでデータ量によって処理が重くなる
以上のことを踏まえて実装時に臨機応変に対応できると良いですね。