SET分析再入門(SET分析の概要から、簡単な数式の作成まで)

SET分析再入門(SET分析の概要から、簡単な数式の作成まで)

Pocket

今回はQlikViewやQlik Senseの機能の中でも、難しいと言われることの多い「SET分析」について説明いたします。
SET分析を使うには、関数の中にさらにSET分析特有の式を書く必要があるため、慣れないうちは難しく感じます。
しかし、複雑な式も分解してみれば、基本的な式の組み合わせです。

この記事ではSET分析とは何なのか、SET分析の概要と基本的な使い方について解説いたします。
SET分析を使ったことのない方はもちろん、使ったことはあるがよく意味が分からずに使っているという方にもお勧めです。

なお、SET分析は指定方法が多岐に渡り、一つの記事ではまとめきれないため、何回かに分けて解説する予定です。今後の記事にもご期待ください。

SET分析とは

SET分析とは何なのか理解するために、まずはマニュアルを見てみましょう。
以下は、QlikViewヘルプの該当箇所からの引用です。
なお、SET分析はQlikViewでもQlik Senseでもおなじように使用できます。以下はQlikViewヘルプからの引用ですが、Qlik Senseヘルプにもおなじことが書かれています。
set 分析および set 数式 ‒ QlikView
set 分析および set 数式 ‒ Qlik Sense

set 分析を使用すると、現在の選択で定義された通常のセットとは異なるデータ値のセット (またはグループ) を定義できます。

QlikViewやQlik Senseでは、なにか値を選択するとその値に絞り込まれます。しかしSET分析を使用すると、いま選択されている値とは別の条件で値を絞り込めます。
下図をご覧ください。
introduction-to-set-analysis-101このアプリでは、データが2009年に絞り込まれています。
しかし、画面中央のテーブルを見るとすべての年が表示されています。(2009年の絞り込みが無視されています。)
さらに、画面右のテーブルを見ると2008年の値が表示されています。

このように、SET分析を使用すると現在の選択状態と関係ない条件で値を絞り込めます。
そのため、たとえば選択された値に関わらず、常に総合計を表示したい場合や、常に今年の値を表示したいといった場合に使用できます。
またこれは、異なる条件で絞り込んだ値を並行して使えるということですので、たとえば今年の値と昨年の値を比較する(前年比をもとめるなど)といった場合にも使用できます。

指定する際は、値の選択状態を数式として記述することになりますので、条件が複雑であればその分数式も複雑になります。
たとえば、”年が2009年または2010年で、商品がAで、顧客の年齢が30歳未満で…”といった条件を数式として記述することを考えると、とても長い数式になりそうだということが想像できるかと思います。

SET分析の難しさの一因はこの部分にあります。事実、マニュアルでも条件の記述方法の説明に大半が割かれています。


SET分析の前提

上記マニュアルのページに、SET分析を使用するための前提として、重要なことが2点書かれています。
以下はQlikViewヘルプの該当箇所からの引用です。

set 数式は、集計関数で使用される必要があります。この例では、集計関数は sum(Sales) です。
Set 数式は、チャートの数式にのみ使用可能で、スクリプト式には使用できません。

  • SET分析は、集計関数の中で使用します。
    SET分析は任意の条件を指定して値を集計するものです。
    そのため、Sum関数、Avg関数などの集計関数でのみ使用でき、Date関数など、その他の関数では使用できません。
  • SET分析は、ロードスクリプトでは使用できません。チャートの数式でのみ使用できます。
    SET分析は選択状態を制御する機能です。値を選択するのはユーザーインターフェース側の話ですので、ロードスクリプトでは使用できません。

Qlik Senseアプリのダウンロード

今回はベースとなるQlik Senseのアプリ(qvf形式)をあらかじめ用意してあります。以下からダウンロードしてください。
Zip形式で圧縮してあり、解凍するとqvfファイルが出てきます。
set-analysis.zip

