製品をチェック

CData Connect Cloud の詳細はコチラ

  30日間無償トライアルへ

Google Apps Script とAdobe Analytics データを連携

CData Connect Cloud を使ってGoogle Apps Script からAdobe Analytics データに接続します。

宮本航太
プロダクトスペシャリスト

最終更新日:2022-06-02
adobeanalytics ロゴ

CData

cloud ロゴ画像
Google Apps Script ロゴ

こんにちは!プロダクトスペシャリストの宮本です。

Google Apps Script を使えばGoogle スプレッドシート、Google ドキュメントといったGoogle のサービス内でカスタム機能を作成できます。CData Connect Cloud を使えば、Adobe Analytics を含むCData がサポートする100以上のすべてのデータソースのSQL Server インターフェースを利用できます。SQL Server プロトコルはGoogle Apps Script のJDBC サービスでネイティブにサポートされているので、Connect Cloud を活用すればご利用のGoogle サービスからAdobe Analytics リアルタイムデータにアクセスできます。

この記事では、Connect Cloud でAdobe Analytics に接続する方法を説明し、Google スプレッドシートでAdobe Analytics データを扱うためのサンプルスクリプトを提供します。

CData Connect Cloud とは?

CData Connect Cloud は、以下のような特徴を持ったクラウド型のリアルタイムデータ連携製品です。

  • SaaS やクラウドデータベースを中心とする150種類以上のデータソース
  • BI、アナリティクス、ETL、ローコードツールなど30種類以上のツールやアプリケーションから利用可能
  • リアルタイムのデータ接続に対応。データの複製を作る必要はありません
  • ノーコードでシンプルな設定

詳しくは、こちらの製品資料をご確認ください。

Connect Cloud アカウントの取得

以下のステップを実行するには、CData Connect Cloud のアカウントが必要になります。こちらから製品の詳しい情報とアカウント作成、30日間無償トライアルのご利用を開始できますので、ぜひご利用ください。


Connect Cloud からAdobe Analytics への接続

CData Connect Cloud では、直感的なクリック操作ベースのインターフェースを使ってデータソースに接続できます。

  1. Connect Cloud にログインし、 Add Connection をクリックします。 コネクションの追加
  2. Add Connection パネルから「Adobe Analytics」を選択します。 データソースの選択
  3. 必要な認証プロパティを入力し、Adobe Analytics に接続します。

    Adobe Analytics はOAuth 認証標準を利用しています。 OAuth 統合またはサービスアカウント統合で認証できます。OAuth を使って認証するには、アプリケーションを作成してOAuthClientId、OAuthClientSecret、およびCallbackURL 接続プロパティを取得しなければなりません。認証方法については、ヘルプドキュメントの「OAuth 認証の使用」を参照してください。

    GlobalCompanyIdの取得

    GlobalCompanyId は必須の接続プロパティです。Global Company ID がわからない場合は、Swagger UI のusers/me エンドポイントのリクエストURL で見つけることができます。Swagger UI にログインした後、ユーザーエンドポイントを展開し、「GET users/me」ボタンをクリックします。「Try it out」ボタンと「Execute」ボタンをクリックします。リクエストURL のusers/me エンドポイントの直前に表示されるGlobal Company ID をメモします。

    Report Suite Id の取得

    Report Suite ID (RSID)は必須の接続プロパティです。Adobe Analytics UI で、「管理者」->「レポートスイート」に進むと、名前の横にある識別子とともにレポートスイートのリストが表示されます。

    GlobalCompanyId、RSID、およびOAuth 接続プロパティを設定して、Adobe Analytics に接続してください。

    接続の設定(Salesforce の表示)
  4. Create & Test をクリックします。
  5. 「Add Adobe Analytics Connection」ページの「Permissions」タブに移動し、ユーザーベースのアクセス許可を更新します。 権限を更新

パーソナルアクセストークンの追加

OAuth 認証をサポートしていないサービス、アプリケーション、プラットフォーム、またはフレームワークから接続する場合は、認証に使用するパーソナルアクセストークン(PAT)を作成できます。きめ細かなアクセス管理を行うために、サービスごとに個別のPAT を作成するのがベストプラクティスです。

  1. Connect Cloud アプリの右上にあるユーザー名をクリックし、「Settings」をクリックします。
  2. 「Settings」ページで「Access Token」セクションにスクロールし、 Create PAT をクリックします。
  3. PAT の名前を入力して Create をクリックします。 新しいPAT を作成
  4. パーソナルアクセストークンは作成時にしか表示されないため、必ずコピーして安全に保存してください。

コネクションの設定が完了したら、Google Apps Script からAdobe Analytics データへの接続準備ができました。

Apps Script からAdobe Analytics データに接続

