GSP240

Ringkasan
Ada banyak alat yang tersedia bagi data scientist untuk menganalisis big data, tetapi alat mana yang dapat membantu Anda menjelaskan dan membenarkan analisis Anda kepada manajemen dan pemangku kepentingan? Angka yang belum diolah di atas kertas atau di dalam database akan sulit digunakan untuk hal ini. Lab Google Apps Script ini memanfaatkan dua platform developer Google, Workspace dan Google Cloud, untuk membantu Anda mencapai tujuan tersebut.
Dengan alat developer Google Cloud, Anda dapat mengumpulkan dan memproses data, lalu membuat presentasi slide dan spreadsheet untuk memukau manajemen dan pemangku kepentingan dengan analisis yang luar biasa dan hasil analisis yang mendalam.
Lab ini membahas API BigQuery Google Cloud (sebagai layanan lanjutan Apps Script) dan layanan Apps Script bawaan untuk Google Spreadsheet serta Google Slide.
Lab ini juga menyiapkan skenario yang sangat mirip dengan kehidupan nyata. Aplikasi yang digunakan menampilkan fitur dan API dari seluruh Google Cloud. Sasarannya adalah mendemonstrasikan cara Anda dapat memanfaatkan Google Cloud dan Workspace untuk memecahkan masalah yang sulit bagi organisasi atau pelanggan Anda.
Yang akan Anda pelajari
- Cara menggunakan Google Apps Script dengan beberapa layanan Google
- Cara menggunakan BigQuery untuk melakukan analisis big data
- Cara membuat Spreadsheet Google dan mengisi data ke dalamnya, serta cara membuat diagram dengan data spreadsheet
- Cara mentransfer diagram dan data spreadsheet ke slide-slide terpisah dalam presentasi Google Slide
Penyiapan
Sebelum mengklik tombol Start Lab
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Untuk menyelesaikan lab ini, Anda memerlukan:
- Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
- Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.
Pengantar
Google Apps Script dan BigQuery
Google Apps Script adalah platform pengembangan Workspace yang beroperasi pada tingkat yang lebih tinggi daripada jika Anda menggunakan REST API Google. Google Apps Script merupakan lingkungan pengembangan serverless dan hosting aplikasi yang dapat diakses oleh developer dengan berbagai tingkat keahlian. Dalam satu kalimat, "Apps Script adalah runtime JavaScript serverless untuk otomatisasi, ekstensi, dan integrasi Workspace."
Apps Script merupakan JavaScript sisi server, mirip dengan Node.js, tetapi berfokus pada integrasi yang erat dengan Workspace dan layanan Google lainnya, bukan hosting aplikasi berbasis peristiwa asinkron yang cepat. Selain itu, Apps Script memiliki lingkungan pengembangan yang mungkin sangat berbeda dari yang biasa Anda gunakan. Dengan Apps Script, Anda:
- Melakukan pengembangan di editor kode berbasis browser, tetapi dapat memilih untuk mengembangkan secara lokal jika menggunakan clasp, yakni alat deployment command line untuk Apps Script
- Membuat kode dalam JavaScript versi khusus yang disesuaikan untuk mengakses Workspace, dan layanan Google atau layanan eksternal lainnya (melalui layanan URLfetch atau Jdbc Apps Script)
- Menghindari penulisan kode otorisasi karena Apps Script menanganinya untuk Anda
- Tidak perlu menghosting aplikasi Anda karena aplikasi tersebut berjalan dan beroperasi di server Google di cloud
Catatan: Untuk mengetahui informasi selengkapnya tentang Apps Script, baca dokumentasi resmi, yang juga menampilkan ringkasan dengan panduan memulai, tutorial, dan video.
Apps Script berinteraksi dengan teknologi Google lainnya dalam dua cara yang berbeda:
- Layanan bawaan
- Layanan lanjutan
Layanan bawaan menyediakan metode tingkat tinggi yang dapat Anda gunakan untuk mengakses data produk Google atau Workspace, atau metode aplikasi utilitas berguna lainnya. Layanan lanjutan hanyalah wrapper ringan di sekitar Workspace atau REST API Google. Layanan lanjutan memberikan cakupan penuh REST API dan sering kali dapat melakukan lebih banyak hal daripada layanan bawaan, tetapi memerlukan kompleksitas kode yang lebih tinggi (meskipun masih lebih mudah digunakan daripada REST API itu sendiri).
Layanan lanjutan juga harus diaktifkan untuk project skrip sebelum menggunakannya. Jika memungkinkan, sebaiknya gunakan layanan bawaan karena lebih mudah digunakan dan dapat melakukan lebih banyak tugas berat daripada layanan lanjutan. Namun, beberapa Google API tidak memiliki layanan bawaan, sehingga layanan lanjutan mungkin menjadi satu-satunya opsi. BigQuery adalah salah satu contohnya; Tidak ada layanan bawaan yang tersedia, tetapi layanan lanjutan BigQuery tersedia. (Lebih baik daripada tidak ada layanan, bukan?)
Catatan: Jika Anda baru menggunakannya, BigQuery adalah layanan Google Cloud yang dapat melakukan kueri sederhana (atau kompleks) pada korpus data yang sangat besar, hingga hitungan terabyte, tetapi tetap dapat memberikan hasil dalam hitungan detik, bukan jam atau hari.
Mengakses Google Spreadsheet & Slide dari Apps Script
BigQuery hanya tersedia sebagai layanan lanjutan Apps Script. Namun, Google Spreadsheet dan Slide memiliki layanan Apps Script bawaan serta layanan lanjutan, misalnya, untuk mengakses fitur yang hanya ada di API dan tidak tersedia secara bawaan. Jika memungkinkan, pilih layanan bawaan, bukan layanan lanjutan, yang setara karena layanan bawaan menyediakan konstruksi tingkat yang lebih tinggi dan panggilan praktis, yang menyederhanakan pengembangan.
Catatan: Sebagai tinjauan sebelum mempelajari kode, pelajari layanan Spreadsheet serta layanan Slide.
Tugas 1. Membuat kueri pada BigQuery dan mencatat hasil ke Spreadsheet
Anda akan mengerjakan sebagian besar lab ini di tugas pertama ini. Setelah menyelesaikan bagian ini, berarti Anda telah menyelesaikan sekitar setengah dari keseluruhan lab ini.
Di bagian ini, Anda akan melakukan hal-hal berikut:
- Memulai project Google Apps Script baru
- Mengaktifkan akses ke layanan lanjutan BigQuery
- Membuka editor pengembangan dan memasukkan kode sumber aplikasi
- Melakukan proses otorisasi aplikasi (OAuth2)
- Menjalankan aplikasi yang mengirim permintaan ke BigQuery
- Melihat Spreadsheet Google baru yang dibuat dengan hasil dari BigQuery
Membuat project Apps Script baru
- Buat project Apps Script baru dengan membuka script.google.com. Untuk lab ini, klik link Buat Apps Script.

