Lookerのデータを元にして、時折、Googleスプレッドシートで計算を実行する場合があると思いますが、LookerからGoogleスプレッドシートにデータを取り込むために、Lookを公開設定で
保存しなければならない問題におそらく直面しているのではないでしょうか。これもLookerからGoogleスプレッドシートにデータを取り込むための有用な手段ですが(Looker作成のGoogleスプレッドシートへのデータインポートスクリプトのヘルプセンターの記事を参照)、Looker APIを使用して実現もできます。何も書き直すことなく、Lookにアクセスして実行でき、これはとても素晴らしいところです。
Google AppsのスクリプトがURL Fetch Serviceを内蔵しており、これを利用すれば、自分たちのスプレッドシートから直接HTTPのリクエストを送信できます。
今回の例では、任意のLookの結果を取り込むことができるSheetsのカスタム関数を定義します。
Githubで、スクリプトの最新バージョンを見つけることができます。
function myFunction()
のダミー部分を削除できます。mycompany
の部分を、ご利用されているLookerのドメイン名に変更し、API credentials(クライアントIDとシークレット)を追記します。LOOKER_RUN_LOOK()
と入力します 。=LOOKER_RUN_LOOK(look_id, format, query_limit)
345
。1
はデータを返します。数値 2
は実行するSQL文を返します。デフォルト値は 1
(データ)です。5000
です。これで、以下の図のようにスプレッドシートでカスタム関数を使用できるようになります。
2番目のパラメーターには、1または2を入力できます。この関数では、1で結果が返ってきて、2だと実行するSQL文が返されます。
これで、このスプレッドシートでは、Lookerでアクセスできる全てのLookの結果を参照できます!
注: 次のスクリプトは、Looker 6.12以上のデフォルトAPIであるLooker API 3.1を使用しています。Looker API 3.0 を使用している場合は、アプリケーションコードを移行して新しいLooker APIバージョンを使用するためのヒント新しいAPIバージョンへの移行を参照してください。
// Replace this with your base domain e.g. https://mycompany.looker.com:19999/api/3.1
var BASE_URL = 'https://mycompany.looker.com:19999/api/3.1';
// Replace this with your API credentials
var CLIENT_ID = 'XXX';
var CLIENT_SECRET = 'XXX';
/**
* Returns the results or the sql of a Look
*
* @param {number} id The unique ID of the Look
* @param {number} opt_format 1 for csv, 2 for raw sql - defaults to csv (optional)
* @param {number} opt_limit the query limit - defaults to 5000 if empty (optional)
* @return The Look results data
* @customfunction
*/
function LOOKER_RUN_LOOK(id, opt_format, opt_limit) {
try {
var options = {
"method": "get",
"headers": {
"Authorization": "token " + login()
}
};
// set formatting to either csv or the raw sql query since sheets is limited
var formatting;
// convert param
switch (opt_format) {
case 1:
formatting = "csv";
break;
case 2:
formatting = "sql";
break;
default:
formatting = "csv";
}
// set a custom limit
var limit;
if(opt_limit) {
limit = opt_limit;
// else use the 5k default
} else if (opt_limit == -1) {
limit = -1;
} else {
limit = 5000;
}
// get request for the look
var response = UrlFetchApp.fetch(BASE_URL + "/looks/" + id + "/run/" + formatting + "?limit=" + limit, options);
// if it's csv, fill it in the cells, if it's the query, use one cell only, if not specified, throw error
if (opt_format == 1) {
return Utilities.parseCsv(response.getContentText());
} else if (opt_format == 2)
{
return response.getContentText();
}
else {
return Utilities.parseCsv(response.getContentText());
}
} catch (err) {
return "Uh oh! Something went wrong. Check your API credentials and if you're passing the correct parameters and that your Look exists!";
}
}
function login() {
try{
var post = {
'method': 'post'
};
var response = UrlFetchApp.fetch(BASE_URL + "/login?client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET, post);
return JSON.parse(response.getContentText()).access_token;
} catch(err) {
return "Could not login to Looker. " + err
}
}
Looker APIを使用しているため、さらに多くのユースケースがあります。
このGithubリポジトリには、同じパターンで形式で作成された関数がいくつか含まれています。自分でカスタム関数を追加することもできます。たとえば、基本的なHTTP GETリクエストは次のように記述できます。
function LOOKER_OTHER_ENDPOINT(input) {
var options = {
'method': 'get',
'headers': {
'Authorization': 'token ' + token
}
};
var response = UrlFetchApp.fetch("https://yourcompany.looker.com/this/that" + input, options);
return Utilities.parseCsv(response.getContentText())
}