ここまでで、Connect Cloud でのAdobe Analytics のコネクション設定は完了していると思います。ここからは、Google Apps Script からConnect Cloud に接続して、Google スプレッドシートでAdobe Analytics データを扱います。

このセクションでは、スプレッドシートからAdobe Analytics データを取得する、スクリプトを呼び出すメニューオプション付きのスクリプトを作成していきます。本記事用に、各部分にコメントをつけたサンプルスクリプトを作成しました。サンプルスクリプトは、記事の最後に記載しています。

1.空のスクリプトを作成

Google スプレッドシート用のスクリプトを作るには、Google スプレッドシートのメニューから拡張機能 Apps Script をクリックします。

2.クラス変数の宣言

スクリプトで作成した関数で利用するためのクラス変数をいくつか作成します。

//replace the variables in this block with real values as needed
var address = 'tds.cdata.com:14333';
var user = 'CONNECT_USER'; // user@mydomain.com
var userPwd = 'CONNECT_USER_PAT';
var db = 'AdobeAnalytics1';

var dbUrl = 'jdbc:sqlserver://' + address + ';databaseName=' + db;

3.メニューオプションを追加

この関数はGoogle スプレッドシートに、作成した関数を呼び出すためのメニューオプションを追加します。

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActive();
  var menuItems = [
    {name:'Export data to a sheet', functionName: 'connectToAdobeAnalyticsData'}
  ];
  spreadsheet.addMenu('Adobe Analytics データ', menuItems);
} 
新しく追加したメニューオプション。

4.ヘルパー関数を作成

スプレッドシートの最初の空行を見つけるために、この関数を使用します。

/*
 * Finds the first empty row in a spreadsheet by scanning an array of columns
 * @return The row number of the first empty row.
 */
function getFirstEmptyRowByColumnArray(spreadSheet, column) {
  var column = spreadSheet.getRange(column + ":" + column);
  var values = column.getValues(); // get all data in one call
  var ct = 0;
  while ( values[ct] && values[ct][0] != "" ) {
    ct++;
  }
  return (ct+1);
}

5.Adobe Analytics データをスプレッドシートに書き込む関数を作成

以下の関数はGoogle Apps Script のJDBC 機能を使ってConnect Cloud に接続し、Adobe Analytics データを書き込み、データをSELECT してスプレッドシートにデータを読み込みます。スクリプトを実行すると、2つの入力ボックスが表示されます。 最初のボックスはユーザーに、データを保持するためのシート名を入力するよう求めます。スプレッドシートが存在しなければ、関数側で作成します。 シート選択用の入力ボックス

2つ目のボックスはユーザーに、読み込むAdobe Analytics テーブル名を入力するよう求めます。無効なテーブルを選択すると、エラーメッセージが表示され関数は終了します。 テーブル選択用の入力ボックス。

関数はメニューオプションとして使用するよう設計されていますが、スプレッドシートの式として使用するよう拡張することもできます。

/*
 * Reads data from a specified Adobe Analytics 'table' and writes it to the specified sheet.
 *    (If the specified sheet does not exist, it is created.)
 */
function connectToAdobeAnalyticsData() {
  var thisWorkbook = SpreadsheetApp.getActive();

  //select a sheet and create it if it does not exist
  var selectedSheet = Browser.inputBox('Which sheet would you like the data to post to?',Browser.Buttons.OK_CANCEL);
  if (selectedSheet == 'cancel')
    return;

  if (thisWorkbook.getSheetByName(selectedSheet) == null)
    thisWorkbook.insertSheet(selectedSheet);
  var resultSheet = thisWorkbook.getSheetByName(selectedSheet);
  var rowNum = 2;

  //select a Adobe Analytics 'table'
  var table = Browser.inputBox('Which table would you like to pull data from?',Browser.Buttons.OK_CANCEL);
  if (table == 'cancel')
    return;

  var name = Jdbc.getConnection(dbUrl, {
    user: user, 
    password: userPwd
	}	
  );

  //confirm that var table is a valid table/view
  var dbMetaData = name.getMetaData();
  var tableSet = dbMetaData.getTables(null, null, table, null);
  var validTable = false;
  while (tableSet.next()) {
    var tempTable = tableSet.getString(3);
    if (table.toUpperCase() == tempTable.toUpperCase()){
      table = tempTable;
      validTable = true;
      break;
    }
  } 
  tableSet.close();
  if (!validTable) {
    Browser.msgBox("Invalid table name: " + table, Browser.Buttons.OK);
    return;
  }

  var stmt = name.createStatement();

  var results = stmt.executeQuery('SELECT * FROM ' + table);
  var rsmd = results.getMetaData();
  var numCols = rsmd.getColumnCount();

  //if the sheet is empty, populate the first row with the headers
  var firstEmptyRow = getFirstEmptyRowByColumnArray(resultSheet, "A");
  if (firstEmptyRow == 1) {
    //collect column names
    var headers = new Array(new Array(numCols));
    for (var col = 0; col < numCols; col++){
      headers[0][col] = rsmd.getColumnName(col+1);
    }
    resultSheet.getRange(1, 1, headers.length, headers[0].length).setValues(headers);
  } else {
    rowNum = firstEmptyRow;
  }

  //write rows of Adobe Analytics データ to the sheet
  var values = new Array(new Array(numCols));
  while (results.next()) {
    for (var col = 0; col < numCols; col++) {
      values[0][col] = results.getString(col + 1);
    }
    resultSheet.getRange(rowNum, 1, 1, numCols).setValues(values);
    rowNum++;
  }

  results.close();
  stmt.close();
}
  