- Editor kode Apps Script akan terbuka:

-
Beri nama project Anda dengan mengklik nama project di bagian atas ("Untitled project" pada gambar di atas).
-
Di dialog Ganti Nama Project, beri nama project sesuai pilihan Anda (misalnya: "BigQuery", "Spreadsheet", "Demo Slide", dll.), lalu klik Ganti nama.
Mengaktifkan layanan lanjutan BigQuery
Aktifkan layanan lanjutan BigQuery untuk project baru Anda dan aktifkan BigQuery API.
- Klik ikon Tambahkan layanan di samping Layanan.

- Dalam dialog Tambahkan layanan, pilih layanan dan API yang berlaku.

- Buka Konsol Cloud, lalu pilih Navigation menu > APIs & Services > Library.

- Ketik atau tempel BigQuery API di kotak penelusuran, lalu pilih BigQuery API.

- Klik Enable untuk mengaktifkan BigQuery API jika diperlukan.

-
Kembali ke project Anda, dialog Tambahkan layanan seharusnya masih tetap terbuka.
-
Pilih BigQuery API, lalu klik Tambahkan untuk menutup.

Memasukkan dan menjalankan kode aplikasi Anda
Sekarang, Anda siap memasukkan kode aplikasi, melakukan proses otorisasi, dan membuat agar versi pertama aplikasi ini berfungsi.
- Salin kode di kotak di bawah ini dan tempelkan kode tersebut untuk mengganti semua kode yang ada di editor kode:
/**
* Hak Cipta 2018 Google LLC
*
* Dilisensikan berdasarkan Lisensi Apache, Versi 2.0 ("Lisensi");
* Anda dilarang menggunakan file ini kecuali dengan mematuhi Lisensi.
* Anda dapat memperoleh salinan Lisensi di apache.org/licenses/LICENSE-2.0.
*
* Kecuali diwajibkan oleh hukum yang berlaku atau disetujui secara tertulis, software
* didistribusikan berdasarkan Lisensi yang didistribusikan BERDASARKAN "APA ADANYA",
* TANPA JAMINAN ATAU KETENTUAN APA PUN, baik tertulis maupun tersirat.
* Baca Lisensi untuk bahasa tertentu yang mengatur izin dan
* batasan berdasarkan Lisensi.
*/
// Nama file untuk hasil data
var QUERY_NAME = "Kata-kata yang paling umum digunakan di semua karya Shakespeare";
// Ganti nilai ini dengan project ID Google Cloud API Anda
var PROJECT_ID = '<YOUR_PROJECT_ID>';
jika (!PROJECT_ID) menampilkan Error('Project ID diwajibkan pada penyiapan');
/**
* Menjalankan kueri pada BigQuery; menempatkan hasil di Spreadsheet Anda harus mengaktifkan
* layanan lanjutan BigQuery sebelum dapat menjalankan kode ini.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Menampilkan spreadsheet dengan hasil BigQuery
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Ganti sampel dengan kueri BigQuery Anda sendiri.
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;
// Tunggu hingga tugas BQ selesai (dengan backoff eksponensial).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Dapatkan semua hasil dari BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Tampilkan null jika tidak ada data yang ditampilkan.
jika (!rows) {
menampilkan Logger.log('Tidak ada baris yang ditampilkan.');
}
// Buat spreadsheet hasil yang baru.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Tambahkan header ke Spreadsheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Tambahkan hasilnya.
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());
}
-
Simpan file yang baru saja Anda buat dengan mengklik ikon Simpan project di panel menu atau dengan menekan Ctrl + S.
-
Ganti nama file dengan mengklik tiga titik di samping nama file, lalu klik Ganti nama.

- Ubah nama file menjadi bq-sheets-slides.gs, lalu tekan Enter.
Jadi, apa fungsi kode ini? Anda tahu bahwa kode tersebut menjalankan kueri pada BigQuery dan menulis hasilnya ke Spreadsheet Google baru, tetapi apa kueri ini?
- Lihat kode kueri di fungsi
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
Kueri ini menelusuri karya Shakespeare, yang merupakan bagian dari set data publik BigQuery, dan menampilkan 10 kata yang paling sering muncul dalam semua karya Shakespeare, yang diurutkan mulai dari yang paling populer. Bayangkan betapa (tidak) menyenangkannya melakukan pekerjaan ini secara manual, dan Anda akan memiliki sedikit gambaran tentang seberapa bergunanya BigQuery.
Hampir selesai! Project ID yang valid diperlukan untuk menetapkan variabel PROJECT_ID di bagian atas bq-sheets-slides.gs.
- Ganti
<YOUR_PROJECT_ID> dengan Project ID Anda yang ada di panel kiri.
Berikut adalah contoh kode dengan contoh project ID. Nilai PROJECT_ID Anda yang sebenarnya akan berbeda.
Contoh kode:
// Nama file untuk hasil data
var QUERY_NAME = "Kata-kata yang paling umum digunakan di semua karya Shakespeare";
// Ganti nilai ini dengan project ID Google Cloud API Anda
var PROJECT_ID = '<YOUR_PROJECT_ID>';
jika (!PROJECT_ID) menampikan Error('Project ID diwajibkan pada penyiapan');
Catatan: Dalam cuplikan kode ini, pernyataan if berfungsi mencegah aplikasi melanjutkan tahap tanpa project ID.
Catatan: Jika pemilih menu tidak responsif dan tidak dapat dioperasikan, muat ulang halaman.
-
Simpan file dan jalankan kode dengan mengklik opsi Jalankan di panel menu.
-
Kemudian, klik Tinjau Izin.
Catatan: Jika Anda mendapatkan error Exception: Service BigQuery API has not been enabled for your Apps.., hapus Layanan BigQuery API, lalu tambahkan lagi.
- Dalam dialog Pilih akun dari qwiklabs.net, klik Nama pengguna Anda, lalu klik Izinkan.
Catatan: Setelah Anda mengizinkan aplikasi, Anda tidak perlu mengulangi proses ini pada tiap eksekusi. Anda baru akan melihat layar dialog ini lagi di bagian "Memasukkan data hasil ke dalam presentasi slide" di LAB ini, yang meminta izin pengguna untuk membuat dan mengelola presentasi Google Slide.
- Kotak pesan kecil akan terbuka di bagian atas saat fungsi berjalan.

Kotak pesan akan hilang setelah fungsi selesai. Jadi jika Anda tidak melihatnya, fungsi tersebut mungkin sudah selesai berjalan.
- Buka Google Drive Anda dan cari Spreadsheet Google baru yang berjudul Kata-kata yang paling umum digunakan di semua karya Shakespeare atau judul yang telah Anda tetapkan ke variabel
QUERY_NAME.

- Buka spreadsheet, dan Anda akan melihat 10 baris kata dan jumlah totalnya yang diurutkan dalam urutan menurun.

Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat kueri pada BigQuery dan mencatat hasilnya ke Spreadsheet
Ringkasan
Jadi, apa yang baru saja terjadi? Anda menjalankan kode yang membuat kueri pada semua karya Shakespeare (bukan data dalam jumlah BESAR, tetapi tentu saja lebih banyak teks daripada yang dapat Anda pindai sendiri secara mudah dengan melihat tiap kata dalam tiap drama, mengelola jumlah kata tersebut, lalu mengurutkannya dalam urutan tampilan menurun). Anda tidak hanya meminta BigQuery melakukannya untuk Anda, tetapi juga dapat menggunakan layanan bawaan di Apps Script untuk Google Spreadsheet guna mengatur data agar mudah digunakan.
Anda selalu dapat menguji kueri di konsol BigQuery sebelum menjalankannya di Apps Script. Antarmuka pengguna BigQuery tersedia untuk developer.
Membuka konsol BigQuery
- Di Konsol Google Cloud, pilih Navigation menu > BigQuery.
Kotak pesan Welcome to BigQuery in the Cloud Console akan terbuka. Kotak pesan ini menyediakan link ke panduan memulai dan catatan rilis.
- Klik Done.
Konsol BigQuery terbuka.
- Masukkan kode Anda di editor Kueri, lalu klik Run:
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

Tugas 2. Membuat diagram di Google Spreadsheet
Kembali di Editor Skrip. Sejauh ini, Anda telah membuat kode aplikasi yang membuat kueri pada karya Shakespeare, mengurutkan, lalu menampilkan hasilnya di Spreadsheet. Di dalam kode, fungsi runQuery() berkomunikasi dengan BigQuery dan mengirimkan hasilnya ke Spreadsheet. Sekarang, Anda akan menambahkan kode untuk membuat diagram dari data. Di bagian ini, Anda akan membuat fungsi baru bernama createColumnChart() yang memanggil metode newChart() Spreadsheet untuk membuat diagram dari data.
Fungsi createColumnChart() mendapatkan spreadsheet dengan data dan meminta diagram kolom dengan semua data. Rentang data dimulai di sel A2 karena baris pertama berisi header kolom, bukan data.
- Buat diagram: Tambahkan fungsi
createColumnChart() ke bq-sheets-slides.gs persis setelah runQuery(). {setelah baris kode terakhir}:
/**
* Menggunakan data spreadsheet untuk membuat diagram kolom.
* @param {Spreadsheet} Spreadsheet berisi data hasil
* @returns {EmbeddedChart} memvisualisasikan hasil
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Ambil (satu-satunya) Spreadsheet yang terisi
var sheet = spreadsheet.getSheets()[0];
// Rentang data di Spreadsheet adalah dari sel A2 sampai B11
var START_CELL = 'A2'; // lewati baris header
var END_CELL = 'B11';
// Tempatkan diagram pada Spreadsheet yang dimulai pada sel E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Buat & tempatkan diagram pada Spreadsheet menggunakan parameter di atas.
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);
}
-
Spreadsheet yang ditampilkan: Dalam kode di atas, createColumnChart() memerlukan objek spreadsheet, jadi sesuaikan aplikasi untuk menampilkan objek spreadsheet agar dapat diteruskan ke createColumnChart(). Setelah melakukan logging atas keberhasilan pembuatan Spreadsheet Google, tampilkan objek di akhir runQuery().
-
Ganti baris terakhir (dimulai dengan Logger.log) dengan kode berikut:
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// Tampilkan objek spreadsheet untuk digunakan nanti.
tampilkan spreadsheet;
}
- Jalankan fungsi
createBigQueryPresentation(): Memisahkan fungsi BigQuery dan pembuatan diagram secara logis adalah ide yang bagus. Buat fungsi createBigQueryPresentation() untuk menjalankan aplikasi, dengan memanggil keduanya dan createColumnChart(). Kode yang Anda tambahkan akan terlihat seperti ini:
/**
* Menjalankan kueri pada BigQuery, menambahkan data dan diagram di Spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
createColumnChart(spreadsheet);
}
- Letakkan fungsi
createBigQueryPresentation() persis setelah blok kode ini:
// Nama file untuk hasil data
var QUERY_NAME = "Kata-kata yang paling umum digunakan di semua karya Shakespeare";
// Ganti nilai ini dengan project ID Google Cloud API Anda
var PROJECT_ID = '<YOUR_PROJECT_ID>';
jika (!PROJECT_ID) menampilkan Error('Project ID diwajibkan pada penyiapan');
- Buat kode agar lebih dapat digunakan kembali: Anda telah melakukan 2 langkah penting di atas: menampilkan objek spreadsheet dan membuat fungsi yang dapat berjalan. Bagaimana jika ada rekan kerja yang ingin menggunakan kembali
runQuery() dan tidak ingin URL dicatat ke dalam log?
Agar runQuery() lebih mudah dipahami untuk penggunaan umum, pindahkan baris log tersebut. Di mana tempat terbaik untuk memindahkannya? Jika Anda menebak createBigQueryPresentation(), Anda benar!
Setelah memindahkan baris log, tampilannya akan seperti ini:
/**
* Menjalankan kueri pada BigQuery, menambahkan data dan diagram di Spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Dengan perubahan di atas, bq-sheets-slides.js Anda sekarang akan terlihat seperti berikut (kecuali untuk PROJECT_ID):
/**
* Hak Cipta 2018 Google LLC
*
* Dilisensikan berdasarkan Lisensi Apache, Versi 2.0 ("Lisensi");
* Anda dilarang menggunakan file ini kecuali dengan mematuhi Lisensi.
* Anda dapat memperoleh salinan Lisensi di apache.org/licenses/LICENSE-2.0.
*
* Kecuali diwajibkan oleh hukum yang berlaku atau disetujui secara tertulis, software
* didistribusikan berdasarkan Lisensi yang didistribusikan BERDASARKAN "APA ADANYA",
* TANPA JAMINAN ATAU KETENTUAN APA PUN, baik tertulis maupun tersirat.
* Baca Lisensi untuk bahasa tertentu yang mengatur izin dan
* batasan berdasarkan Lisensi.
*/
// Nama file untuk hasil data
var QUERY_NAME = "Kata-kata yang paling umum digunakan di semua karya Shakespeare";
// Ganti nilai ini dengan project ID Google Cloud API Anda
var PROJECT_ID = '<YOUR_PROJECT_ID>';
jika (!PROJECT_ID) menampilkan Error('Project ID diwajibkan pada penyiapan');
/**
* Menjalankan kueri pada BigQuery, menambahkan data dan diagram pada Spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
/**
* Menjalankan kueri pada BigQuery; menempatkan hasilnya ke Spreadsheet. Anda harus mengaktifkan
* layanan lanjutan BigQuery sebelum dapat menjalankan kode ini.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Menampilkan spreadsheet dengan hasil BigQuery
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Ganti sampel dengan kueri BigQuery Anda sendiri.
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;
// Tunggu hingga tugas BQ selesai (dengan backoff eksponensial).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Dapatkan semua hasil dari BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Tampilkan null jika tidak ada data yang ditampilkan.
jika (!rows) {
menampilkan Logger.log('Tidak ada baris yang ditampilkan.');
}
// Buat spreadsheet hasil yang baru.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Tambahkan header ke Spreadsheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Tambahkan hasilnya.
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;
}
}
// Mulai menyimpan data di baris 2, col 1
var START_ROW = 2; // lewati baris header
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// Hasilkan objek spreadsheet untuk digunakan nanti.
tampilkan spreadsheet;
}
/**
* Menggunakan data spreadsheet untuk membuat diagram kolom.
* @param {Spreadsheet} Spreadsheet berisi data hasil
* @returns {EmbeddedChart} memvisualisasikan hasil
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Ambil (satu-satunya) Spreadsheet yang terisi
var sheet = spreadsheet.getSheets()[0];
// Rentang data di Spreadsheet adalah dari sel A2 sampai B11
var START_CELL = 'A2'; // lewati baris header
var END_CELL = 'B11';
// Tempatkan diagram pada Spreadsheet yang dimulai pada sel E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Buat & tempatkan diagram pada Spreadsheet menggunakan parameter di atas.
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);
}
-
Simpan file.
-
Kemudian di panel menu, klik runQuery dan pilih createBigQueryPresentation dari dropdown.
-
Kemudian klik Run.
Setelah menjalankannya, Anda akan mendapatkan Spreadsheet Google lain di Google Drive Anda, tetapi kali ini, diagram akan muncul di Spreadsheet di samping data:

Tugas 3. Memasukkan data hasil ke dalam presentasi slide
Bagian terakhir lab ini berisi pembuatan presentasi Google Slide baru, pengisian judul dan subjudul pada slide judul, lalu penambahan 2 slide baru, satu untuk tiap sel data dan satu lagi untuk diagram.
- Buat presentasi slide: Mulai dengan membuat presentasi slide baru, lalu tambahkan judul dan subjudul ke slide judul default yang Anda dapatkan dengan semua presentasi baru. Semua pekerjaan pada presentasi slide dilakukan dalam fungsi
createSlidePresentation(), yang Anda tambahkan ke bq-sheets-slides.gs persis setelah kode fungsi createColumnChart():
/**
* Buat presentasi dengan diagram dan data spreadsheet
* @param {Spreadsheet} Spreadsheet dengan data hasil
* @param {EmbeddedChart} Diagram spreadsheet untuk disematkan pada slide
* @returns {Presentation} Presentasi slide dengan hasil
*/
function createSlidePresentation(spreadsheet, diagram) {
// Buat presentasi baru.
var deck = SlidesApp.create(QUERY_NAME);
// Isi slide judul.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
- Tambahkan tabel data: Langkah berikutnya dalam
createSlidePresentation() adalah mengimpor data sel dari Spreadsheet Google ke dalam presentasi slide baru. Tambahkan cuplikan kode ini ke fungsi createSlidePresentation():
// Rentang data yang akan disalin adalah dari sel A1 sampai B11
var START_CELL = 'A1'; // termasuk baris header
var END_CELL = 'B11';
// Tambahkan slide tabel dan sisipkan tabel kosong padanya dari
// dimensi rentang data; akan gagal jika Spreadsheet kosong.
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);
// Isi tabel dengan data spreadsheet.
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]));
}
}
- Impor diagram: Langkah terakhir dalam
createSlidePresentation() adalah membuat satu slide lagi, mengimpor diagram dari spreadsheet, dan menampilkan objek Presentation. Tambahkan cuplikan kode terakhir ini ke fungsi:
// Tambahkan slide diagram dan sisipkan diagram padanya.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Tampilkan objek presentasi untuk digunakan nanti.
tampilkan presentasi;
}
- Tampilkan diagram: Sekarang, setelah fungsi akhir kita lengkap, lihat kembali signature-nya. Tentu saja,
createSlidePresentation() memerlukan objek spreadsheet dan diagram. Anda telah menyesuaikan runQuery() untuk menampilkan objek Spreadsheet, tetapi sekarang Anda perlu membuat perubahan serupa pada createColumnChart() untuk menampilkan objek diagram (EmbeddedChart). Lakukan dengan kembali ke aplikasi Anda dan tambahkan satu baris terakhir di akhir createColumnChart():
// Tampilkan objek diagram untuk digunakan nanti
tampilkan diagram;
}
- Update
createBigQueryPresentation(): Karena createColumnChart() menampilkan diagram, Anda perlu menyimpan diagram tersebut ke variabel, lalu meneruskan spreadsheet dan diagram ke createSlidePresentation(). Karena Anda me-logging URL spreadsheet yang baru dibuat, Anda juga dapat me-logging URL presentasi slide yang baru. Ganti blok kode ini:
/**
* Menjalankan kueri pada BigQuery, menambahkan data dan diagram di Spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Dengan blok kode ini:
/**
* Menjalankan kueri pada BigQuery, menambahkan data dan diagram di Spreadsheet,
* serta menambahkan data dan diagram ke presentasi slide yang baru.
*/
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());
}
Setelah semua update diterapkan, bq-sheets-slides.gs Anda sekarang akan terlihat seperti ini, kecuali untuk PROJECT_ID:
bq-sheets-slides.gs - final version
// Nama file untuk hasil data
var QUERY_NAME = "Kata-kata yang paling umum digunakan di semua karya Shakespeare";
// Ganti nilai ini dengan project ID Google Cloud API Anda
var PROJECT_ID = '<YOUR_PROJECT_ID>';
jika (!PROJECT_ID) menampilkan Error('Project ID diwajibkan pada penyiapan');
/**
* Menjalankan kueri pada BigQuery; menempatkan hasil di Spreadsheet. Anda harus mengaktifkan
* layanan lanjutan BigQuery sebelum dapat menjalankan kode ini.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Menampilkan spreadsheet dengan hasil BigQuery
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Ganti sampel dengan kueri BigQuery Anda sendiri.
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;
// Tunggu hingga tugas BQ selesai (dengan backoff eksponensial).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Dapatkan semua hasil dari BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Tampilkan null jika tidak ada data yang ditampilkan.
jika (!rows) {
menampilkan Logger.log('Tidak ada baris yang ditampilkan.');
}
// Buat spreadsheet hasil yang baru.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Tambahkan header ke Spreadsheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Tambahkan hasilnya.
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;
}
}
// Mulai menyimpan data di baris 2, kolom 1
var START_ROW = 2; // lewati baris header
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
// Tampilkan objek spreadsheet untuk digunakan nanti.
tampilkan spreadsheet;
}
/**
* Menggunakan data spreadsheet untuk membuat diagram kolom.
* @param {Spreadsheet} Spreadsheet berisi data hasil
* @returns {EmbeddedChart} memvisualisasikan hasil
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Ambil (satu-satunya) Spreadsheet yang terisi
var sheet = spreadsheet.getSheets()[0];
// Rentang data di Spreadsheet adalah dari sel A2 sampai B11
var START_CELL = 'A2'; // lewati baris header
var END_CELL = 'B11';
// Tempatkan diagram pada Spreadsheet yang dimulai pada sel E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Buat & tempatkan diagram pada Spreadsheet menggunakan parameter di atas.
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);
// Tampilkan objek diagram untuk digunakan nanti.
tampilkan diagram;
}
/**
* Buat presentasi dengan diagram & data spreadsheet
* @param {Spreadsheet} Spreadsheet dengan data hasil
* @param {EmbeddedChart} Diagram spreadsheet untuk disematkan pada slide
* @returns {Presentation} Menampilkan presentasi slide dengan hasil
* @see http://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, diagram) {
// Buat presentasi yang baru.
var deck = SlidesApp.create(QUERY_NAME);
// Isi slide judul.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
// Rentang data yang akan disalin dari sel A1 ke B11
var START_CELL = 'A1'; // sertakan baris header
var END_CELL = 'B11';
// Tambahkan slide tabel dan sisipkan tabel kosong padanya dari
// dimensi rentang data; akan gagal jika Spreadsheet kosong.
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);
// Isi tabel dengan data spreadsheet.
untuk (var i = 0; i < sheetValues.length; i++) {
untuk (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
// Tambahkan slide diagram dan sisipkan diagram padanya.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Tampilkan objek presentasi untuk digunakan nanti.
tampilkan presentasi;
}
/**
* Menjalankan kueri pada BigQuery, menambahkan data dan diagram di Spreadsheet,
* serta menambahkan data dan diagram ke presentasi slide yang baru.
*/
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());
}
- Simpan dan jalankan
createBigQueryPresentation() lagi. Sebelum dijalankan, Anda akan diminta untuk memberikan satu set izin lagi untuk melihat dan mengelola presentasi Google Slide Anda.
- Buka Drive Saya dan lihat bahwa selain Spreadsheet yang dibuat, Anda juga akan melihat presentasi Slide baru dengan 3 slide (judul, tabel data, diagram data), seperti yang ditunjukkan di bawah ini:



