16
6

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 3 years have passed since last update.

RedashのデータをGoogleスプレッドシートに自動で反映する方法

Posted at

はじめに

Redashを使って取得したデータを時系列で比較したい時、今までは手作業で行っていました。
手作業だと取得し忘れたりなど地味に面倒なので、この作業を自動化できないかと考えたのがきっかけです。

手順

Googleスプレッドシートにベースとなるシートを作り、そのシートを定期的に複製することで、データをためていきます。

  1. RedashのデータをGoogleスプレッドシート用に調整
  2. GoogleスプレッドシートでRedashのデータを読み込む
  3. データの読み込み作業を自動化するスクリプトを設定
  4. 自動化した作業の繰り返しを設定

1. RedashのデータをGoogleスプレッドシート用に調整

Googleスプレッドシートに転記したいRedashデータを開き、Refresh Scheduleを設定します。
Refresh Scheduleは画面左下(下記画像の赤枠部分)の青文字から設定できます。

アートボード 1-6.png

2. GoogleスプレッドシートでRedashのデータを読み込む

Googleスプレッドシートを開き、IMPORTDATAを使ってRedashのデータを読み込みます。
任意のセルに=IMPORTDATA("RefreshのQuery API Key")を入力すると、RedashのデータがGoogleスプレッドシートに反映されるようになります。

RefreshのQuery API Keyの取得方法

  1. 画面右上の・・・をクリック
  2. 展開したメニューのShow API Keyをクリック
  3. 表示されたモーダルのResults in CSV format下部のURLをコピーすれば完了

アートボード 1-4.png

アートボード 1-3.png

3. データの読み込み作業を自動化するスクリプトを設定

Googleスプレッドシートのツールバーにあるツールから、スクリプトエディタをクリックします。

アートボード 2.png

Apps Scriptが表示されるので、画像の赤枠部分に以下のスクリプトを追加します。

アートボード 3.png

function myFunction() {
  var book = SpreadsheetApp.openById('[GoogleスプレッドシートのID]');
  var sheet1 = book.getSheetByName('[シート1(コピー元のシート)]');
  var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd');
  var lastRow = sheet1.getLastRow();
  var lastColumn = sheet1.getLastColumn();
  
  book.insertSheet(date,1);
  var sheet2 = book.getSheetByName(date);
  var newData = sheet1.getRange( 1 , 1 , lastRow , lastColumn ).getValues();
  sheet2.getRange( 1 , 1 , lastRow , lastColumn ).setValues(newData);
}

このスクリプトでは、以下を実行するようにしています。
※ 画像では以下実行内容に加えて、書式設定もコピーするように記述していますが、ここでは割愛します

  1. 「シート1」の後ろに新しいシートを挿入する
  2. 「シート1」の情報を新しく追加したシートにコピーする
  3. 新しく追加したシートの名前を日付(yyyyMMdd)の名称に変更する

4. 自動化した作業の繰り返しを設定

  1. Apps Scriptの左にある時計アイコンをクリック(トリガーページへ移動)
  2. ページ右下のトリガーを追加をクリック(モーダルが起動)
  3. イベントのソースを選択時間主導型を選択
  4. 時間ベースのトリガーのタイプを選択で任意のタイマーを選択
  5. 最後にタイマーの実行間隔を選ぶ

私は毎日定時で取得して欲しかったので、以下のような設定にしました。

  • 時間ベースのトリガーのタイプを選択:日付ベースのタイマー
  • 時刻を選択:午前 10 時~11 時
    ※ Redashの実行タイミングと被らないように1時間遅めの実行時間でセット

以上です。
これでRedashのデータをGoogleスプレッドシートに自動的に持ってくることができるようになります。

最後までお読みいただき、ありがとうございました。


お世話になったサイト

16
6
5

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
16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?