コネクテッド シートを使用する

コネクテッド シート は、Google スプレッドシート内で BigQuery と Looker のデータを直接分析できる Google スプレッドシートの機能です。スプレッドシート サービスを使用して、プログラムでコネクテッド シートにアクセスします。

コネクテッド シートの一般的な操作

DataSource クラスとオブジェクトを使用して、BigQuery または Looker に接続してデータを分析します。次の表に、最も一般的な DataSource アクションと、Google Apps Script で作成する方法を示します。

アクション Apps Script クラス 使用するメソッド
シートをサポートされているデータソースに接続する DataSourceSpec SpreadsheetApp.newDataSourceSpec()
データソースを選択 DataSource Spreadsheet.insertDataSourceSheet().getDataSource()
データソースシートを追加する DataSourceSheet Spreadsheet.insertDataSourceSheet()
ピボット テーブルを追加する DataSourcePivotTable Range.insertDataSourcePivotTable()
データを抽出する DataSourceTable Range.insertDataSourceTable()
数式を使用する DataSourceFormula Range.setFormula()
グラフを追加する DataSourceChart Sheet.insertDataSourceChart()

必要な認証スコープを追加する

BigQuery データにアクセスするには、Apps Script コードに enableBigQueryExecution() メソッドを含めます。このメソッドにより、必要な bigquery.readonly OAuth スコープが Apps Script プロジェクトに追加されます。

次のサンプルは、関数内で呼び出される SpreadsheetApp.enableBigQueryExecution() メソッドを示しています。

function addDataSource() {
  SpreadsheetApp.enableBigQueryExecution();
  var spreadsheet = SpreadsheetApp.getActive();
  }

Looker データにアクセスするには、Apps Script コードに enableLookerExecution() メソッドを含めます。Apps Script で Looker にアクセスすると、既存の Google アカウントと Looker のリンクが再利用されます。

次のサンプルは、関数内で呼び出される SpreadsheetApp.enableLookerExecution() メソッドを示しています。

function addDataSource() {
  SpreadsheetApp.enableLookerExecution();
  var spreadsheet = SpreadsheetApp.getActive();
  }

マニフェスト ファイルに OAuth スコープを追加する

BigQuery に接続する場合、コードで使用されている関数に基づいて、ほとんどの OAuth スコープがマニフェスト ファイルに自動的に追加されます。特定の BigQuery データにアクセスするために追加の スコープが必要な場合は、 明示的なスコープを設定できます

たとえば、Google ドライブでホストされている BigQuery データをクエリするには、マニフェスト ファイルに Drive OAuth スコープを追加する必要があります。

次のサンプルは、マニフェスト ファイルの oauthScopes 部分を示しています。最小限必要な spreadsheetbigquery.readonly OAuth スコープに加えて、Drive OAuth スコープを追加します。

