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

「地図データをLooker(ルッカー)で表示してみたい」という想いから「初めてLookerを触った私が試行錯誤しつつ、どうにか地図を表示させるまで」をご紹介したいと思います。
2019.05.16

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

はじめに

こんにちは。DI部の大高です。

「地図データをLooker(ルッカー)で表示してみたい」という想いから「初めてLookerを触った私が試行錯誤しつつ、どうにか地図を表示させるまで」をご紹介したいと思います。

前提条件

LookerはBIツール・サービスであり、次世代のデータプラットフォームとして各種データソースを元にしてデータを可視化することができます。詳しくは以下の記事をご覧頂ければと思います。

次世代のデータプラットフォーム「Looker」機能概要まとめ #looker

このLookerの管理者権限(Admin)のユーザーを社内で作成してもらい、ログインしてみた、というのがスタート地点となります。

なお、わたしは他のBIツールはいくつか利用したことがあるのですが、Lookerは全くの初心者で 最初に説明書は読まないタイプ の為、以下の流れは「画面を触りながら試行錯誤して地図を表示させるまで」をまとめたものとなっております。

それでは順に参ります。

データソースの準備

以下の記事から、データソースとしてデータベースを作成する必要があると認識していたので、まずはAmazon RDSでPostgresqlサーバをサクッと作成しました。

Lookerの対応データソースについて #looker

なお、セキュリティーグループの設定については、以下のドキュメントからLookerインスタンスのリージョン用ホワイトリストを許可すれば良さそうだったので「Asia」向けのアドレスを許可しました。

Enabling Secure Database Access

インスタンスが用意できたら、サンプル用のデータベース、テーブルを準備しておきます。

-- データベースを作成 
--   "DBユーザー名"はRDS作成時に作成したデータベースユーザをしています。
--   必要に応じて適切なユーザを設定してください。
CREATE DATABASE looker
    WITH 
    OWNER = DBユーザー名
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;

-- テーブルを作成
CREATE TABLE looker.public.point_table
(
    id serial,
    latitude double precision,
    longitude double precision,
    label text,
    CONSTRAINT point_table_pkey PRIMARY KEY (id)
);

-- サンプルデータをインサート
INSERT INTO looker.public.point_table (latitude, longitude, label) VALUES (35.697207, 139.774745, '佐久間');
INSERT INTO looker.public.point_table (latitude, longitude, label) VALUES (35.694010, 139.777514, '岩本');
INSERT INTO looker.public.point_table (latitude, longitude, label) VALUES (35.693862, 139.777186, '橋本');

Connectionの設定

では、Lookerにログインして設定を始めます。まずはメニューの「Admin > Database > Connections」から「New Connection」ボタンをクリックしてデータベース接続設定を行います。

今回は以下の設定を行い、あとはデフォルトのままとしました。

Development Modeの有効化

プロジェクトの作成を行いたいので、まずは「Development Mode」を有効化します。メニューの「Develop」から「Development Mode」を有効にします。

プロジェクトの作成

次にメニューの「Develop > Manage LookML Projects」を開き、「New LookML Project」ボタンから新規にプロジェクトの作成を行います。

「Project Name」に任意のプロジェクト名を指定し、「Starting Point」を選択します。今回は「Blank Project」として空のプロジェクトを作成しました。

SQL RunnerからのSQLの実行

プロジェクトを作成したら、今度は「Develop > SQL Runner」を開き、クエリを記述して実行してみます。なお「CONNECTION」と「SCHEMA」は先程作成したものを指定しておきます。

無事にクエリが実行されると、結果が「RESULTS」に表示されます。

Viewのプロジェクトへの登録

結果が問題なければ右上の歯車アイコンから「Add to Project...」をクリックします。

ここでは今実行したクエリを「View」としてプロジェクトに追加することができます。「Project」に先程作成したプロジェクト名を、「View Name」に任意の名前を指定して「Add」ボタンで追加します。

追加すると、画面は「View」を追加したプロジェクトの画面へ遷移します。

ここでの「View」は以下のようになっています。

view: point_table_view {
  derived_table: {
    sql: SELECT id, latitude, longitude, label FROM public.point_table
      ;;
  }

  measure: count {
    type: count
    drill_fields: [detail*]
  }

  dimension: id {
    type: string
    sql: ${TABLE}.id ;;
  }

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

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

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

  dimension: location {
    type: location
    sql_latitude: ${TABLE}.latitude ;;
    sql_longitude: ${TABLE}.longitude ;;
  }

  set: detail {
    fields: [id, latitude, longitude, label, location]
  }
}

よく見ると自動で location という「location」型の「dimension」が追加されています。これにより、地図にポイントをプロットできるようになるようです。

Dimension, Filter, and Parameter Types

Modelの作成

作成した「View」を利用する為に今度は「Model」を作成します。「Add...」の右側の「+」ボタンから「Create Model」をクリックして「Model」を作成します。「Model」の名前は任意の名前を指定します。

「Model」を作成すると、画面右側で編集ができるようになるので、この「Model」から先程の「View」を参照できるように1行「explore」の行を追加します。また、接続設定で作成した「Connection」の名前を1行目の「connection」で指定しておきます。

connection: "ootaka_sandbox"

include: "*.view.lkml"                       # include all views in this project
# include: "my_dashboard.dashboard.lookml"   # include a LookML dashboard called my_dashboard

# # Select the views that should be a part of this model,
# # and define the joins that connect them together.
#
explore: point_table_view {}
# explore: order_items {
#   join: orders {
#     relationship: many_to_one
#     sql_on: ${orders.id} = ${order_items.order_id} ;;
#   }
#
#   join: users {
#     relationship: many_to_one
#     sql_on: ${users.id} = ${orders.user_id} ;;
#   }
# }

設定したら右上の「Save」ボタンで保存しておきます。

この時点で、ブラウザの画面をリフレッシュすると、メニューの「Explore」配下に、作成した「Model」と「View」が表示されるようになります。

ダッシュボードの作成

次にダッシュボードの作成です。メニューの「Browse」から自分の「Space」を開きます。

開いたら「Space」にダッシュボードを作成します。右上の「New」ボタンから「Dashboard...」を選択します。

ダッシュボード名を入力して「Create Dashboard」ボタンをクリックするとダッシュボード編集画面へ遷移します。

画面中央に「NEWTILE」ボタンがあるので、クリックして「Tile」を作成します。

まず始めに「Explore」の選択画面になるので、先程作成した「Point Table View」を選択します。

すると「Tile」の編集画面になります。

「DIMENTIONS」から利用したいものを選択して、右上の「RUN」ボタンから実行します。今回はすべて選択しました。

実行するとすぐに「VISUALIZATION」の箇所に地図が表示されました!

あとは微調整です。右上の歯車アイコンから「Points」タブを開き「Icon」を選択してマーカーアイコンにスタイルを変更します。

変更できたら、「Tile」の名前を設定して右上の「Save」から保存します。

ダッシュボードに「Tile」が追加されました!

あとはタイルの大きさやズームレベルを変更して、右上の「Done Editing」から編集を完了します。

表示結果

以上の流れでダッシュボードに地図を表示することができました。設定通り地図が表示されていますね。ちなみに地図はMapboxを利用したOpenStreetMapの地図のようです。

また、マーカーをクリックするとレコード内容が表示されています。

まとめ

以上、Lookerでの地図表示をするまでの一連の流れでした。もっとスマートに作成する方法もあるかと思いますが、「まずは地図データを表示してみる」という観点からご紹介させて頂きました。

この記事がどなたかのお役に立てば幸いです。それでは!