18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firebase Analytics+データポータルでダッシュボードをつくる

Last updated at Posted at 2019-10-23

Firebase Analytics のデータを
Google データポータル (旧: Data Studio) で表示したい場合、
まず Firebase Analytics のデータを BigQuery にインポートして加工する必要があります。

自由度は高いのですが、Google Analytics のようにはいかず、ちょっとややこしい SQL を書く必要があるので、
データポータルでデータソースを追加してポンというわけにはいかなくなりました。

なので、スクリーンビューやセッション数のようなよくある値を毎日集計してダッシュボード化するやりかたを紹介します。

前提

まず Firebase の プロジェクトの設定 > 統合 から BigQuery とリンクしておくことが必要です。

これで analytics_<ID> というデータセットに毎日 Analytics の生イベントデータが BigQuery のテーブルとしてインポートされるようになります。

日毎に集計する SQL

よくあるプラットホームごとの昨日のスクリーンビュー数やその他主要 KPI を集計する SQL を書いてみました:

collect_yesterday_events.sql
#standardSQL
WITH

-- 集計範囲 (この例では昨日分; 変更可)
event_range AS (
  SELECT
    DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) AS from_date,
    DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) AS to_date
),

-- 範囲の全イベント
all_events AS (
  SELECT 
    event_date,
    platform,
    user_pseudo_id,
    event_name
  FROM 
   `analytics_<あなたの Analytics の ID>.events_*`,
   event_range
WHERE
    _TABLE_SUFFIX
        BETWEEN
            FORMAT_DATE("%Y%m%d", event_range.from_date) 
        AND
            FORMAT_DATE("%Y%m%d", event_range.to_date)
), 

-- スクリーンビュー
screen_views AS (
SELECT
  event_date,
  platform,
  COUNT(*) screen_views
FROM
  all_events
WHERE
  event_name = 'screen_view'
GROUP BY
  event_date,
  platform
),

-- ユニークユーザー
unique_users AS (
SELECT
  event_date,
  platform,
  COUNT(DISTINCT user_pseudo_id) unique_users
FROM
  all_events
WHERE
  event_name = 'user_engagement'
GROUP BY
  event_date,
  platform
),

-- 新規ユーザー
new_users AS (
SELECT
  event_date,
  platform,
  COUNT(DISTINCT user_pseudo_id) new_users
FROM
  all_events
WHERE
  event_name = 'first_open'
GROUP BY
  event_date,
  platform
),

-- セッション
sessions AS (
SELECT
  event_date,
  platform,
  COUNT(*) sessions
FROM
  all_events
WHERE
  event_name = 'session_start'
GROUP BY
  event_date,
  platform
)

-- 結合
SELECT
  sv.event_date,
  sv.platform,
  sv.screen_views,
  uu.unique_users,
  nu.new_users,
  s.sessions
FROM
  screen_views sv
  INNER JOIN unique_users uu
        ON   sv.event_date = uu.event_date
        AND  sv.platform   = uu.platform
  INNER JOIN new_users nu
        ON   sv.event_date = nu.event_date
        AND  sv.platform   = nu.platform
  INNER JOIN sessions s
        ON   sv.event_date = s.event_date
        AND  sv.platform = s.platform
;

<あなたの Analytics の ID> の部分はインポートされた BigQuery テーブルを見て自分のを入れます。

これを単に実行すれば昨日のスクリーンビュー, ユニークユーザー, 新規ユーザー, セッションの数がプラットホームごとに集計されます:

他にイベントを取りたい場合は event_name あたりの条件を変更して真似して追加すれば OK です。

クエリの定期実行とテーブル作成

BigQuery ではクエリの定期実行をスケジュールし、自動でテーブルに結果を出力できます。今回は日毎の集計結果を日別テーブルに毎日保存することにします。

こうしておくと、データポータルで扱いやすくなりますし、毎回集計のクエリを発行するよりも転送量も節約することができます (一ヶ月分とかやるときは特に)。

まず Firebase Analytics でエクスポートされたデータセットと同じリソースと同じリージョンで集計用のデータセットを作成しておきます (たぶんリージョンをまたぐことができないので):

次にさきほどのクエリエディタ下にある クエリのスケジュール ボタンから スケジュールされたクエリの新規作成 でクエリを定期実行するようにしてみます:

クエリ結果の書き込み先テーブル名daily_{run_time|"%Y%m%d"} としておくと、
テーブルを daily_20191006 のように実行時の日付で日別テーブルを作成することができます。

上の設定の場合だと前日のデータのテーブルを作成しているので、run_time-24h して前日の日付で作成します。
(例: 実行日時が 2019-10-06 なら 20191005)

かくして日毎の集計テーブルができました。

データポータルでの表示

データポータルでダッシュボードを作る場合は、データソースとしてさっき作成した BigQuery テーブルを指定します:

このデータソースを使ってイベントの日にち (event_date) をディメンションに、評価したい値を指標にすると時系列のグラフを作成できます:

内訳ディメンションを platform にすれば iOS と Android のように、プラットホームごとの指標を並べて比較することもできます:

これでよくあるダッシュボードを作ることができますね。
必要な KPI を取得しておくようにすれば値を手軽にウォッチできるので便利です。

Slack で通知

あとは Slack で値を通知したりしても便利ですね。

このやり方についてはちょっと長くなるので別記事で紹介することにします

👉 つづく: https://qiita.com/mangano-ito/items/07993bbfea54988701ec

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?