QuickSightでの分析の幅が広がるレベルアウェア計算(LAC)を理解する
データアナリティクス事業本部コンサルティングチーム・新納(にいの)です。
低コストでシンプルに可視化が行えることが強みのQuickSightですが、「もう少し踏み込んで分析をしたい…」と思う方もいらっしゃるのではないでしょうか。そんな方に朗報のレベルアウェア計算(level-aware calculations - LAC)について解説していきます。
レベルアウェア計算(LAC)を理解する
実際に試してみる前に、まずはレベルアウェア計算について理解することで今回のアップデートの嬉しさを100%フルパワーで享受できるようになります。
レベルアウェア計算とは
レベルアウェア計算とは、ウィンドウ関数と集計関数を使う際に関数を適用する粒度を指定できるQuickSightの機能です。集計関数に使えるLAC-A関数とウィンドウ関数に使えるLAC-W関数の二種類あります。LAC-W関数はこれまでLAA(レベルアウェア集計)と呼ばれていたものです。
Tableauに馴染みのある方であれば「LOD表現に似た概念だな」とピンとくるかもしれませんが、そうでない方からすると、なんだか分かったような分からないような気分になりますよね。この関数があると何がうれしいのか確認してみましょう。
レベルアウェア計算のうれしいところ
ディメンションとメジャー(測定)
レベルアウェア計算のパワーを体感する前に、分析には欠かせないディメンションとメジャー(QuickSightでは『測定』と呼ぶ)について理解しておきましょう。
- ディメンション:分析の切り口となる定性の値(例:ID、名前、日付など)
- 測定:分析の指標となる測定可能な数値(例:売上、点数など)
例えば「商品カテゴリごとの売上平均」だとディメンションは「商品カテゴリ」、測定は「売上平均」です。QuickSightに限らず、他のBIツールを使って分析をする上でも使われる概念ですので押さえておきましょう。
レベルアウェア計算が役立つとき
例として、以下のような1回の購入=1レコードとして蓄積される購買データがあるとします。
商品カテゴリ(category)ごとに売上(sales)の平均値を出してみましょう。ディメンションに商品カテゴリ、値に売上を配置することで簡単に算出できます。
今度は商品カテゴリからもっと粒度の細かいサブカテゴリをディメンションに追加するとどうなるでしょうか。以下のようにサブカテゴリごとの売上平均が算出されます。
ここで「サブカテゴリごとの売上平均も表示させつつ、カテゴリごとの売上平均も表示させたい!」と考えたとき、どうすればいいでしょうか。
今回のようにカテゴリとサブカテゴリがディメンションとして指定されている場合、サブカテゴリ単位での集計が実行されます。このサブカテゴリではなくカテゴリ単位で集計をさせたいとき、つまり、ディメンションと違う粒度で集計をさせたいときがレベルアウェア計算の出番です。
「レベルアウェア計算が役立つのはディメンションとは違った粒度で集計を行いたいとき」だと覚えておいてください。
レベルアウェア計算を試す
百聞は一見にしかず、ということで実際に手を動かしてレベルアウェア関数の理解を深めていきましょう。LAC-A関数とLAC-W関数の2種類を試します。
集計関数に使えるLAC-A関数
前項目の例にも使った購買データを使ってLAC-A関数を試してみましょう。サブカテゴリごとの売上平均が表示されている状態です。
まずは左上の追加ボタンから計算フィールドを追加します。
計算フィールドで集計関数を入力します。集計の粒度を2番目の引数に設定します。今回の例ではカテゴリごとの売上平均を集計するため、AVG関数の1番目の引数にsales(売上)を、2番目の引数にcategoryを指定しています。
avg(sales,[category])
計算フィールド名は任意の名前を入力して保存します。
作成した計算フィールドはフィールドリストに表示されます。これをドラッグ&ドロップでフィールドウェルの値部分に配置します。すると、カテゴリごとの売上平均が表に追加されました。
また、LAC-A関数を使うことでフィールドウェル上に無いディメンションを使って計算も可能です。
他にもLAC-A関数は以下の集計関数をサポートしています。
- avg
- count
- distinct_count
- max
- median
- min
- percentile
- percentileCont
- percentileDisc
- stdev
- stdevp
- sum
- var
- varp
ウィンドウ関数に使えるLAC-W関数
QuickSightはSQLでもよく使われるウィンドウ関数をサポートしています。LAC-W関数では第二引数にウィンドウやパーティションを指定可能です。
例えば、前項でも使った購買データをもとに、各顧客の注文の総数を計算してみましょう。1回しか注文したことがない顧客が多ければリピートしてもらえるようにキャンペーンを打つなどの施策に使えそうな分析です。
こういうケースに役立つのがLAC-W関数です。countOver関数を使うことで第二引数をパーティションとして、第一引数の数をカウントしてくれます。今回の例でいうと、cusotmer_id
ごとにorder_id
の回数をカウントします。PRE_AGG
はQuickSightでのビジュアル上での計算がされるよりも前に作成した関数で計算が行われるように指定する計算レベルです。
countOver({order_id},[{customer_id}],PRE_AGG)
ビジュアルタイプには垂直棒グラフを選択し、X軸のディメンションに先ほど作成した関数を、Y軸の測定にcustomer_idを同一の値で重複しないように「個別の値をカウント」を指定して設定します。このお店では10回注文したことがある人が一番多いようですね。
今回はPRE_AGG
を使用しましたが、他にもフィルタされる前に関数の計算を行うPRE_FILTER
の計算レベルがあります。
PRE_AGG
:ビジュアルで計算処理される前に事前に集計するPRE_FILTER
:ビジュアル上で設定されたフィルタが適用される前に集計する
各計算レベルの使いどころを理解するためには、QuickSightがどういった順番で設定を評価するのかもあわせてご参照ください。
また、LAC-W関数は他にも以下のような関数で利用可能です。
- avgOver
- countOver
- denseRank
- distinctCountOver
- minOver
- maxOver
- percentileRank
- Rank
- stdevOver
- stdevpOver
- sumOver
- varOver
- varpOver
まとめ
QuickSightでの可視化をもう少し踏み込んで行えるレベルアウェア計算のご紹介でした。Tableauユーザーでレベルアウェア計算と似た機能を持つLODに慣れ親しんだ方にとっては待望の機能ではないでしょうか。すこし複雑な概念ではありますが、レベルアウェア計算を理解することでより自由な粒度での分析が可能となります。この機会にぜひご活用ください。