関数の処理が完了すると、スプレッドシートにAdobe Analytics データが読み込まれ、Google スプレッドシートの表計算、グラフ作成機能をどこでも自在に活用できます。


完全なGoogle Apps Script

//replace the variables in this block with real values as needed
var address = 'tds.cdata.com:14333';
var user = 'CONNECT_USER'; // user@mydomain.com
var userPwd = 'CONNECT_USER_PAT';
var db = 'AdobeAnalytics1';

var dbUrl = 'jdbc:sqlserver://' + address + ';databaseName=' + db;

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActive();
  var menuItems = [
    {name:'Write table data to a sheet', functionName: 'connectToAdobeAnalyticsData'}
  ];
  spreadsheet.addMenu('Adobe Analytics データ', menuItems);
}

/*
 * Finds the first empty row in a spreadsheet by scanning an array of columns
 * @return The row number of the first empty row.
 */
function getFirstEmptyRowByColumnArray(spreadSheet, column) {
  var column = spreadSheet.getRange(column + ":" + column);
  var values = column.getValues(); // get all data in one call
  var ct = 0;
  while ( values[ct] && values[ct][0] != "" ) {
    ct++;
  }
  return (ct+1);
}

/*
 * Reads data from a specified 'table' and writes it to the specified sheet.
 *    (If the specified sheet does not exist, it is created.)
 */
function connectToAdobeAnalyticsData() {
  var thisWorkbook = SpreadsheetApp.getActive();

  //select a sheet and create it if it does not exist
  var selectedSheet = Browser.inputBox('Which sheet would you like the data to post to?',Browser.Buttons.OK_CANCEL);
  if (selectedSheet == 'cancel')
    return;

  if (thisWorkbook.getSheetByName(selectedSheet) == null)
    thisWorkbook.insertSheet(selectedSheet);
  var resultSheet = thisWorkbook.getSheetByName(selectedSheet);
  var rowNum = 2;

  //select a Adobe Analytics 'table'
  var table = Browser.inputBox('Which table would you like to pull data from?',Browser.Buttons.OK_CANCEL);
  if (table == 'cancel')
    return;

  var name = Jdbc.getConnection(dbUrl, {
    user: user, 
    password: userPwd
	}
  );

  //confirm that var table is a valid table/view
  var dbMetaData = name.getMetaData();
  var tableSet = dbMetaData.getTables(null, null, table, null);
  var validTable = false;
  while (tableSet.next()) {
    var tempTable = tableSet.getString(3);
    if (table.toUpperCase() == tempTable.toUpperCase()){
      table = tempTable;
      validTable = true;
      break;
    }
  } 
  tableSet.close();
  if (!validTable) {
    Browser.msgBox("Invalid table name: " + table, Browser.Buttons.OK);
    return;
  }

  var stmt = name.createStatement();

  var results = stmt.executeQuery('SELECT * FROM ' + table);
  var rsmd = results.getMetaData();
  var numCols = rsmd.getColumnCount();

  //if the sheet is empty, populate the first row with the headers
  var firstEmptyRow = getFirstEmptyRowByColumnArray(resultSheet, "A");
  if (firstEmptyRow == 1) {
    //collect column names
    var headers = new Array(new Array(numCols));
    for (var col = 0; col < numCols; col++){
      headers[0][col] = rsmd.getColumnName(col+1);
    }
    resultSheet.getRange(1, 1, headers.length, headers[0].length).setValues(headers);
  } else {
    rowNum = firstEmptyRow;
  }

  //write rows of Adobe Analytics データ to the sheet
  var values = new Array(new Array(numCols));
  while (results.next()) {
    for (var col = 0; col < numCols; col++) {
      values[0][col] = results.getString(col + 1);
    }
    resultSheet.getRange(rowNum, 1, 1, numCols).setValues(values);
    rowNum++;
  }

  results.close();
  stmt.close();
}

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。