1. Dall'analisi dei big data alla presentazione con slide
Esistono molti strumenti per i data scientist per eseguire analisi dei big data, ma alla fine gli analisti devono comunque giustificare i risultati al management. Molti numeri su carta o in un database sono difficilmente presentabili alle principali parti interessate. Questo codelab intermedio di Google Apps Script utilizza due piattaforme per sviluppatori di Google (Google Workspace e console Google Cloud) per aiutarti ad automatizzare l'ultimo tratto.
Gli strumenti per sviluppatori di Google Cloud ti consentono di eseguire l'analisi approfondita dei dati. Puoi quindi prendere i risultati, inserirli in un foglio di lavoro e generare una presentazione con i dati. Questo offre un modo più adatto per fornire i dati al management. Questo codelab tratta l'API BigQuery di Cloud Console (in quanto servizio avanzato di Apps Script) e i servizi integrati di Apps Script per Fogli Google e Presentazioni Google.
Motivazione
L'app di esempio in questo codelab è stata ispirata da questi altri esempi di codice:
- L'app di esempio del servizio BigQuery di Google Apps Script, open source su GitHub.
- L'app di esempio mostrata nel video per sviluppatori Generazione di slide dai dati del foglio di lavoro e pubblicata in questo post del blog.
- L'app di esempio descritta nel codelab dell'API Google Slides.
Sebbene l'app di esempio del codelab dell'API Slides includa anche BigQuery e Slides, differisce dall'app di esempio di questo codelab in diversi modi:
- La loro app Node.js rispetto alla nostra app Apps Script.
- Utilizzano le API REST, mentre noi utilizziamo i servizi Apps Script.
- Utilizzano Google Drive ma non Google Fogli, mentre questa app utilizza Fogli ma non Drive.
Per questo codelab, abbiamo voluto riunire più tecnologie in un'unica app, mostrando al contempo funzionalità e API di Google Cloud in modo da simulare un caso d'uso reale. L'obiettivo è stimolare la tua immaginazione e invitarti a utilizzare sia Cloud Console che Google Workspace per risolvere problemi complessi della tua organizzazione e dei tuoi clienti.
Obiettivi didattici
- Utilizzare Google Apps Script con più servizi Google
- Utilizzare Google BigQuery per analizzare i big data
- Creare un foglio Google e inserire i dati
- Come creare un grafico in Fogli
- Come trasferire dati e grafici da Fogli a una presentazione Google
Che cosa ti serve
- Un browser web con accesso a internet
- Un Account Google (gli account Google Workspace potrebbero richiedere l'approvazione dell'amministratore)
- Familiarità di base con Fogli Google
- Possibilità di leggere la notazione A1 di Fogli
- Competenze di base di JavaScript
- La conoscenza dello sviluppo di Apps Script è utile, ma non obbligatoria
2. Sondaggio
Come utilizzerai questo codelab/tutorial?
Come valuti la tua esperienza con le API e gli strumenti per sviluppatori di Google Workspace?
Come valuteresti la tua esperienza con Apps Script in particolare?
Come valuteresti la tua esperienza con gli strumenti e le API per sviluppatori di Cloud Console?
3. Panoramica
Ora che sai di cosa tratta questo codelab, ecco cosa farai:
- Prendi un esempio esistente di Apps Script-BigQuery e fallo funzionare.
- Dall'esempio, scopri come inviare una query a BigQuery e ottenere i risultati.
- Crea un foglio Google e inserisci i risultati di BigQuery.
- Modifica il codice per alterare leggermente i dati restituiti e inseriti nel foglio.
- Utilizza il servizio Fogli in Apps Script per creare un grafico per i dati di BigQuery.
- Utilizza il servizio Presentazioni per creare una presentazione di Presentazioni Google.
- Aggiungi un titolo e un sottotitolo alla slide del titolo predefinita.
- Crea una slide con una tabella di dati ed esporta le celle di dati del foglio.
- Crea un'altra slide e inserisci il grafico del foglio di lavoro.
Iniziamo con alcune informazioni di base su Apps Script, BigQuery, Fogli e Presentazioni.
Google Apps Script e BigQuery
Google Apps Script è una piattaforma di sviluppo di Google Workspace che opera a un livello superiore rispetto alle API REST Google. Si tratta di un ambiente di hosting delle applicazioni e di sviluppo serverless accessibile a sviluppatori con livelli di abilità molto diversi. In sostanza, Apps Script è un runtime JavaScript serverless per l'automazione, l'estensione e l'integrazione di Google Workspace.
Utilizza JavaScript lato server, simile a Node.js, ma è dedicato alla stretta integrazione con Google Workspace e altri servizi Google invece che all'hosting di applicazioni rapido e asincrono basato su eventi. Apps Script comprende anche un ambiente di sviluppo che potrebbe essere diverso da quello che usi di solito. Con Apps Script, puoi:
- Sviluppa script utilizzando un editor di codice basato su browser, ma puoi anche svilupparli localmente quando utilizzi
clasp, lo strumento di deployment a riga di comando per Apps Script. - Scrivere codice in una versione specializzata di JavaScript personalizzata per l'accesso a Google Workspace e ad altri servizi, sia Google sia esterni (utilizzando i servizi
URL FetchoJDBCdi Apps Script). - Può evitare di scrivere codice di autorizzazione, perché se ne occupa Apps Script al posto tuo.
- Fare a meno di trovare una soluzione per l'hosting della tua app, che risiede e viene eseguita nei server Google sul cloud.
Apps Script si interfaccia con altre tecnologie Google in due modi diversi:
- Come servizio integrato
- Come servizio avanzato
Un servizio integrato dispone di metodi di alto livello per interagire con i dati utente, altri sistemi Google e sistemi esterni. Un servizio avanzato è essenzialmente un sottile wrapper che riveste un'API Google Workspace o un'API REST Google. I servizi avanzati offrono la copertura completa dell'API REST e spesso hanno funzionalità più avanzate dei servizi integrati, ma necessitano di codice più complesso (pur rimanendo più facili da utilizzare rispetto all'API REST completa). Inoltre, prima di poter essere utilizzati, i servizi avanzati devono essere attivati nel progetto di uno script.
Quando possibile, gli sviluppatori devono utilizzare un servizio integrato perché è più facile da usare e offre più funzionalità rispetto ai servizi avanzati. Tuttavia, alcune API di Google non hanno i servizi integrati, perciò il servizio avanzato potrebbe essere l'unica opzione. Ad esempio, Google BigQuery non ha un servizio integrato, ma esiste il servizio BigQuery. Il servizio BigQuery è un servizio della console Google Cloud che consente di utilizzare l'API Google BigQuery per eseguire query su grandi corpus di dati (ad esempio, più terabyte) e di ottenere risultati in pochi secondi.
Accedere a Fogli e Presentazioni da Apps Script
A differenza di BigQuery, sia Fogli che Presentazioni hanno servizi integrati. Dispone anche di servizi avanzati per accedere a funzionalità disponibili solo nell'API. Consulta la documentazione dei servizi integrati Fogli e Presentazioni prima di iniziare a lavorare con il codice. Tieni presente che sono disponibili anche documenti per i servizi avanzati di Fogli e Presentazioni.
4. Attività 1: esegui BigQuery e registra i risultati in Fogli
Introduzione
Svolgeremo gran parte di questo codelab con questa prima attività. Infatti, al termine della sezione, avrai quasi completato la metà di tutto il codelab. Suddivisa in diverse sottosezioni, potrai:
- Crea un progetto Google Apps Script e un progetto nella console Cloud.
- Attiva l'accesso al servizio avanzato di BigQuery.
- Apri l'editor di script e inserisci il codice sorgente dell'applicazione.
- Esplora la procedura di autorizzazione dell'app (OAuth2).
- Esegui l'applicazione che invia una richiesta a BigQuery.
- Esamina il nuovo foglio Google creato utilizzando i risultati di BigQuery.
Configurazione
- Per creare un progetto Apps Script, vai a
script.google.come fai clic su Nuovo progetto. - Per rinominare il progetto Apps Script, fai clic su Progetto senza titolo, inserisci un titolo per il progetto e fai clic su Rinomina.
Successivamente, devi creare un progetto Cloud Console per eseguire query sui dati in BigQuery.
- Per creare un progetto Cloud Console, utilizza questo link di scelta rapida per creare un progetto, assegnagli un nome e fai clic su Crea.
- Al termine della creazione del progetto, viene visualizzata una notifica nella pagina. Assicurati che il nuovo progetto sia selezionato nell'elenco dei progetti nella parte superiore della pagina.
- Fai clic su Menu
e vai a API e servizi > Schermata consenso OAuth (link diretto). - Fai clic su Interna > Crea per creare un'app per gli utenti di Google Workspace all'interno della tua organizzazione.
- Nel campo Nome app, inserisci "Big Data Codelab".
- Inserisci le email di contatto per i campi Assistenza utente e Dati di contatto dello sviluppatore.
- Fai clic su Salva e continua > Salva e continua.
- Fai clic su Altro
nella barra di navigazione e seleziona Impostazioni progetto (link diretto). - Copia il valore elencato in Numero progetto. Un campo ID progetto separato viene utilizzato più avanti nel codelab.
Successivamente, collegherai il progetto Apps Script al progetto della console Cloud.
- Passa all'editor di Apps Script e fai clic su Impostazioni progetto
. - In Progetto Google Cloud, fai clic su Cambia progetto.
- Inserisci il numero di progetto e fai clic su Imposta progetto.
- Poi, fai clic su Editor
per iniziare ad aggiungere il servizio avanzato BigQuery. - Accanto a Servizi, fai clic su Aggiungi un servizio
. - Nella finestra di dialogo Aggiungi un servizio, seleziona API BigQuery e fai clic su Aggiungi.
Il passaggio finale consiste nell'attivare l'API BigQuery nella console Cloud.
- Per farlo, passa alla console Cloud e fai clic su API e servizi > Dashboard. Assicurati di essere ancora nello stesso progetto creato nel passaggio 3.
- Fai clic su Abilita API e servizi.
- Cerca "big query", seleziona l'API BigQuery (non l'API BigQuery Data Transfer) e fai clic su Abilita per attivarla.