{ ...
  "oauthScopes": [
    "https://www.googleapis.com/auth/bigquery.readonly",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/drive" ],
... }

例: データソース オブジェクトを作成して更新する

次の例は、データソースを追加し、データソースからデータソース オブジェクトを作成し、データソース オブジェクトを更新して、実行ステータスを取得する方法を示しています。

データソースを追加する

次の例は、BigQuery データソースと Looker データソースをそれぞれ追加する方法を示しています。

BigQuery

BigQuery データソースをスプレッドシートに追加するには、データソース仕様を使用してデータソースシートを挿入します。データソースシートは自動的に更新され、プレビュー データが取得されます。

下記は、有効な Google Cloud プロジェクト ID に置き換えてください。<YOUR_PROJECT_ID>

// For operations that fetch data from BigQuery, enableBigQueryExecution() must be called.
SpreadsheetApp.enableBigQueryExecution();
var spreadsheet = SpreadsheetApp.create('Test connected sheets');
Logger.log('New test spreadsheet: %s', spreadsheet.getUrl());

// Build data source spec by selecting a table.
var dataSourceSpec = SpreadsheetApp.newDataSourceSpec()
    .asBigQuery()
    .setProjectId('<YOUR_PROJECT_ID>')
    .setTableProjectId('bigquery-public-data')
    .setDatasetId('ncaa_basketball')
    .setTableId('mbb_historical_tournament_games')
    .build();
// Add data source and its associated data source sheet.
var dataSourceSheet = spreadsheet.insertDataSourceSheet(dataSourceSpec);
var dataSource = dataSourceSheet.getDataSource();

Looker

Looker データソースをスプレッドシートに追加するには、データソース仕様を使用してデータソースシートを挿入します。データソースシートは自動的に更新され、プレビュー データが取得されます。

次の サンプルの <INSTANCE_URL><MODEL_NAME><EXPLORE_NAME> は、有効な Looker インスタンス URL、モデル名、探索名に それぞれ置き換えてください。

// For operations that fetch data from Looker, enableLookerExecution() must be called.
SpreadsheetApp.enableLookerExecution();
var spreadsheet = SpreadsheetApp.create('Test connected sheets');
Logger.log('New test spreadsheet: %s', spreadsheet.getUrl());

// Build data source spec by selecting a table.
var dataSourceSpec = SpreadsheetApp.newDataSourceSpec()
    .asLooker()
    .setInstanceUrl('<INSTANCE_URL>')
    .setModelName('<MODEL_NAME>')
    .setExploreName('<EXPLORE_NAME>')
    .build();
// Add data source and its associated data source sheet.
var dataSourceSheet = spreadsheet.insertDataSourceSheet(dataSourceSpec);
var dataSource = dataSourceSheet.getDataSource();

データソース オブジェクトを追加する

データソースがスプレッドシートに追加されると、データソースからデータソース オブジェクトを作成できます。この例では、BigQuery データソースを追加するコードサンプルで作成された BigQuery dataSourceDataSourcePivotTableを使用してピボット テーブルを作成します

セル インデックスまたは A1 表記で参照されるグリッドシートの通常のデータとは異なり、データソースのデータは通常、列名で参照されます。そのため、データソース オブジェクトのほとんどのプロパティ セッターは、入力として列名を使用します。

var rootCell = spreadsheet.insertSheet('pivotTableSheet').getRange('A1');

// Add data source pivot table and set data source specific configurations.
var dataSourcePivotTable = rootCell.createDataSourcePivotTable(dataSource);
var rowGroup = dataSourcePivotTable.addRowGroup('season');
rowGroup.sortDescending().setGroupLimit(5);
dataSourcePivotTable.addColumnGroup('win_school_ncaa');
dataSourcePivotTable.addPivotValue('win_pts',
SpreadsheetApp.PivotTableSummarizeFunction.AVERAGE);
dataSourcePivotTable.addPivotValue('game_date',
SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
var filterCriteria = SpreadsheetApp.newFilterCriteria()
    .whenTextEqualToAny(['Duke', 'North Carolina'])
    .build();
dataSourcePivotTable.addFilter('win_school_ncaa', filterCriteria);

// Get a regular pivot table instance and set shared configurations.
var pivotTable = dataSourcePivotTable.asPivotTable();
pivotTable.setValuesDisplayOrientation(SpreadsheetApp.Dimension.ROWS);

データソース オブジェクトを更新する

データソース仕様とオブジェクト構成に基づいて、データソース オブジェクトを更新して BigQuery から最新のデータを取得します。

データの更新プロセスは非同期です。データソース オブジェクトを更新するには、次のメソッドを使用します。

  1. refreshData() は、データ更新の実行を開始します。
  2. waitForCompletion() は、データ実行が完了すると終了状態を返します。これにより、実行ステータスをポーリングする必要がなくなります。
  3. DataExecutionStatus.getErrorCode() は、データ実行が失敗した場合にエラーコードを取得します。

次のサンプルは、ピボット テーブル データの更新を示しています。

var status = dataSourcePivotTable.getStatus();
Logger.log('Initial state: %s', status.getExecutionState());

dataSourcePivotTable.refreshData();

status = dataSourcePivotTable.waitForCompletion(/* timeoutInSeconds= */ 60);
Logger.log('Ending state: %s', status.getExecutionState());
if (status.getExecutionState() == SpreadsheetApp.DataExecutionState.ERROR) {
  Logger.log('Error: %s (%s)', status.getErrorCode(),
  status.getErrorMessage());
}

コネクテッド シートでトリガーを使用する

トリガーとイベントを使用して、コネクテッド シートのデータソース関数を自動化します。 たとえば、 時間主導型トリガー を使用して、特定の時間にデータソースオブジェクトを繰り返し更新し、 スプレッドシート イベント トリガー を使用して、事前定義されたイベントでデータ実行をトリガーします。

次のサンプルでは、クエリ パラメータを使用して BigQuery データソースを追加し、クエリ パラメータが編集されたときにデータソースシートを更新します。

<YOUR_PROJECT_ID> は、有効な Google Cloud プロジェクト ID に置き換えてください。

// Add data source with query parameter.
function addDataSource() {
  SpreadsheetApp.enableBigQueryExecution();
  var spreadsheet = SpreadsheetApp.getActive();

  // Add a new sheet and use A1 cell as the parameter cell.
  var parameterCell = spreadsheet.insertSheet('parameterSheet').getRange('A1');
  parameterCell.setValue('Duke');

  // Add data source with query parameter.
  var dataSourceSpec = SpreadsheetApp.newDataSourceSpec()
      .asBigQuery()
      .setProjectId('<YOUR_PROJECT_ID>')
      .setRawQuery('select * from `bigquery-public-data`.`ncaa_basketball`.`mbb_historical_tournament_games` WHERE win_school_ncaa = @SCHOOL')
      .setParameterFromCell('SCHOOL', 'parameterSheet!A1')
      .build();
  var dataSourceSheet = spreadsheet.insertDataSourceSheet(dataSourceSpec);
  dataSourceSheet.asSheet().setName('ncaa_data');
}

// Function used to configure event trigger to refresh data source sheet.
function refreshOnParameterEdit(e) {
  var editedRange = e.range;
  if (editedRange.getSheet().getName() != 'parameterSheet') {
    return;
  }
  // Check that the edited range includes A1.
  if (editedRange.getRow() > 1 || editedRange.getColumn() > 1) {
     return;
  }

  var spreadsheet = e.source;
  SpreadsheetApp.enableBigQueryExecution();
  spreadsheet.getSheetByName('ncaa_data').asDataSourceSheet().refreshData();
}

上記のサンプルでは、addDataSource() 関数はスプレッドシートにデータソースを追加します。addDataSource() を実行したら、Apps Script エディタでイベント トリガーを作成します。イベントトリガーの作成方法については、 インストール可能なトリガーをご覧ください。

トリガーに次のオプションを選択します。

  • イベントソース: [スプレッドシートから]
  • **イベントの種類**: [**編集時**]
  • 実行する関数: refreshOnParameterEdit

トリガーが作成されると、パラメータ セルが編集されるたびにデータソースシートが自動的に更新されます。

トラブルシューティング

エラー メッセージ 解決策
enableBigQuery() を使用して、BIGQUERY データソースのデータ実行を有効にします。 このエラーは、BigQuery データを取得する前に SpreadsheetApp.enableBigQueryExecution() が呼び出されていないことを示します。
BigQuery 実行にメソッドを使用する関数で SpreadsheetApp.enableBigQueryExecution() を呼び出します。
たとえば、データソース オブジェクトの refreshData()Spreadsheet.insertDataSourceTable()DataSource.updateSpec() などです。
これらのメソッドを使用するには、追加の bigquery.readonly OAuth スコープが必要です。
データソースでの操作は許可されていません。
この機能を有効にするには、管理者にお問い合わせください。
このエラーは、アカウントで コネクテッド シートが有効になっていないことを示します。
コネクテッド シートは、特定のサブスクリプションをご利用の Google Workspace ユーザーのみが利用できます。
この機能を有効にするには、管理者にお問い合わせください。