初めてのBIツール。Lookerのマッププロット記事をトレースしつつ、流れをまとめてみた。

Lookerの入門記事をなぞることで、ダッシュボード作成の超基本的な流れについて学びました。
2020.06.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、平野です。

データアナリティクス事業本部ではBIツールを扱うことも多いのですが、 私はBIツール全く触ったことないマンなので

をとこもすなるLookerといふものを、をむなもしてみんとて、するなり。

BIツールで何ができるのか、その全容について私が語れることはないのですが、 何はなくても可視化(図表の表示)かなということで、 インパクトありそうな以下の記事をトレースして、マップ上に地点をプロットしてみました。

Looker初心者が地図データを表示してみた #looker

以降はこの記事を「お手本記事」と表記します。 トレースしてみたことで、Lookerでダッシュボードを作る一通りの流れがわかったので、 その流れに沿ってやっていることを確認をしながら再度行った記録になります。

緯度経度を地図でマップする手順

結論として、以下のような手順で行えば目的は達せられそうです。

  • 緯度、経度、ラベル(名前)の3カラムをもつテーブルを用意する
  • テーブルを参照するConnectionを作る
  • プロジェクトを作る
  • Viewを作成する
  • Viewを参照するModelを作成する
  • ダッシュボード(ガワだけ)を作る
  • ダッシュボードにタイルとしてViewを登録する

緯度、経度、ラベル(名前)の3カラムをもつテーブルを用意する

Lookerは自分でデータを持たないので、これについてはLooker外のデータベースなどにテーブルを準備します。 Lookerから参照できる必要があるので、 ローカルに立てたDBではなくAmazon RDSなどを活用する方がラクです。

私は(たまたま先日試していたので)Snowflakeを使用しました。 どのDBを使うにしても、Lookerからselect * from "POINT_TABLE"のようなSQLで データが取得できる状況であれば問題ないです。

テーブルを参照するConnectionを作る

Looker外に情報元となるテーブルを準備できたらLooker側の操作に移ります。 ただここは各環境に大きく依存する部分なので詳細は割愛します。 Connection作成後の接続テストで成功すれば大丈夫かと思います。

プロジェクトを作る

後述するViewやModelはプロジェクトというものにに属すので、まずは自分のプロジェクトを作ります。

ポイントとしては、お手本記事でも行っている通り「Blank Project」でプロジェクトを作成するところです。 他の選択肢は、上手に使えたらラクだけど最初に選ぶとよくワカランってなるやつだと思います。 最初はできるだけ最小限な操作だけでやってみるのが大切だと思ってます、はい。

Viewを作成する

プロジェクト内にViewを作ります。 ここが一番大事なポイントです。

Viewはプロジェクトに属すので、プロジェクトを作成後に、その中で作成するのが正攻法なはずです。 まずはその方法でやってみます。

プロジェクトのメニューから作成を試してみる

画像のように、Viewの追加を行うことができそうです。

まず一番シンプルな「Create View」で行ってみると、

こんな感じで、全てがコメントアウトされたカラのView定義が作成されます。 つまりこの「Create View」は、このViewの定義を全てコードで書ける人向けに用意された選択肢のようです。 いずれはここから自分でコードを書けるようになりたいものですが、まずは見なかったことにします。

次に、「Create View From Table」を試してみます。 今回やろうとしていることは、まさに既存テーブルからViewを作成するということなので、これでいけそうです。

Connectionと接続するデータベースを選択します。

Viewができたので中身を見てみます。

viewの中身を表すコードが作成されました。 これが上の「Create View」した時に「さあコードを書いてくれ」と言われたところに書くべきものになります。

お手本記事でやっている方法

お手本記事では「SQL Runner」でViewのSQLを実行してみて、それをプロジェクトにインポートしています。 今回はたまたまテーブルと全く同一のViewなので「Create View From Table」ですんなりできましたが、 実際には「SQL Runner」を使った方が使い勝手は良さそうです。

追記 この部分についてはたまちゃん大先生からご指摘を頂きました。

「SQL Runner」からProjectにインポートするのは「派生テーブル」という機能になりまして、ちょっと特殊なものです。派生テーブルを使わない場合はこれは使いません。

SQL Runnerは派生テーブル(これも要勉強!)を作成するための機能であって、 少なくとも今回のように素直にテーブルをそのまま見るような用途で使用してしまうのは、Lookerの想定した操作ではないようです。 この辺も今後使いこなせるようになれるよう頑張ります。

マップ表示が可能なようにする

