はじめに
Redashを使って取得したデータを時系列で比較したい時、今までは手作業で行っていました。
手作業だと取得し忘れたりなど地味に面倒なので、この作業を自動化できないかと考えたのがきっかけです。
手順
Googleスプレッドシートにベースとなるシートを作り、そのシートを定期的に複製することで、データをためていきます。
- RedashのデータをGoogleスプレッドシート用に調整
- GoogleスプレッドシートでRedashのデータを読み込む
- データの読み込み作業を自動化するスクリプトを設定
- 自動化した作業の繰り返しを設定
1. RedashのデータをGoogleスプレッドシート用に調整
Googleスプレッドシートに転記したいRedashデータを開き、Refresh Schedule
を設定します。
Refresh Schedule
は画面左下(下記画像の赤枠部分)の青文字から設定できます。
2. GoogleスプレッドシートでRedashのデータを読み込む
Googleスプレッドシートを開き、IMPORTDATA
を使ってRedashのデータを読み込みます。
任意のセルに=IMPORTDATA("RefreshのQuery API Key")
を入力すると、RedashのデータがGoogleスプレッドシートに反映されるようになります。
RefreshのQuery API Keyの取得方法
- 画面右上の
・・・
をクリック - 展開したメニューの
Show API Key
をクリック - 表示されたモーダルの
Results in CSV format
下部のURLをコピーすれば完了
3. データの読み込み作業を自動化するスクリプトを設定
Googleスプレッドシートのツールバーにあるツール
から、スクリプトエディタ
をクリックします。
Apps Scriptが表示されるので、画像の赤枠部分に以下のスクリプトを追加します。
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」の情報を新しく追加したシートにコピーする
- 新しく追加したシートの名前を日付(yyyyMMdd)の名称に変更する
4. 自動化した作業の繰り返しを設定
- Apps Scriptの左にある時計アイコンをクリック(トリガーページへ移動)
- ページ右下の
トリガーを追加
をクリック(モーダルが起動) -
イベントのソースを選択
で時間主導型
を選択 -
時間ベースのトリガーのタイプを選択
で任意のタイマーを選択 - 最後にタイマーの実行間隔を選ぶ
私は毎日定時で取得して欲しかったので、以下のような設定にしました。
-
時間ベースのトリガーのタイプを選択
:日付ベースのタイマー -
時刻を選択
:午前 10 時~11 時
※ Redashの実行タイミングと被らないように1時間遅めの実行時間でセット
以上です。
これでRedashのデータをGoogleスプレッドシートに自動的に持ってくることができるようになります。
最後までお読みいただき、ありがとうございました。