コネクテッド シート は、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 部分を示しています。最小限必要な spreadsheet と
bigquery.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 dataSource で
DataSourcePivotTableを使用してピボット テーブルを作成します。
セル インデックスまたは 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 から最新のデータを取得します。
データの更新プロセスは非同期です。データソース オブジェクトを更新するには、次のメソッドを使用します。
refreshData()は、データ更新の実行を開始します。waitForCompletion()は、データ実行が完了すると終了状態を返します。これにより、実行ステータスをポーリングする必要がなくなります。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 ユーザーのみが利用できます。 この機能を有効にするには、管理者にお問い合わせください。 |