さて、お手本記事にて作成されたViewの定義と比べると、ほとんど同じものができていることが確認できます。 ので、ここからModelの作成に行きたいところなんですが、 実はこのViewからダッシュボードを作成しても、下記のような文言が表示され、 地図上にデータをプロットすることはできませんでした。

Geographic Data Required At least one dimension should be of type "location" or have a "map_layer_name" specified.

コードの差分を見てみると、

  dimension: location {
    type: location
    sql_latitude: ${TABLE}."LATITUDE" ;;
    sql_longitude: ${TABLE}."LONGITUDE" ;;
  }

という記述が必要そうということがわかります。 locationというタイプの情報として活用できるように、この記述が必要だと予想できます。 ということで、今回は、上記のlocationの設定をコードに追加してSaveしておきます。

view: sample_table_01 {
  sql_table_name: "PUBLIC"."SAMPLE_TABLE_01"
    ;;

  dimension: label {
    type: string
    sql: ${TABLE}."LABEL" ;;
  }

  dimension: latitude {
    type: number
    sql: ${TABLE}."LATITUDE" ;;
  }

  dimension: longitude {
    type: number
    sql: ${TABLE}."LONGITUDE" ;;
  }

  dimension: location {
    type: location
    sql_latitude: ${TABLE}."LATITUDE" ;;
    sql_longitude: ${TABLE}."LONGITUDE" ;;
  }
}

※自動的に生成されたcountに関する記述は不要だったので消しています。

なお、ここで少しハマったんですが、 お手本記事のようにSQL Runnerから作成したViewの場合、locationの所が ${TABLE}."latitude", ${TABLE}."longitude"のように小文字で出力されました。 Snowflake側ではカラム名を大文字で作っていたからか、 このままではlocationの情報が取得できませんでした。

Viewを参照するModelを作成する

次にプロジェクト内にModelを作成します。 Modelって何?と聞かれると、正直まだ立ち位置がよくわかっていません。 恐らく今回行っているような内容だとシンプルすぎて特にModelを意識することがないのだと思います。

作成手順はお手本記事の通りなのですが、最初ハマった所がありました。 画像のように、include/views/*.view.lkmlと記述されている場合、 このプロジェクトのviewsディレクトリ以下のViewしか探す対象に入らないようです。 言われてみれば当たり前なのですが、初めはViewが参照できずに困りました。

最終的なModelのコードです。

connection: "cm_hirano_connection"

include: "/views/*.view.lkml"                # include all views in the views/ folder in this project

explore: sample_table_01 {}

ダッシュボード(ガワだけ)を作る

Modelまで作成できたら、それを載せるダッシュボードを作成します。 ダッシュボードは、例えば自分のFolder内に作成できるので、ここに作成してみます。

これでカラのダッシュボードができました。

ダッシュボードにタイルとしてViewを登録する

ダッシュボードにViewを指定します。 やり方はお手本通りです。

DIMENSIONSの選択では、とりあえずLocationだけを選んでも地図上にプロットを表示させることができました。 やはりViewで定義したlocationの部分がマップ表示におかるキモであることがわかります。

タイルをSaveして完了です!

改めてデータを可視化するまでの流れ

一通りの流れが終わったので、改めて流れを確認します。

  • (Looker外部にデータを準備する)
  • テーブルを参照するConnectionを作る
  • プロジェクトを作る
  • Viewを作成する
  • Viewを参照するModelを作成する
  • ダッシュボード(ガワだけ)を作る
  • ダッシュボードにタイルとしてViewを登録する

まずはConnectionを作成して接続できることを確認し、 プロジェクトを作って中に可視化対象のデータを見れるViewとModelを作る。 最後にダッシュボードのタイルとしてViewを指定する。 というのが一通りの流れになるようです。

同じことの繰り返しですが、要素の包含関係という観点でまとめてみるとこんな感じです。

  • Connection
  • プロジェクト
    • View
    • Model
  • Folder
    • ダッシュボード
      • タイル

初めて触るものについてはこれらの要素の関係性が???な状態からスタートするので、 こうやってまとめてみるとだいぶスッキリしました。

まとめ

Lookerを使ってダッシュボードに情報のビジュアライズ(可視化)をやるところまでできました。 お手本をなぞっただけですが、Looker外部に置いたデータを参照して、 最終的に何かしらの図を出したいと思ったときに、 どのような手順を踏めばいいのかが整理できました。

ViewやModelを定義した部分のコードのことがわかると、 もっと色々なことができるようになりそうです!