Google AnaliticsによるKPI計測の自動化

# 対象
- Google Analiticsを利用し、KPIを計測している
- Googleスプレッドシートに、KPIを**手入力**している

# 目標
- デイリーで、GoogleスプレッドシートにKPIを自動的に計測する

### 前提
- 前日（00:00～23:59）のKPIが対象
- 1日1度のみ自動的に計測（例：出社前の時間など）

# おおまかな手順
1. [Google AnalyticsアドオンをGoogleスプレッドシートにインストール](#google-analytics%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3%E3%82%92google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
2. [Google Analyticsアドオンを利用してKPIを取得](#google-analytics%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6kpi%E3%82%92%E5%8F%96%E5%BE%97)
3. [KPIの取得をスケジュール化](#kpi%E3%81%AE%E5%8F%96%E5%BE%97%E3%82%92%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%8C%96)
4. [取得したKPIをGAS(Google Apps Script)を利用して、サマリーシートに出力](#%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9Fkpi%E3%82%92gasgoogle-apps-script%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B5%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E5%87%BA%E5%8A%9B)
5. [GASの実行をスケジュール化](#gas%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%82%92%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%8C%96)

## Google AnalyticsアドオンをGoogleスプレッドシートにインストール
具体的なインストール手順や簡単な利用方法は、すでにまとまっているサイトがあるため割愛します。
個人的には、[こちらのサイト](http://tonari-it.com/google-analytics-spreadsheet/)がわかりやすいのでおすすめです。

## Google Analyticsアドオンを利用してKPIを取得
例として、以下KPI（WebサイトのKPI計測を想定）を取得します。
1. DAU（Daily Active Users）
2. WAU（Weekly Active Users）
3. MAU（Monthly Active Users）
4. ページビュー
5. セッション

「Report Configuration」シートの各設定は以下の通りです。
**「View (Profile) ID / ids」は環境により異なります。**

| Report Name | Web_1dayUsers | Web_7dayUsers | Web_30dayUsers | Web_pv_sessions |
|:-----------------|:-----------------|:-----------------|:-----------------|:-----------------|
| Type | core | core | core | core |
| View (Profile) ID / ids | ga:XXXXXXX | ga:XXXXXXX | ga:XXXXXXX | ga:XXXXXXX |
| Start Date | =TODAY()-1 | =TODAY()-1 | =TODAY()-1 | =TODAY()-1 |
| End Date | =TODAY()-1 | =TODAY()-1 | =TODAY()-1 | =TODAY()-1 |
| Last N Days | | | | |
| Metrics | ga:1dayUsers | ga:7dayUsers | ga:30dayUsers | ga:pageviews <br> ga:sessions|
| Dimensions | ga:date | ga:date | ga:date | ga:date |

あとは、メニュー「アドオン＞Google Analytics」から「Run reports」を選択します。
![sc_ga_addon_run_reports.png](https://qiita-image-store.s3.amazonaws.com/0/128800/a1bdb832-258d-a659-2cf3-f1a2bfe5d01d.png)


問題なければ以下の画面が表示され、「Web_1dayUsers」、「Web_7dayUsers」、「Web_30dayUsers」、「Web_pv_sessions」シートが作成されます。
![sc_ga_addon_run_reports_success.png](https://qiita-image-store.s3.amazonaws.com/0/128800/b3cabaf9-c75c-a151-7cc5-62b333f9f91c.png)

作成された各シートを参照し、正常にKPIが取得できていることを確認します。
![image](https://qiita-image-store.s3.amazonaws.com/0/128800/5671a22f-8ca5-58f2-b9d8-a2c2590238c5.png)

![sc_ga_addon_run_reports_web_1dayusers.png](https://qiita-image-store.s3.amazonaws.com/0/128800/e4fb91b3-ed3e-cb0f-b194-0071ecbf8909.png)


## KPIの取得をスケジュール化
メニュー「アドオン＞Google Analytics」から「Schedule reports」を選択してください。
![sc_ga_addon_schedule_reports.png](https://qiita-image-store.s3.amazonaws.com/0/128800/abacffbc-ddb8-a18f-200f-513dc2ee3ab3.png)

設定画面が開きます。
今回は、以下を設定します。
![sc_ga_addon_schedule_reports_setting.png](https://qiita-image-store.s3.amazonaws.com/0/128800/44444bc7-86b7-7d5a-ec25-0078723d3320.png)


| Enable reports to run automatically | Schedule reports to run | between |
|:-----------------|:-----------------|:-----------------|
| チェック | every day | 5 a.m. - 6 a.m. |

「Save」ボタンを押すとスケジュール登録完了です。

## 取得したKPIをGAS(Google Apps Script)を利用して、サマリーシートに出力
KPIのサマリーシートとして、「Daily_KPI_2017」シートを作成します。
内容は、以下ヘッダと日付を入力します。

| | A | B | C | E | E | F |
|:-----------------|:-----------------|:-----------------|:-----------------|:-----------------|:-----------------|:-----------------|
| 1 | Web KPI | | | | | |
| 2 | Date | DAU | WAU | MAU | ページビュー | セッション |
| 3 | 2017/01/01 | | | | | |
| 4 | 2017/01/02 | | | | | |
| 5 | 2017/01/03 | | | | | |
| ... | ... | | | | | |
| 367 | 2017/12/31 | | | | | |

次にGASを作成します。
メニュー「ツール＞スクリプト エディタ...」を選択します。
![sc_tool_gas.png](https://qiita-image-store.s3.amazonaws.com/0/128800/cd79f2af-99e5-9f78-a9cf-ba8d15b703bd.png)

新規作成の場合は、以下のように無題のプロジェクトが開かれます。
![sc_gas_new.png](https://qiita-image-store.s3.amazonaws.com/0/128800/c388e891-454f-41a0-218d-c70a4744b52a.png)

以下、サマリーシート「Daily_KPI_2017」に、KPIを出力するためのGASコードです。なお具体的なGASの記法などは[リファレンス](https://developers.google.com/apps-script/guides/sheets)やググれば色々参考となるサイトが見つかるので、そちらを参照ください。

```gas:Code.gs
function kpiFunction() {
  // 別シート参照
  var sheet_1dayUsers = SpreadsheetApp.getActive().getSheetByName('Web_1dayUsers');
  var sheet_7dayUsers = SpreadsheetApp.getActive().getSheetByName('Web_7dayUsers');
  var sheet_30dayUsers = SpreadsheetApp.getActive().getSheetByName('Web_30dayUsers');
  var sheet_pv_sessions = SpreadsheetApp.getActive().getSheetByName('Web_pv_sessions');
  var sheet_Daily_KPI_2017 = SpreadsheetApp.getActive().getSheetByName('Daily_KPI_2017');
  // 各KPIの値を取得
  var value_1dayUsers = sheet_1dayUsers.getRange("B16").getValue();// 固定セル取得
  var value_7dayUsers = sheet_7dayUsers.getRange("B16").getValue();
  var value_30dayUsers = sheet_30dayUsers.getRange("B16").getValue();
  var value_pv_sessions = sheet_pv_sessions.getRange(16, 2, 1, 2).getValues();// セルB16, C16取得
  var value_total_date = sheet_Daily_KPI_2017.getRange(3, 1, 365, 1).getValues();// セルA3, A368取得
  // 今日の日付取得
  var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd");
  
  var target_row = 0;
  for(i = 0; i < 365; i++){
    var date = Utilities.formatDate(new Date(value_total_date[i]), "JST", "yyyy/MM/dd");
    if(today == date){// KPI対象日は昨日の日付
      // KPIデータ出力対象となる行：+2(ヘッダ分)
      target_row = i + 2;
      break;
    }
  }
  
  // KPIを対象スプレッドシートに出力
  sheet_Daily_KPI_2017.getRange("B" + target_row).setValue(value_1dayUsers);
  sheet_Daily_KPI_2017.getRange("C" + target_row).setValue(value_7dayUsers);
  sheet_Daily_KPI_2017.getRange("D" + target_row).setValue(value_30dayUsers);
  sheet_Daily_KPI_2017.getRange("E" + target_row).setValue(value_pv_sessions[0][0]);
  sheet_Daily_KPI_2017.getRange("F" + target_row).setValue(value_pv_sessions[0][1]);
}
```

ファイルを保存後、スクリプトが正常に動作するか確認します。
ツールバーメニュー「実行」を選択します。
![sc_gas_run.png](https://qiita-image-store.s3.amazonaws.com/0/128800/36cb3b31-42e3-51e2-2f9a-7b68c560a1c6.png)

例えば2017/01/16に実行した場合、サマリーシート「Daily_KPI_2017」のDate列「2017/01/15」の各KPIが正常に出力されていれば問題ありません。
![sc_gas_run_ex.png](https://qiita-image-store.s3.amazonaws.com/0/128800/ac9f9d8c-cb14-5e8a-0527-56f0564257a0.png)


## GASの実行をスケジュール化
最後に作成したGASをデイリーで実行するためトリガーを登録します。
メニュー「リソース＞現在のプロジェクトのトリガー」を選択します。
![sc_gas_resouce_triger.png](https://qiita-image-store.s3.amazonaws.com/0/128800/84634979-9552-1081-549d-3e9079a74ab7.png)

トリガーの設定画面が表示されるので以下設定します。

| 実行 |
|:-----------------|
| kpiFunction |

| イベント |
|:-----------------|
| 時間主導型 |
| 日タイマー |
| 午前6時～7時 |

![sc_gas_triger_setting.png](https://qiita-image-store.s3.amazonaws.com/0/128800/399ab63a-bf12-b8e0-d0dd-947dc332cb94.png)

保存ボタンを選択し、トリガーを保存します。

以上で、デイリー毎にGoogleスプレッドシートへ自動的にKPIを出力する設定は完了です。
翌日、サマリーシートへ正常にKPIが出力されていることや変更履歴に問題がないか確認します。

#### イベント内容とスケジュール

| イベント内容 | 実行日時（毎日） |
|:-----------------|:-----------------|
| Google AnalyticsアドオンによるKPIの計測 | 午前5時～6時 |
| GASによるサマリーシートへのKPIの出力 | 午前6時～7時 |

####