ヤマダです。
11月になり、今年もあと2か月になりました。時の流れが早くて恐ろしいです。
さて今回はQlikのSET分析について触れようと思います。
SET分析はQlikを使用する上で避けては通れません。QlikView Ver11から並列ステートが実装され、できることが更に増えましたが、数式も複雑になりました。よくハマりました。
今回、SET分析の構文が新しくなりました。正確に言うと、新しい構文でも記載できるようになりました。
注意)新しい構文はQlikSense August 2022 のバージョン以降となります。
新旧SET分析の比較
従来のSET構文は関数内に記載しておりました。ここでは内部SET数式とします。
sum({<年={"2022"}>} 売上目標) - sum({<年={"2022"}>} 売上金額)
新しいSET構文は関数の外に記載できるようになりました。ここでは外部SET数式といいます。
外部SET数式は式の最初に記載し1回の記載にすることが可能です。
{<年={"2022"}>} sum(売上目標) - sum(売上金額)
QlikSenseのマスタアイテム機能にも適用することができます。
{<年={"2022"}>} マスタメジャー名
マスタメジャーに適用できるということは、使用頻度が更に上がりますね。
いやー、これ凄いことです。
もちろん並列ステートも対応しています。
内部SET数式:Sum({state1}金額)
外部SET数式:{state1}Sum(金額)
外部SET数式のスコープ
外部SET数式では式の最初に記載するため、範囲を括弧()で定義が可能です。
({<年={"2022"}>} count(distinct 商品)) - ({<年={"2021"}>} count(distinct 商品))
括弧を記載しないと式全体に影響を受けるため、常に括弧を記載した方がよさそうな。。。
外部SET数式、内部SET数式の混在パターンの継承
実際にはSET文を外部、内部で扱うことが多々あると思います。
混在するパターンでは、外部~内部の順で継承されます。想定されるいくつかのパターンを列挙します。
-
SET識別子($)がない場合
{<年={"2021"}>} Sum({<[商品名]={"キーボード","パソコン"}>} 金額)
外部SETで2021年を抽出後、内部SETで商品名でキーボード、パソコンを抽出した結果になります。
-
内部にSET識別子($)がある場合
{<年={"2021"}>} Sum({$<[商品名]={"キーボード","パソコン"}>} 金額)
内部にSET演算子がある場合は、外部の条件が適用されません。(年の条件は適用されない)
-
外部にSET識別子($)がある場合
{$<年={"2021"}>} Sum({<[商品名]={"キーボード","パソコン"}>} 金額)
外部にSET演算子がある場合はそのまま適用されます。
演算子(エレメント・セット・アサインメント)
外部SET数式と内部SET数式の条件のマージすることができます。演算子は内部SET数式で記載します。
- 演算子が無い場合
{<年={"2021"},[商品名]={"パソコン"}>} Sum({<[商品名]={"キーボード","パソコン"}>} 金額)
外部と内部に商品名がありますが、この場合は内部の条件が出来ようされます。
- 演算子(+-*/)がある場合
{<年={"2021"},[商品名]={"パソコン"}>} Sum({<[商品名]+={"キーボード","パソコン"}>} 金額)
内部の演算子に+がある場合は外部の条件と内部の条件をUNIONでマージします。(ベン図でいう論理和)*は論理積になります。使うのは論理積か論理和あたりでしょう。
Aggr関数
Aggr関数で外部SET数式を使用する場合は先頭に記載しましょう。
{<外部SET数式>} sum(aggr( count(XXX),Dim))
まとめ
外部SET数式が使用できることによって、数式の可読性が上がります。
執筆現在では最新バージョン(QlikSense August 2022)のみ使用可能ですが、製品のバージョンアップを検討している方は頭の片隅に入れておいてください。内部SET数式のままでも問題ないですが、マスタメジャー機能と外部SET数式を利用した設計で保守性は上がると思います。
本日は以上となります~