कनेक्टेड शीट की सुविधा का इस्तेमाल करना

कनेक्टेड शीट, Google Sheets की एक सुविधा है. इसकी मदद से, Sheets में ही BigQuery और Looker डेटा का विश्लेषण किया जा सकता है. स्प्रेडशीट सेवा की मदद से, प्रोग्राम के हिसाब से कनेक्टेड शीट को ऐक्सेस किया जा सकता है.

कनेक्टेड शीट की सामान्य कार्रवाइयां

BigQuery या Looker से कनेक्ट करने और डेटा का विश्लेषण करने के लिए, DataSource क्लास और ऑब्जेक्ट का इस्तेमाल करें. यहां दी गई टेबल में, सबसे सामान्य DataSource कार्रवाइयों की सूची दी गई है. साथ ही, Apps Script में उन्हें बनाने का तरीका भी बताया गया है:

कार्रवाई Google 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 डेटा ऐक्सेस करने के लिए, आपको अपने Google Apps Script कोड में enableBigQueryExecution() तरीका शामिल करना होगा. इस तरीके से, आपके Google Apps Script प्रोजेक्ट में ज़रूरी bigquery.readonly OAuth स्कोप जुड़ जाता है.

यहां दिए गए सैंपल में, फ़ंक्शन में इस्तेमाल किए गए SpreadsheetApp.enableBigQueryExecution() तरीके को दिखाया गया है:

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

Looker डेटा को ऐक्सेस करने के लिए, आपको अपने Google Apps Script कोड में enableLookerExecution() तरीका शामिल करना होगा. Apps Script में Looker को ऐक्सेस करने पर, Looker के साथ आपके मौजूदा Google खाते के लिंक का फिर से इस्तेमाल किया जाएगा.

यहां दिए गए सैंपल में, किसी फ़ंक्शन में SpreadsheetApp.enableLookerExecution() का इस्तेमाल किया गया है:

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

मेनिफ़ेस्ट फ़ाइल में OAuth के अन्य स्कोप जोड़ना

BigQuery से कनेक्ट करते समय, ज़्यादातर OAuth स्कोप आपके कोड में इस्तेमाल किए गए फ़ंक्शन के आधार पर, मेनिफ़ेस्ट फ़ाइल में अपने-आप जुड़ जाते हैं. अगर आपको BigQuery के किसी डेटा को ऐक्सेस करने के लिए, अतिरिक्त स्कोप की ज़रूरत है, तो साफ़ तौर पर स्कोप सेट किए जा सकते हैं.

उदाहरण के लिए, Google Drive में होस्ट किए गए 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 डेटा सोर्स जोड़ने के लिए, डेटा सोर्स की जानकारी के साथ डेटा सोर्स शीट डालें. डेटा सोर्स की झलक पाने के लिए, डेटा सोर्स शीट अपने-आप रीफ़्रेश हो जाती है.

यहां दिए गए <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

स्प्रेडशीट में Looker डेटा सोर्स जोड़ने के लिए, डेटा सोर्स के स्पेसिफ़िकेशन के साथ डेटा सोर्स शीट डालें. डेटा सोर्स शीट, झलक के डेटा को फ़ेच करने के लिए अपने-आप रीफ़्रेश हो जाती है.

यहां दिए गए सैंपल में, <INSTANCE_URL>,<MODEL_NAME>, <EXPLORE_NAME> को क्रमशः 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();

डेटा सोर्स ऑब्जेक्ट जोड़ना

डेटा सोर्स को स्प्रेडशीट में जोड़ने के बाद, डेटा सोर्स से डेटा सोर्स ऑब्जेक्ट बनाए जा सकते हैं. इस उदाहरण में, 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 से नया डेटा पाने के लिए, डेटा सोर्स ऑब्जेक्ट रीफ़्रेश किए जा सकते हैं.

डेटा रीफ़्रेश करने की प्रोसेस असिंक्रोनस होती है. डेटा सोर्स ऑब्जेक्ट को रीफ़्रेश करने के लिए, इन तरीकों का इस्तेमाल करें:

  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 का मान्य प्रोजेक्ट आईडी डालें.

// 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

ट्रिगर बनाने के बाद, पैरामीटर सेल में हर बार बदलाव करने पर, डेटा सोर्स शीट अपने-आप रीफ़्रेश हो जाती है.

समस्या हल करें

गड़बड़ी का मैसेज रिज़ॉल्यूशन
BIGQUERY डेटा सोर्स के लिए डेटा प्रोसेस करने की सुविधा चालू करने के लिए, enableBigQuery() का इस्तेमाल करें. इस गड़बड़ी से पता चलता है कि BigQuery डेटा फ़ेच करने से पहले, SpreadsheetApp.enableBigQueryExecution() को कॉल नहीं किया गया है.
BigQuery को लागू करने के तरीकों का इस्तेमाल करने वाले फ़ंक्शन में, SpreadsheetApp.enableBigQueryExecution() को कॉल करें.
जैसे, डेटा सोर्स ऑब्जेक्ट पर refreshData(), Spreadsheet.insertDataSourceTable(), और DataSource.updateSpec().
इन तरीकों को काम करने के लिए, OAuth के एक और दायरे, bigquery.readonly की ज़रूरत होती है.
आपको डेटा सोर्स पर कार्रवाई करने की अनुमति नहीं है.
यह सुविधा चालू करने के लिए, कृपया अपने एडमिन से संपर्क करें.
इस गड़बड़ी का मतलब है कि खाते में कनेक्टेड शीट की सुविधा चालू नहीं है.
कनेक्टेड शीट की सुविधा सिर्फ़ उन उपयोगकर्ताओं के लिए उपलब्ध है जिनके पास कुछ खास सदस्यताएं हैं.
यह सुविधा चालू करने के लिए, अपने एडमिन से संपर्क करें.