QlikViewをお使いの方は、Zipファイルの中にExcelファイルを同梱してありますので、こちらからデータを取り込んでください。
「売上」のシートからデータを取り込んでください。
introduction-to-set-analysis-102introduction-to-set-analysis-103
Qlik Senseをお使いの方も、もし一からアプリを作成したい場合はExcelファイルからデータを取り込んでください。
introduction-to-set-analysis-104
それでは、アプリを開いてみましょう。
qvfファイルを、Qlik Sense Desktopにドラッグ&ドロップして開いたり、アプリ用のフォルダにコピーして開いてください。
アプリ用のフォルダのパスは以下のとおりです。
C:\Users\<ユーザー名>\Documents\Qlik\Sense\Apps
シートが1つありますので、このシートを開いてみてください。
introduction-to-set-analysis-105
「年」と「分類名1」のフィルタ、そして「売上金額」の集計を表示するテーブルがあります。
introduction-to-set-analysis-106
現時点ではSET分析を使用していない、いわゆる普通のアプリです。
値を選択すれば、その値で絞り込まれます。
introduction-to-set-analysis-107


SET分析の使用

それでは、SET分析を使用してみましょう。
まず、なにか値を選択している方は一旦すべて選択を解除して、「編集」ボタンをクリックしてください。
introduction-to-set-analysis-201
SET分析用に、テーブルにメジャーを追加します。
画面左側の「項目」パネルから「売上金額」を、テーブルの上にドラッグ&ドロップしてください。
introduction-to-set-analysis-202
「メジャーとして追加」→「Sum([売上金額])」を選択します。
introduction-to-set-analysis-203
画面右側の「プロパティ」パネルで、いま追加したメジャーのプロパティを開きます。
「数式」にそのまま数式を記述することもできますが、入力欄が小さいと入力しにくいため「数式エディタ」を使用しましょう。
「数式エディタを開く」をクリックします。
introduction-to-set-analysis-204
まずはもっとも簡単なSET分析の式を指定してみましょう。
数式に「{1}」と追加します。
Sum({1} [売上金額])
introduction-to-set-analysis-205設定後、画面右下の「適用」ボタンをクリックしてください。

動作を確認してみましょう。「完了」ボタンをクリックします。
introduction-to-set-analysis-206
画面右側の数式に注目してください。
「{1}」の指定は、そのとき選択された値をすべて無視する(常に総合計を表示する)という指定です。
フィルタで値を絞り込んでも、集計値はまったく変化せず、常に総合計が表示されていることが分かります。
introduction-to-set-analysis-207この指定はKPIチャートに、常に総合計を表示したいときに便利な機能です。

このように、SET分析の式はかならず波括弧{}で囲んで指定します。言い換えると、いま指定した「1」の部分を書き換えることで、さまざまな条件を指定できるということです。
波括弧{}で囲むというのは、SET分析共通のルールですので覚えておきましょう。

では、別の指定も試してみましょう。選択をすべて解除し、「編集」ボタンをクリックします。
introduction-to-set-analysis-208introduction-to-set-analysis-209
先ほど作成したSET分析の式を変更します。
数式エディタを開いて、波括弧{}の中を以下のように変更してください。
Sum({<年={2008}>} [売上金額])
introduction-to-set-analysis-210設定後、画面右下の「適用」ボタンをクリックしてください。

動作を確認してみましょう。「完了」ボタンをクリックします。
introduction-to-set-analysis-211
今回の指定は、常に2008年の値を表示するという指定です。
フィルタで年の値を変更しても、常に2008年の値が表示されることが分かります。
introduction-to-set-analysis-212introduction-to-set-analysis-213
この指定が、SET分析の一番基本となる型ですので覚えておきましょう。
この指定により、任意の条件を指定できます。波括弧{}の中だけ抜き出して書くと以下のようになります。
<項目名={条件値}>
括弧が2種類あって混乱しますが、これが基本の型ですのでこの形を忘れないようにしてください。

では、ほかの指定も試してみましょう。基本の型さえ覚えてしまえばあとはこれの応用です。
下図を参考に、さまざまな指定を試してみてください。
値を複数指定したいときは、,(カンマ)で区切って指定します。
Sum({<年={2008, 2009}>} [売上金額])
introduction-to-set-analysis-214この指定は、2008年と2009年に絞り込む指定です。
introduction-to-set-analysis-215
では、複数の項目にまたがった条件は、どのように指定したらいいでしょうか。
その場合は、以下のように条件式全体を,(カンマ)で区切って指定します。
Sum({<年={2008, 2009}, 分類名1={AV機器}>} [売上金額])
※分類名1の「1」は全角数値ですので注意してください。
introduction-to-set-analysis-216この指定は、2008年と2009年のAV機器に絞り込む指定です。
introduction-to-set-analysis-217

