こんにちは!Yokoです。
今回はQlikのパラメータ付き変数の第2弾!
同じ数式を「何度も書きたくない」という時に役立つ方法です。
皆さんは、同じ数式を何度も書きたくない時は、どんな方法を使いますか?
マスターアイテム!
というのも正解ではあるのですが、SET文の指定が微妙に異なる場合、そのバリエーションの分だけマスターアイテムが増えてしまいます。
そんな時は「変数をマスターアイテム的に使う」そして「$マジックでバリエーションにも対応する」という合わせ技で行きましょう!
ではさっそく…
今回作成するチャート
ある小売業で、数あるセールの中から、春セール、夏セール、秋セール、年末セールという季節毎に行われるセールのみを年度毎に比較する表を作成してみます。
春のセールであれば、基本数式は以下のようになります。
Sum({$<セール={'春セール'}>} 売上金額)
この数式の夏バージョン、秋バージョン…と数式を作成していけば実現できるのですが、
- 同じ数式を何度も書きたくない
- 将来、この数式に変更を加える可能性がある
といった場合、複数の数式を書くのは、生産性も良くないし、メンテナンスも大変です。
(これくらいの数式なら大したことはないのですが、皆さんはもっと複雑な数式を書いていると思いますので、そんなシーンをイメージしてみてくださいね)
こんなケースを想定して説明していきます。
生産性、メンテナンス性を考慮したアプローチ方法
前回の記事(Qlikの変数のパラメータ化を$マジックで 〜その1〜)では、数式の一部にパラメータ付き変数を利用しました。パラメータ付き変数は数式全体でも問題なく使えますので、チャートで使用する数式そのものを変数にぶち込んで使用してみます。
メジャーの数値書式の設定も面倒なので、数式で指定しておきます。
①変数定義
・パラメータ付き
・数値書式も指定
②メジャー数式
・変数でパラメータを指定
・メジャーを複製してパラメータだけを変更
・これを繰り返す
以上の方法で、作成していくことにします。
パラメータ付き変数の定義
パラメータ付き変数を以下のように定義します。
| 変数名 | 定義 |
|---|---|
| vMeasureSales | Num(Sum({$<セール={$1}>} 売上金額),’#,##0′) |
前回の記事でご説明しましたが、定義では“=”はつけません。
$1の箇所がパラメータですので、メジャー数式では$1 の箇所を指定することになります。
チャート作成
ストレートテーブルにて、以下のように設定します。
・軸
「年」を指定します。
・メジャー
まず、春セールを指定します(集計関数は「なし」です)。これができたら、このメジャーを複製して、夏セール、秋セール、年末セールを作成します。
| 数式 | ラベル |
|---|---|
| $(vMeasureSale(‘春セール’)) | 春セール |
| $(vMeasureSale(‘夏セール’)) | 夏セール |
| $(vMeasureSale(‘秋セール’)) | 秋セール |
| $(vMeasureSale(‘年末セール’)) | 年末セール |
はい、このとおりシンプルな設定で、目的のストレートテーブルが完成しました。

しかし、前回の記事を熟読された方は、$(=$(vMeasureSale(‘春セール’))) ではないの?と疑問に思うかもしれません。
実際、僕もそう思うのですが😅
メジャーの数式では、元々”=”をつけなくても数式とQlikは解釈してくれますので、$(=$(変数))としなくてもいいようです。というか、そのような指定をするとエラーになっちゃいますね。
ですので、以下のように覚えておきましょう。
パラメータ付き変数のメジャー定義
- 数式内のSET文で使用する場合は $(=$(変数))
- 数式全体で使用する時は$(変数)
留意点としては、この合計を求めるために
$(vMeasureSale('春セール','夏セール','秋セール','年末セール'))
というような指定はできません。$1に対応するパラメータ値は一つですので、上記のような指定をした場合は’春セール’のみが抽出されてしまいます。
よって、合計を求める場合は
$(vMeasureSale('春セール')) + $(vMeasureSale('夏セール')) + $(vMeasureSale('秋セール')) + $(vMeasureSale('年末セール'))
とした上で、数値書式の設定を行って下さい。
まとめ
2回に渡り、パラメータ付き変数について説明してきました。
パラメータ付き変数を数式内で複数使いたい場合は、$1だけではなく、$2, $3…を追加していけば問題ありません。
以上を応用すれば、変数を劇的に削減し、生産性・メンテナンス性に優れたアプリを作成することができます。
「こんな記事あったなあ」と思い出した時は、この記事を検索してコピペしてみて下さいね。
ではまた!


