Lookerでパレート図を作ってみた #Looker

2023.08.17

Looker勉強中のikumiです。今回は、Lookerでパレート図を作成してみましたので、その手順について記載いたします。

パレート図の作成手順

ユースケース

今回はユーザーのデシル番号毎の売上金額と、その累積の構成比を作成することを想定して進めました。事前に『ユーザーID』と、『ユーザーごとの売上金額』『デシルNO』の3つカラムを持ったテーブルを用意します。

Viewファイルでディメンション&メジャーを定義

今回以下の通りViewファイルを定義しました。

dimension: user_id {
    primary_key: yes
    hidden: yes
    sql: ${TABLE}.user_id ;;
  }

  dimension: decile {
    label: "デシルNO"
    type: number
    sql: ${TABLE}.decile ;;
  }

  measure: user_num {
    label: "顧客数"
    type: count_distinct
    sql: ${user_id} ;;
  }

  measure: sales_total {
    type: sum
    sql: ${TABLE}.sale_price ;;
  }

  measure: sales_parcent {
    type: percent_of_total
    sql: ${sales_total} ;;
  }

  measure: sales_running {
    type: running_total
    sql: ${sales_total} ;;
  }

パレート図を作成するためには最終的にデシル毎の売上合計と、その累積の構成比のカラムが必要になるので、そのために定義していくことになりますが、ここでのポイントはメジャータイプで『percent_of_total』『running_total』を使用する点です。

前提として、sqlパラメータではWINDOW関数を使用できないので、累積などといった計算もできません。そのためLookerの事前定義されているメジャータイプをうまく使って計算をしていくことにしました。しかし、Lookerの事前定義されているメジャータイプでは累積の構成比を出すことができなかったので、この後のExploreでやや力業で計算することにしました(汗)

  • percent_of_total
    • 各行の値の、合計値に対する割合を算出
  • running_total
    • 各行の累計を算出

上記のメジャータイプは、データベース上で計算を行われるのではなくデータが返された後に画面上で計算を行うタイプとなりますので、他のmeasureでは参照できない(参照しても計算が正確ではない)値となりますので注意が必要です。

参考:(公式ヘルプ)メジャータイプについて

Exploreでカスタムフィールドを作成

前項で説明した通り、累積の構成比の値についてはカスタムフィールドで何とか作成していきますので、『各行の合計値』と『累積の構成比』の2つを作成します。

  • 合計値算出
    • 計算式 :${user_order_facts.sales_total} / ${user_order_facts.sales_parcent}
  • 累積の構成比
    • 計算式:( ${user_order_facts.sales_running} / ${合計値算出} )/ 100
    • フォーマット:割合
  • 実行結果

これでパレート図作成に必要なカラムが揃いました。

Exploreでビジュアライゼーションを作成

最後に、ビジュアライゼーションを整えていきます。

  • 縦棒グラフを選択する

  • 「編集 > Yタブ」で、累積の構成比を右軸のエリアにドラッグする

    • これで、累積の構成比が二軸になりました
  • 「系列タブ」で、累積の構成比をLineにする
    • この作業でぐっとパレートっぽくなります!
  • 不要なカラムを選択してグレーアウトにした後、「プロットタブ」で凡例を非表示にします
    • 画像では凡例がグレーアウトですが、ここをオンにすると凡例が消えます
  • パレート図の完成!

さいごに

いかがでしたでしょうか。かなりゴリ押しでパレート図を作成してしまいましたね。カスタムフィールドを使用すると、画面で選択されているフィールドしか使えないなど、グラフの表現に制限も出そうなので工夫が必要だと感じました。もう少しよいやり方がないか模索していきたいと思います!