ここまで覚えてしまえば、SET分析の基礎は理解できたと言えるでしょう。
以下の基本の型を覚えていただき、あとは条件値や条件式全体を,(カンマ)で区切って複数指定していくだけです。
<項目名={条件値}>
SET分析はほかにもさまざまな指定ができるのですが、ここから先はまた別の記事にまとめようと思っています。


SET分析の括弧について

では、さいごにSET分析の括弧について触れておきます。

ここまで見てきて、SET分析の指定は括弧が多すぎると感じた方も、多いのではないでしょうか。
波括弧{}と山括弧<>を重ねて書くのはなぜなのか、条件値の指定のために、さらに波括弧{}で囲むのは冗長ではないかと。
これは構文の問題なので、慣れていただくしかないと言えばそれまでなのですが、SET分析の詳細を理解していくと、括弧も無駄についている訳ではなく、それぞれの括弧に意味があることが分かってきます。

条件値を囲む波括弧{}

まず、条件値を囲む波括弧{}についてです。
<項目名={条件値}>
実は条件値を囲む波括弧{}には、以下の意味があります。

波括弧{}なしの場合、項目名をあらわす
波括弧{}がない場合、項目名とみなされます。波括弧をつけずに指定することで項目同士の比較ができます。
<項目名1=項目名2>

波括弧{}ありの場合、波括弧{}内には、単純な値だけでなく検索式を指定できる
QlikViewやQlik Senseの検索機能(フィルタの虫眼鏡アイコンなど)では、大なり小なり(<>)やワイルドカード(*)が指定できます。SET分析の条件値もおなじように指定できます。
たとえば、以下のように指定すると年の値が「2010」未満という条件が指定できます。
<年={"<2010"}>
※大なり小なり(<>)やワイルドカード(*)を指定する場合、”(ダブルクォーテーション)で囲む必要があります。
introduction-to-set-analysis-218introduction-to-set-analysis-219
複数組み合わせて指定することもでき、たとえば2009以上、2011年以下という場合は以下のようになります。
<年={"<=2009>=2011"}>
ワイルドカード(*)を使用して、以下のように書くこともできます。
<年={"20*"}>


条件式を囲む山括弧<>

つづいて、条件式全体を囲む山括弧<>についてです。
{<年={2008}>}
この山括弧<>にも、きちんと意味があります。
今回は使用しませんでしたが、山括弧<>で囲んだ条件式を複数指定できます。
この指定は、OR条件を指定したい場合に有効です。
※AND条件は,(カンマ)区切りでよいため。

たとえば、以下のように指定すると2008年か、またはAV機器の値という意味になります。
{<年={2008}> + <分類名1={AV機器}>}


最後に…

最後に、今回学んだSET分析の基本をまとめておきます。
SET分析には、ほかにもさまざまな指定方法があり、さらに実践的な使い方もできます。
次回また紹介したいと思いますので、ぜひご期待ください。
お疲れ様でした。

  • SET分析は、集計関数の中で使用する。
  • SET分析は、ロードスクリプトでは使用できない。チャートの数式でのみ使用できる。
  • SET分析は、波括弧{}で囲んで指定する。
  • SET分析で条件式を指定する際の基本の型
    <項目名={条件値}>
  • 複数の条件値や、複数の条件式を,(カンマ)区切りで指定できる。
    <年={2008, 2009}>
    <年={2008, 2009}, 分類名1={AV機器}>
  • 条件値には、単純な値だけでなく大なり小なり(<>)やワイルドカード(*)を指定できる。
    <年={"<2010"}>
    <年={"20*"}>
  • 複数の条件式を指定し、OR条件を指定できる。
    <年={2008}> + <分類名1={AV機器}> 2008年またはAV機器


set 分析および set 数式 ‒ QlikView
https://help.qlik.com/ja-JP/qlikview/12.0/Subsystems/Client/Content/ChartFunctions/SetAnalysis/set-analysis-expressions.htm

set 分析および set 数式 ‒ Qlik Sense
https://help.qlik.com/ja-JP/sense/2.2/Subsystems/Hub/Content/ChartFunctions/SetAnalysis/set-analysis-expressions.htm