GoogleスプレッドシートからLooker APIでLookを実行してデータをダウンロードする方法

Lookerのデータを元にして、時折、Googleスプレッドシートで計算を実行する場合があると思いますが、LookerからGoogleスプレッドシートにデータを取り込むために、Lookを公開設定で
保存しなければならない問題におそらく直面しているのではないでしょうか。これもLookerからGoogleスプレッドシートにデータを取り込むための有用な手段ですが(Looker作成のGoogleスプレッドシートへのデータインポートスクリプトのヘルプセンターの記事を参照)、Looker APIを使用して実現もできます。何も書き直すことなく、Lookにアクセスして実行でき、これはとても素晴らしいところです。

Google AppsのスクリプトURL Fetch Serviceを内蔵しており、これを利用すれば、自分たちのスプレッドシートから直接HTTPのリクエストを送信できます。

今回の例では、任意のLookの結果を取り込むことができるSheetsのカスタム関数を定義します。

Githubで、スクリプトの最新バージョンを見つけることができます。

手順

  1. Googleスプレッドシートを開き、 ツール > スクリプトエディター に移動します。以下のスクリプトをエディターにコピー&ペーストします。この時、function myFunction()のダミー部分を削除できます。
  2. スクリプト最上部にある、BASE_URLの値に記述されているmycompanyの部分を、ご利用されているLookerのドメイン名に変更し、API credentials(クライアントIDとシークレット)を追記します。
    注: シートにアクセスする全てのユーザーが同一のcredentialsにアクセスできるため、スクリプトに登録するcredentialのユーザーの権限を、適切に制限することが重要となります。
  3. save をクリックして、プロジェクトに名前を付けます。
  4. スプレッドシートに戻り、LOOKER_RUN_LOOK()と入力します 。

=LOOKER_RUN_LOOK(look_id, format, query_limit)

  • look_id数値型 )— LookのID ( 例:) 345
  • format数値型、オプション )—要求された形式。数値 1 はデータを返します。数値 2 は実行するSQL文を返します。デフォルト値は 1 (データ)です。
  • query_limit数値型、オプション )—クエリの制限。空の場合のデフォルト値は 5000です。

これで、以下の図のようにスプレッドシートでカスタム関数を使用できるようになります。
image

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())
 }

参考資料

1 Like