LookerはGoogle Sheetsへ直接データを出力することが可能です。
本記事において、よりスムーズに出力するための追加機能をご紹介します。(本記事は、弊社ヘルプドキュメントに記載内容の抄訳となります)
##Looker側の設定##
Lookerのレポート(以降、Lookと呼びます)を出力する方法は、こちらのガイドに記載がありますが、以下のステップとなります:
- Lookページにてギアアイコンをクリックし、"設定の編集"を選択します
- Public AccessをONに変更します
- 変更を保存します
- Google Spreadsheet用のURLをコピーします
- Google Spreadsheetのデータを反映したい左上のセルにURLを貼り付け、エンターキーを押します
##インポート機能の改良##
上記のURLには、Google Sheetsの組み込みImportXML機能が含まれています。ロード時間が長くなってしまうケースがあるため、以下のようなlookerFetchData関数を作成いただくことも可能です。
function lookerFetchData(url) {
url = url.replace(/(\/\w+\.)txt|html|csv|gsxml(\?.*)?/, "$1csv$2");
var csvString = UrlFetchApp.fetch(url).getContentText();
var dataIn = Utilities.parseCsv(csvString);
var dataOut = dataIn.map(function(row) {
return row.map(function(val) {
if (val == '') return '';
var dateMatch = /(\d{4})\-(\d{2})-*(\d{0,})/.exec(val);
while (dateMatch != null) {
// first index is full match
return new Date(dateMatch[1], dateMatch[2] - 1, dateMatch[3] || 1);
};
if (val.match(/[-a-zA-Z]/)) {
return String(val)
};
val = val.replace(/[^\d.]/g, '');
if (val.match(/[0-9.]+/))
return Number(val);
return Number(parseInt(val));
});
});
return dataOut;
}
Google Sheets内でこのスクリプトを利用するには:
- Sheetのメニューからツール > スクリプト・エディタを開きます
- 新規プロジェクトを作成します
- 上記スクリプトをスクリプト・エディタへ貼り付け保存します(自由に名前をつけて構いません)。スクリプト・エディタを閉じて、Google Sheetを再読込します。
-
ImportXML
関数をlookerFetchData
に置き換えます。
##自動更新スクリプト##
最終的に、Google Sheetが自動的にリフレッシュし、Lookerから自動的にデータを読み込むようにするために、以下のスクリプトを利用することも可能です:
function onOpen(){
var e=SpreadsheetApp.getActiveSpreadsheet();
var t=[{name:"Refresh This Sheet",functionName:"Refresh"},{name:"Refresh All Sheets",functionName:"RefreshAll"}];
e.addMenu("Looker",t)
}
function onInstall(e){
onOpen(e)
}
function Refresh(e){
var t=SpreadsheetApp.getActiveSheet();
if(typeof e!=="undefined"){
t=e
}
var n=t.getDataRange();
var r=find("ImportXML",n);
var y=find("lookerFetchData", n);
for(var i=0;i<r.length;i++){
r[i].setValue(r[i].getFormula().replace(/(.gsxml[^"]*)"/,".gsxml?apply_formatting=true&apply_vis=true&refresh="+(new Date).getTime()+'"'))
}
for(var i=0;i<y.length;i++){
y[i].setValue(y[i].getFormula().replace(/(.html[^"]*|.txt[^"]*)"/,".txt?apply_formatting=true&apply_vis=true&refresh="+(new Date).getTime()+'"'))
}
}
function RefreshAll(){
var e=SpreadsheetApp.getActiveSpreadsheet().getSheets();
for(var t=0;t<e.length;t++){
Refresh(e[t])
}
}
function find(e,t){
var n=t.getFormulas();
var r=[];
for(var i=0;i<n.length;i++){
for(var s=0;s<n[i].length;s++){
if(n[i][s].indexOf(e)>-1){
r.push(t.getCell(i+1,s+1))
}
}
}
return r
}
これを有効にするための手順は、Import関数の場合と同様です。
- Sheetのメニューからツール > スクリプト・エディタを開きます
- 新規プロジェクトを作成します
- 上記スクリプトをスクリプト・エディタへ貼り付け保存します(自由に名前をつけて構いません)。スクリプト・エディタを閉じて、Google Sheetを再読込します。