Selamat!
Anda telah membuat aplikasi yang memanfaatkan kedua sisi Google Cloud dengan melakukan permintaan BigQuery yang membuat kueri pada salah satu set data publiknya, membuat Spreadsheet Google baru untuk menyimpan hasilnya, menambahkan diagram berdasarkan data yang diambil, dan terakhir membuat presentasi Google Slide yang menampilkan hasil serta diagram dalam spreadsheet.
Itulah yang telah Anda lakukan secara teknis. Secara umum, Anda telah beralih dari analisis big data ke hal yang dapat Anda presentasikan kepada pemangku kepentingan. Semuanya dilakukan dalam kode, semuanya dilakukan secara otomatis. Sekarang Anda dapat mengikuti lab ini dan menyesuaikannya untuk project Anda sendiri.
Langkah berikutnya/Pelajari lebih lanjut
Kode yang ditampilkan dalam lab ini tersedia juga di GitHub. Lab mencoba tetap sinkron dengan repositori. Berikut referensi tambahan untuk membantu Anda mempelajari lebih dalam materi yang dibahas dalam lab ini dan menjelajahi cara lain untuk mengakses alat developer Google secara terprogram.
Dokumentasi
Video terkait dan umum
Berita & info terbaru terkait dan umum
Manual Terakhir Diperbarui pada 28 Juli 2025
Lab Terakhir Diuji pada 28 Juli 2025
Hak cipta 2026 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.