Connected Sheets – это функция Google Таблиц, которая позволяет анализировать данные BigQuery и Looker непосредственно в Таблицах. Вы можете получить доступ к подключенным таблицам программным способом с помощью службы электронных таблиц.
Распространенные действия с подключенными таблицами
Используйте классы и объекты DataSource
для подключения к BigQuery или Looker и анализа данных. В следующей таблице перечислены наиболее распространенные действия DataSource
и способы их создания в Apps Script.
Действие | Класс сценариев Google Apps | Метод использования |
---|---|---|
Подключите лист к поддерживаемому источнику данных | DataSourceSpec | SpreadsheetApp.newDataSourceSpec() |
Выберите источник данных | DataSource | Spreadsheet.insertDataSourceSheet().getDataSource() |
Добавить лист источника данных | DataSourceSheet | Spreadsheet.insertDataSourceSheet() |
Добавьте сводную таблицу | DataSourcePivotTable | Range.insertDataSourcePivotTable() |
Извлечение данных в экстракт | DataSourceTable | Range.insertDataSourceTable() |
Используйте формулу | DataSourceFormula | Range.setFormula() |
Добавить диаграмму | DataSourceChart | Sheet.insertDataSourceChart() |
Добавьте необходимые области авторизации
Чтобы получить доступ к данным BigQuery, необходимо включить метод enableBigQueryExecution()
в код скрипта Google Apps. Этот метод добавляет необходимую область OAuth bigquery.readonly
в ваш проект Google Apps Script.
В следующем примере показан метод SpreadsheetApp.enableBigQueryExecution()
вызываемый внутри функции:
function addDataSource() { SpreadsheetApp.enableBigQueryExecution(); var spreadsheet = SpreadsheetApp.getActive(); }
Чтобы получить доступ к данным Looker, необходимо включить метод enableLookerExecution()
в код скрипта Google Apps. При доступе к Looker в Apps Script будет повторно использоваться существующая ссылка на вашу учетную запись Google с Looker.
В следующем примере показан метод SpreadsheetApp.enableLookerExecution()
вызываемый внутри функции:
function addDataSource() { SpreadsheetApp.enableLookerExecution(); var spreadsheet = SpreadsheetApp.getActive(); }
Добавьте дополнительные области OAuth в файл манифеста.
При подключении к BigQuery большинство областей действия OAuth автоматически добавляются в файл манифеста на основе функций, используемых в вашем коде. Если вам нужны дополнительные области действия для доступа к определенным данным BigQuery, вы можете указать явные области действия .
Например, чтобы запросить данные BigQuery, размещенные на Google Диске , вам необходимо добавить область действия Drive OAuth в файл манифеста.
В следующем примере показана часть oauthScopes
файла манифеста. Он добавляет область OAuth для диска в дополнение к минимально необходимой spreadsheet
и областям OAuth bigquery.readonly
:
{ ... "oauthScopes": [ "https://www.googleapis.com/auth/bigquery.readonly", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive" ], ... }
Пример. Создание и обновление объекта источника данных.
В следующих примерах показано, как добавить источник данных, создать объект источника данных из источника данных, обновить объект источника данных и получить статус выполнения.
Добавить источник данных
В следующих примерах показано, как добавить источники данных BigQuery и Looker соответственно.
Большой запрос
Чтобы добавить источник данных BigQuery в электронную таблицу, вставьте лист источника данных со спецификацией источника данных. Лист источника данных автоматически обновляется для получения данных предварительного просмотра.
Замените <YOUR_PROJECT_ID>
ниже действительным идентификатором проекта Google Cloud.
// 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 в электронную таблицу, вставьте лист источника данных со спецификацией источника данных. Лист источника данных автоматически обновляется для получения данных предварительного просмотра.
Замените <INSTANCE_URL>
, <MODEL_NAME>
, <EXPLORE_NAME>
в следующем примере действительным URL-адресом экземпляра Looker, именем модели и именем исследования соответственно.
// 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();
Добавьте объект источника данных
После добавления источника данных в электронную таблицу на основе источника данных можно создавать объекты источника данных. В этом примере сводная таблица создается с помощью DataSourcePivotTable
в dataSource
BigQuery, созданном в примере кода, который добавляет источник данных BigQuery .
В отличие от обычных данных в таблицах сетки, на которые ссылаются индексы ячеек или нотации 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());
}
Используйте триггеры с подключенными таблицами
Автоматизируйте функции источников данных Connected Sheets с помощью триггеров и событий . Например, используйте триггеры, управляемые по времени, для многократного обновления объектов источника данных в определенное время, а также триггеры событий электронной таблицы, чтобы инициировать выполнение данных по предопределенному событию.
В следующем примере добавляется источник данных BigQuery с параметром запроса и обновляется лист источника данных при изменении параметра запроса.
Замените <YOUR_PROJECT_ID>
ниже действительным идентификатором проекта Google Cloud.
// 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()
создайте триггер событий в редакторе сценариев приложений. Чтобы узнать, как создать триггер события, см. раздел «Устанавливаемые триггеры» .
Выберите следующие параметры для триггера:
- Источник события : Из электронной таблицы.
- Тип события : При редактировании
- Функция для запуска :
refreshOnParameterEdit
После создания триггера лист источника данных автоматически обновляется каждый раз при редактировании ячейки параметра.
Устранение неполадок
Сообщение об ошибке | Разрешение |
---|---|
Используйте enableBigQuery() , чтобы включить выполнение данных для источников данных BIGQUERY. | Эта ошибка указывает на то, что SpreadsheetApp.enableBigQueryExecution() не вызывается перед получением данных BigQuery.Вызовите SpreadsheetApp.enableBigQueryExecution() в функциях, которые используют методы для выполнения BigQuery.Например, refreshData() для объектов источника данных, Spreadsheet.insertDataSourceTable() и DataSource.updateSpec() .Для работы этих методов требуется дополнительная область OAuth bigquery.readonly. |
Запрещено действовать с источниками данных. Пожалуйста, обратитесь к своему администратору, чтобы включить эту функцию. | Эта ошибка означает, что в учетной записи не включены подключенные таблицы. Подключенные таблицы доступны только Google Workspace пользователи с определенными подписками. Обратитесь к администратору, чтобы включить эту функцию. |