Qlikの変数のパラメータ化を$マジックで 〜その2〜

こんにちは!Yokoです。
今回はQlikのパラメータ付き変数の第2弾!
同じ数式を「何度も書きたくない」という時に役立つ方法です。
皆さんは、同じ数式を何度も書きたくない時は、どんな方法を使いますか?
マスターアイテム!
というのも正解ではあるのですが、SET文の指定が微妙に異なる場合、そのバリエーションの分だけマスターアイテムが増えてしまいます。
そんな時は「変数をマスターアイテム的に使う」そして「$マジックでバリエーションにも対応する」という合わせ技で行きましょう!
ではさっそく…

目次

今回作成するチャート

ある小売業で、数あるセールの中から、春セール、夏セール、秋セール、年末セールという季節毎に行われるセールのみを年度毎に比較する表を作成してみます。
春のセールであれば、基本数式は以下のようになります。

Sum({$<セール={'春セール'}>} 売上金額)

この数式の夏バージョン、秋バージョン…と数式を作成していけば実現できるのですが、

  • 同じ数式を何度も書きたくない
  • 将来、この数式に変更を加える可能性がある

といった場合、複数の数式を書くのは、生産性も良くないし、メンテナンスも大変です。
(これくらいの数式なら大したことはないのですが、皆さんはもっと複雑な数式を書いていると思いますので、そんなシーンをイメージしてみてくださいね)
こんなケースを想定して説明していきます。

生産性、メンテナンス性を考慮したアプローチ方法

前回の記事(Qlikの変数のパラメータ化を$マジックで 〜その1〜)では、数式の一部にパラメータ付き変数を利用しました。パラメータ付き変数は数式全体でも問題なく使えますので、チャートで使用する数式そのものを変数にぶち込んで使用してみます。
メジャーの数値書式の設定も面倒なので、数式で指定しておきます。

①変数定義
 ・パラメータ付き
 ・数値書式も指定

②メジャー数式
 ・変数でパラメータを指定
 ・メジャーを複製してパラメータだけを変更
 ・これを繰り返す

以上の方法で、作成していくことにします。

パラメータ付き変数の定義

パラメータ付き変数を以下のように定義します。

変数名定義
vMeasureSalesNum(Sum({$<セール={$1}>} 売上金額),’#,##0′)

前回の記事でご説明しましたが、定義では“=”はつけません
$1の箇所がパラメータですので、メジャー数式では$1 の箇所を指定することになります。

チャート作成

ストレートテーブルにて、以下のように設定します。


「年」を指定します。

・メジャー
まず、春セールを指定します(集計関数は「なし」です)。これができたら、このメジャーを複製して、夏セール、秋セール、年末セールを作成します。

数式ラベル
$(vMeasureSale(‘春セール’))春セール
$(vMeasureSale(‘夏セール’))夏セール
$(vMeasureSale(‘秋セール’))秋セール
$(vMeasureSale(‘年末セール’))年末セール

はい、このとおりシンプルな設定で、目的のストレートテーブルが完成しました。


しかし、前回の記事を熟読された方は、$(=$(vMeasureSale(‘春セール’))) ではないの?と疑問に思うかもしれません。
実際、僕もそう思うのですが😅
メジャーの数式では、元々”=”をつけなくても数式とQlikは解釈してくれますので、$(=$(変数))としなくてもいいようです。というか、そのような指定をするとエラーになっちゃいますね。
ですので、以下のように覚えておきましょう。

パラメータ付き変数のメジャー定義

  • 数式内のSET文で使用する場合は $(=$(変数))
  • 数式全体で使用する時は$(変数)

留意点としては、この合計を求めるために

$(vMeasureSale('春セール','夏セール','秋セール','年末セール'))

というような指定はできません。$1に対応するパラメータ値は一つですので、上記のような指定をした場合は’春セール’のみが抽出されてしまいます。
よって、合計を求める場合は

$(vMeasureSale('春セール')) + $(vMeasureSale('夏セール')) + $(vMeasureSale('秋セール')) + $(vMeasureSale('年末セール'))

とした上で、数値書式の設定を行って下さい。

まとめ

2回に渡り、パラメータ付き変数について説明してきました。
パラメータ付き変数を数式内で複数使いたい場合は、$1だけではなく、$2, $3…を追加していけば問題ありません。
以上を応用すれば、変数を劇的に削減し、生産性・メンテナンス性に優れたアプリを作成することができます。
「こんな記事あったなあ」と思い出した時は、この記事を検索してコピペしてみて下さいね。

ではまた!

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

この記事を書いた人

目次