A questo punto puoi inserire il codice dell'applicazione. Completa il processo di autorizzazione e inizia a utilizzare la prima iterazione di questa applicazione.
Carica l'applicazione ed eseguila
- Nell'editor di script, sostituisci il blocco di codice
myFunction()predefinito con il seguente codice:
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a Sheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BigQuery job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to Sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
}
- Fai clic su Salva
.
- Accanto a
Code.gs, fai clic su Altro
> Rinomina. Modifica il titolo da Code.gsabq-sheets-slides.js. - Successivamente, esaminiamo il codice che esegue query in BigQuery e scrive i risultati in un foglio Google. Puoi visualizzarlo nella parte superiore di
runQuery():
SELECT
LOWER(word) AS word,
SUM(word_count) AS count
FROM [bigquery-public-data:samples.shakespeare]
GROUP BY word
ORDER BY count
DESC LIMIT 10
Questa query esegue una ricerca nelle opere di Shakespeare, che fanno parte del set di dati pubblico di BigQuery, e restituisce le dieci parole che compaiono più di frequente in tutte le opere, in ordine decrescente per numero di ricorrenze. Ti fai un'idea di quanto possa essere utile BigQuery quando immagini quanto lavoro ci vorrebbe per fare questa compilazione a mano.
La funzione dichiara anche una variabile PROJECT_ID che richiede un ID progetto della console Cloud valido. L'istruzione if sotto la variabile serve a impedire all'applicazione di procedere senza l'ID progetto.
- Passa al progetto della console Cloud, fai clic su Altro
nella barra di navigazione e seleziona Impostazioni progetto. - Copia il valore elencato in ID progetto.
- Torna all'editor di Apps Script, individua la variabile
PROJECT_IDinbq-sheets-slides.jse aggiungi il valore. - Fai clic su Salva
> Esegui.
- Fai clic su Rivedi autorizzazioni per continuare.
- Una volta avviato lo script, si apre il log di esecuzione integrato e registra le azioni dello script in tempo reale.
- Una volta che nel log di esecuzione viene visualizzato il messaggio "Esecuzione completata", vai su Google Drive (
drive.google.com) e trova il foglio Google denominato "Le parole più comunemente utilizzate in tutte le opere di Shakespeare" (o il nome che hai assegnato alla variabileQUERY_NAME, se l'hai aggiornata): - Apri il foglio di lavoro per visualizzare le 10 parole più comuni e il numero totale di occorrenze in ordine decrescente:

Riepilogo attività 1
Per riepilogare, hai eseguito un codice che ha eseguito una query su tutte le opere di Shakespeare esaminando ogni parola di ogni opera teatrale. Ha contato le parole e le ha ordinate in ordine decrescente di frequenza. Hai anche utilizzato il servizio integrato di Apps Script per Fogli Google per visualizzare questi dati.
Il codice che hai utilizzato per bq-sheets-slides.js è disponibile anche nella cartella step1 del repository GitHub di questo codelab all'indirizzo github.com/googlecodelabs/bigquery-sheets-slides. Il codice è stato ispirato da questo esempio originale nella pagina dei servizi avanzati di BigQuery, che eseguiva una query leggermente diversa per recuperare le parole più utilizzate da Shakespeare con 10 o più caratteri. Puoi anche vedere un esempio nel repository GitHub.
Se ti interessano altre query che puoi creare con le opere di Shakespeare o altre tabelle di dati pubblici, visita Come eseguire query sulle tabelle di esempio di BigQuery e questo repository GitHub.
Puoi anche eseguire query utilizzando la pagina BigQuery su Cloud Console prima di eseguirle in Apps Script. Per trovarlo, fai clic su Menu
e vai a UI BigQuery > Area di lavoro SQL (link diretto). Ad esempio, ecco come appare la nostra query nell'interfaccia grafica di BigQuery:

5. Attività 2: crea un grafico in Fogli Google
Lo scopo di runQuery() è utilizzare BigQuery e inviare i risultati dei dati a un foglio Google. Il passaggio successivo consiste nel creare un grafico utilizzando i dati. Creiamo una nuova funzione denominata createColumnChart() che chiama il metodo newChart() di Fogli.
- Nell'editor Apps Script, aggiungi la funzione
createColumnChart()abq-sheets-slides.jsdoporunQuery(). Il codice recupera il foglio e richiede un grafico a colonne con tutti i dati. L'intervallo di dati inizia dalla cella A2 perché la prima riga contiene le intestazioni di colonna.
/**
* Uses spreadsheet data to create a column chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) Sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in Sheet is from cell A2 to B11.
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the Sheet using above values.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
}
- La funzione
createColumnChart()richiede un parametro oggetto foglio di lavoro, quindi dobbiamo aggiornarerunQuery()in modo che restituisca un oggettospreadsheetche possiamo passare acreateColumnChart(). Alla fine dirunQuery(), restituisci l'oggettospreadsheetdopo aver registrato la creazione riuscita del foglio:
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// NEW: Return the spreadsheet object for later use.
return spreadsheet;
}
- Crea una funzione
createBigQueryPresentation()per chiamare siarunQuery()checreateColumnChart(). La separazione logica delle funzionalità di BigQuery e di creazione dei grafici è una best practice:
/**
* Runs the query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
createColumnChart(spreadsheet);
}
- Hai eseguito due importanti passaggi, ossia hai restituito l'oggetto del foglio di lavoro e creato la funzione di inserimento. Per rendere
runQuery()più utilizzabile, dobbiamo spostare la riga di log darunQuery()acreateBigQueryPresentation(). Il tuo metodo ora dovrebbe essere simile al seguente:
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
createColumnChart(spreadsheet);
}
Con le modifiche riportate sopra (ad eccezione di PROJECT_ID), il codice in bq-sheets-slides.js ora dovrebbe corrispondere al seguente. Questo codice si trova anche in step2 del repository GitHub.
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a sheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BigQuery job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
// Return the spreadsheet object for later use.
return spreadsheet;
}
/**
* Uses spreadsheet data to create a columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in sheet is from cell A2 to B11.
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the sheet using above values.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
}
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Nell'editor di script, salva il progetto di script. Poi seleziona createBigQueryPresentation dall'elenco delle funzioni e fai clic su Esegui. Al termine, in Google Drive viene creato un altro foglio di lavoro, ma questa volta nel foglio accanto ai dati è incluso un grafico:

6. Attività 3: inserisci i dati dei risultati in una presentazione
La parte finale del codelab consiste nel creare una presentazione Google, aggiungere il titolo e il sottotitolo alla slide del titolo e quindi creare slide per le celle di dati e il grafico.
- Nell'editor Apps Script, aggiungi la funzione
createSlidePresentation()abq-sheets-slides.jsdopocreateColumnChart(). Tutto il lavoro sul file di presentazione viene svolto in questa funzione. Iniziamo con la creazione di una presentazione, quindi aggiungiamo un titolo e un sottotitolo alla slide predefinita per il titolo.
/**
* Create presentation with spreadsheet data and a chart
* @param {Spreadsheet} Spreadsheet containing results data
* @param {EmbeddedChart} Sheets chart to embed on a slide
* @returns {Presentation} Slide deck with the results
* @see https://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the presentation.
var deck = SlidesApp.create(QUERY_NAME);
// Populate the title slide.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('using Google Cloud Console and Google Workspace APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
- Il passaggio successivo in
createSlidePresentation()consiste nell'importare i dati delle celle dal foglio Google nel nuovo file di presentazione. Aggiungi questo snippet di codice alla funzione:
// Data range to copy is from cell A1 to B11
var START_CELL = 'A1'; // include header row
var END_CELL = 'B11';
// Add the table slide and insert an empty table on it with
// the dimensions of the data range; fails if the sheet is empty.
var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var sheetValues = spreadsheet.getSheets()[0].getRange(
START_CELL + ':' + END_CELL).getValues();
var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);
// Populate the table with spreadsheet data.
for (var i = 0; i < sheetValues.length; i++) {
for (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
- L'ultimo passaggio in
createSlidePresentation()consiste nell'aggiungere un'altra slide, importare il grafico dal nostro foglio di lavoro e restituire l'oggettoPresentation. Aggiungi questo snippet di codice alla funzione:
// Add a chart slide and insert the chart on it.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Return the presentation object for later use.
return deck;
}
- Ora che la nostra funzione è completa, dai un altro sguardo alla sua firma.
createSlidePresentation()richiede sia i parametri dell'oggetto spreadsheet sia quelli dell'oggetto grafico. Abbiamo già modificatorunQuery()in modo che restituisca un oggettoSpreadsheet, ma dobbiamo apportare una modifica simile acreateColumnChart()in modo che restituisca un oggetto grafico (EmbeddedChart). Torna acreateColumnChart()e aggiungi il seguente snippet di codice alla fine della funzione:
// NEW: Return the chart object for later use.
return chart;
}
- Poiché
createColumnChart()ora restituisce un oggetto grafico, dobbiamo salvare il grafico in una variabile. Poi passiamo sia il foglio di lavoro che le variabili del grafico acreateSlidePresentation(). Inoltre, poiché registriamo l'URL del foglio di lavoro appena creato, registriamo anche l'URL del nuovo file di Presentazioni. Aggiorna ilcreateBigQueryPresentation()in modo che abbia il seguente aspetto:
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet,
* and adds the data and chart to a new slide presentation.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
var chart = createColumnChart(spreadsheet); // UPDATED
var deck = createSlidePresentation(spreadsheet, chart); // NEW
Logger.log('Results slide deck created: %s', deck.getUrl()); // NEW
}
- Salva ed esegui di nuovo
createBigQueryPresentation(). Prima dell'esecuzione, però, l'app ha bisogno di un'altra serie di autorizzazioni da parte dell'utente per visualizzare e gestire i file di Presentazioni Google. Una volta esaminate e consentite queste autorizzazioni, l'app funzionerà come prima. - Ora, oltre al foglio di lavoro che è stato creato, dovresti ricevere anche una nuova presentazione Google con tre slide (titolo, tabella dati, grafico dati), come illustrato di seguito:



7. Conclusione
Congratulazioni, hai creato un'applicazione che utilizza entrambi i lati di Google Cloud. Esegue una richiesta Google BigQuery che esegue query su uno dei suoi set di dati pubblici, crea un foglio di lavoro Google Sheets per archiviare i risultati, aggiunge un grafico basato sui dati e infine crea un file Google Slides con i dati e i risultati del grafico del foglio di lavoro.
Tecnicamente hai fatto tutto questo. In termini generali, da un'analisi dei big data hai creato un risultato che puoi presentare agli stakeholder, il tutto in modo automatizzato mediante codice. Ci auguriamo che questo esempio ti ispiri a personalizzarlo per i tuoi progetti. Al termine di questo codelab, ti forniremo alcuni suggerimenti su come migliorare ulteriormente questa app di esempio.
Con le modifiche dell'ultima attività (a parte PROJECT_ID), il codice in bq-sheets-slides.js ora dovrebbe corrispondere al seguente:
/**
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a spreadsheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BigQuery job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
// Return the spreadsheet object for later use.
return spreadsheet;
}
/**
* Uses spreadsheet data to create a column chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in sheet is from cell A2 to B11.
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the sheet using above values.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
// Return the chart object for later use.
return chart;
}
/**
* Create presentation with spreadsheet data and a chart
* @param {Spreadsheet} Spreadsheet containing results data
* @param {EmbeddedChart} Sheets chart to embed on a slide
* @returns {Presentation} Slide deck with the results
* @see https://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the presentation.
var deck = SlidesApp.create(QUERY_NAME);
// Populate the title slide.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('using Google Cloud Console and Google Workspace APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
// Data range to copy is from cell A1 to B11
var START_CELL = 'A1'; // include header row
var END_CELL = 'B11';
// Add the table slide and insert an empty table on it with
// the dimensions of the data range; fails if the sheet is empty.
var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var sheetValues = spreadsheet.getSheets()[0].getRange(
START_CELL + ':' + END_CELL).getValues();
var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);
// Populate the table with spreadsheet data.
for (var i = 0; i < sheetValues.length; i++) {
for (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
// Add a chart slide and insert the chart on it.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Return the presentation object for later use.
return deck;
}
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet,
* and adds the data and chart to a new slide presentation.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
var chart = createColumnChart(spreadsheet);
var deck = createSlidePresentation(spreadsheet, chart);
Logger.log('Results slide deck created: %s', deck.getUrl());
}
Questo codice campione è disponibile anche nella cartella final del repository GitHub.
8. Risorse aggiuntive
Di seguito sono riportate altre risorse per approfondire il materiale trattato in questo codelab ed esplorare altri modi di accedere agli strumenti per sviluppatori Google attraverso la programmazione.
Risorse per questa applicazione
- Repository del codice sorgente
- Video per sviluppatori (e) post del blog
- Sessione di Google Cloud NEXT '18
Documentazione
- Sito di documentazione di Google Apps Script
- Apps Script: servizio fogli di lavoro
- Apps Script: servizio Presentazioni
- Apps Script: servizio avanzato BigQuery
Video
- Un altro segreto di Google Apps Script
- Accedere a Google Maps da un foglio di lavoro
- Totally Unscripted
- Google Workspace Developer Show
Novità e aggiornamenti
- Blog di Google Cloud Platform
- Blog di Google Cloud Data Analytics
- Blog per sviluppatori Google
- Twitter: Google Developers (@googledevs)
- Blog per sviluppatori di Google Workspace
- Twitter: Google Workspace Developers (@workspacedevs)
Altri codelab
Introduttivo
- [Fogli Google] Nozioni di base di Apps Script con Fogli Google
- [API REST] Utilizzare le API Google Workspace e Google per accedere a file e cartelle in Google Drive
Intermedio
- [Apps Script] Strumento da riga di comando CLASP Apps Script
- [Apps Script] Componenti aggiuntivi di Google Workspace per Gmail
- [Apps Script] Bot personalizzati per Hangouts Chat
- [API REST] Utilizzare Fogli Google come strumento di generazione di report dell'applicazione
- [API REST] Genera file di Presentazioni Google utilizzando l'API BigQuery
9. Passaggio successivo: sfide di programmazione
Di seguito sono elencati diversi modi in cui puoi migliorare o ampliare l'esempio che abbiamo creato in questo codelab. Questo elenco non è esaustivo, ma fornisce alcune idee su come procedere.
- Applicazione: non vuoi essere limitato all'utilizzo di JavaScript o dalle restrizioni imposte da Apps Script? Porta questa applicazione nel tuo linguaggio di programmazione preferito che utilizza le API REST per Google BigQuery, Fogli e Presentazioni.
- BigQuery: prova una query diversa per il set di dati di Shakespeare che ti interessa. Un'altra query di esempio è disponibile nell'app di esempio BigQuery di Apps Script originale.
- BigQuery: prova altri set di dati pubblici di BigQuery per trovare quello più significativo per te.
- BigQuery: in precedenza abbiamo menzionato altre query che puoi creare con le opere di Shakespeare o altre tabelle di dati pubblici. Puoi trovarli in questa pagina web e in questo repository GitHub.
- Fogli: prova altri tipi di grafici nella Galleria di grafici.
- Fogli e BigQuery: utilizza il tuo set di dati di grandi dimensioni. Nel 2016, il team di BigQuery ha introdotto una funzionalità che consente agli sviluppatori di utilizzare un foglio come origine dati. Per saperne di più, vai a (Google BigQuery si integra con Google Drive.
- Diapositive: aggiungi altre diapositive alla presentazione generata, ad esempio immagini o altri asset collegati all'analisi dei big data. Ecco la documentazione di riferimento per il servizio integrato Presentazioni.
- Google Workspace: utilizza altri servizi integrati di Google Workspace o Google da Apps Script. Ad esempio, Gmail, Calendar, Documenti, Drive, Maps, Analytics, YouTube e così via, nonché altri servizi avanzati. Per maggiori informazioni, consulta la panoramica di riferimento per i servizi integrati e avanzati.