มีเครื่องมือมากมายสําหรับนักวิทยาศาสตร์ข้อมูลเพื่อวิเคราะห์ข้อมูลขนาดใหญ่ แต่เมื่อสิ้นสุดวันแล้ว คุณยังต้องอธิบายผลลัพธ์ให้ผ่านการจัดการไม่ได้อีก มีผู้ถือหุ้นจํานวนมากในกระดาษหรือฐานข้อมูลที่แทบจะเป็นเรื่องยาก Codelab ของ Google Apps Script ขั้นกลางนี้ใช้ประโยชน์จากแพลตฟอร์มสําหรับนักพัฒนาซอฟต์แวร์ของ Google ทั้ง G Suite และ Google Cloud Platform (GCP) เพื่อช่วยคุณในขั้นตอนสุดท้าย
เครื่องมือสําหรับนักพัฒนาซอฟต์แวร์ของ Google Cloud จะให้คุณวิเคราะห์ข้อมูลเชิงลึก จากนั้นนําผลลัพธ์เหล่านั้นมาใส่ไว้ในสเปรดชีต และสร้างงานนําเสนอสไลด์ร่วมกับข้อมูลนั้น ซึ่งจะให้ขั้นตอนที่เหมาะสมกว่าในการส่งผลลัพธ์ไปยังการจัดการ Codelab นี้ครอบคลุม BigQuery API ของ GCP (เป็นบริการขั้นสูงของ Apps Script) และบริการ Apps Script ในตัวสําหรับ Google ชีตและ Google สไลด์
แรงจูงใจ/ศิลปะเดิม
แอปตัวอย่างใน Codelab นี้ได้รับแรงบันดาลใจจากตัวอย่างโค้ดอื่นๆ เหล่านี้...
- ตัวอย่างแอป BigQuery ของ Google Apps Script และโอเพนซอร์สใน GitHub
- แอปตัวอย่างที่แสดงในวิดีโอสําหรับนักพัฒนาซอฟต์แวร์การสร้างสไลด์จากข้อมูลสเปรดชีต และเผยแพร่ในบล็อกโพสต์นี้
- ตัวอย่างแอปที่แสดงใน Codelab ของ Google สไลด์ API
แม้ว่าแอปตัวอย่าง Codelab ของ API สไลด์จะมี BigQuery และสไลด์ แต่แตกต่างจากแอปตัวอย่าง Codelab นี้ด้วยหลายวิธี
- แอป Node.js เทียบกับแอป Apps Script ของเรา
- ใช้ REST API ขณะใช้บริการ Apps Script
- ใช้ Google ไดรฟ์ ไม่ใช่ Google ชีต ในขณะที่แอปนี้ใช้ชีต
สําหรับ Codelab นี้ เราต้องการนําเทคโนโลยีมารวมไว้ในแอปเดียว ขณะเดียวกันก็แสดงฟีเจอร์และ API จากทั่วทั้ง Google Cloud ให้มีลักษณะคล้ายกับกรณีการใช้งานการใช้งานจริงที่ดีกว่า เป้าหมายคือการสร้างแรงบันดาลใจให้คุณใช้ความคิดและพิจารณาใช้ประโยชน์จากทั้ง GCP และ AMP Suuite เพื่อแก้ไขปัญหาที่ท้าทายสําหรับองค์กรหรือลูกค้า
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Google Apps Script กับบริการหลายอย่างของ Google (GCP & G Suite)
- วิธีใช้ Google BigQuery เพื่อวิเคราะห์ข้อมูลขนาดใหญ่
- วิธีสร้างสเปรดชีตใน Google ชีตและข้อมูล
- วิธีสร้างแผนภูมิใหม่ในชีต
- วิธีโอนแผนภูมิและข้อมูลจากชีตไปยังงานนําเสนอใน Google สไลด์
สิ่งที่ต้องมี
- การเข้าถึงอินเทอร์เน็ตและเว็บเบราว์เซอร์
- บัญชี Google (บัญชี G Suite อาจต้องได้รับการอนุมัติจากผู้ดูแลระบบ)
- ทักษะพื้นฐานของ JavaScript
- ความรู้เกี่ยวกับการพัฒนา Apps Script อาจเป็นประโยชน์แต่ไม่จําเป็นต้องใช้
คุณจะใช้โค้ดห้องทดลอง/บทแนะนํานี้อย่างไร
คุณจะให้คะแนนประสบการณ์ในการใช้เครื่องมือสําหรับนักพัฒนาซอฟต์แวร์และ API ของ G Suite อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Apps Script โดยเฉพาะอย่างไร
คุณจะให้คะแนนประสบการณ์ในการใช้เครื่องมือสําหรับนักพัฒนาซอฟต์แวร์และ API ของ GCP อย่างไร
เมื่อรู้แล้วว่า Codelab นี้เกี่ยวกับอะไรกันบ้าง แล้วคุณจะทําอะไรกันแน่
- รับตัวอย่าง Apps Script-BigQuery ที่มีอยู่และเริ่มต้นใช้งาน
- ดูวิธีแสดงตัวอย่างการค้นหาไปยัง BigQuery และวิธีดูผลลัพธ์จากตัวอย่างดังกล่าว
- สร้างสเปรดชีตใน Google ชีตและป้อนข้อมูลผลลัพธ์จาก BigQuery ลงในสเปรดชีต
- แก้ไขโค้ดเล็กน้อยเพื่อแก้ไขข้อมูลที่แสดงผลและเพิ่มลงในชีตเล็กน้อย
- ใช้บริการชีตใน Apps Script เพื่อสร้างแผนภูมิสําหรับข้อมูลจาก BigQuery
- ใช้บริการสไลด์เพื่อสร้างงานนําเสนอสไลด์ใหม่
- เพิ่มชื่อและคําบรรยายลงในสไลด์ชื่อเริ่มต้นที่สร้างขึ้นโดยอัตโนมัติสําหรับสไลด์ใหม่ทั้งหมด
- สร้างสไลด์ใหม่พร้อมตารางข้อมูล แล้วนําเข้าเซลล์ข้อมูลในชีต
- เพิ่มสไลด์ใหม่และเพิ่มแผนภูมิสเปรดชีต
มาเริ่มกันด้วยข้อมูลเบื้องต้นเกี่ยวกับ Apps Script, BigQuery, ชีต และสไลด์
Google Apps Script และ BigQuery
Google Apps Script เป็นแพลตฟอร์มการพัฒนา G Suite ที่ทํางานในระดับสูงกว่าการใช้ Google REST API โปรแกรมนี้เป็นสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และโฮสติ้งแอปพลิเคชันแบบ Serverless ที่ผู้เรียนเข้าถึงทักษะได้หลายระดับ ประโยคเดียวคือ "Apps Script เป็นรันไทม์ของ JavaScript แบบ Serverless สําหรับระบบอัตโนมัติ ส่วนขยาย และการผสานรวมของ G Suite"
โดยเป็น JavaScript ฝั่งเซิร์ฟเวอร์ที่คล้ายกับ Node.js แต่มุ่งเน้นที่การผสานรวมกับ G Suite และบริการอื่นๆ ของ Google อย่างแน่นหนา แทนที่จะโฮสต์แอปพลิเคชันที่ทํางานตามเหตุการณ์อย่างรวดเร็ว และยังมีสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ที่อาจต่างจากสิ่งที่คุณคุ้นเคยทุกประการ Apps Script ช่วยให้คุณทําสิ่งต่อไปนี้ได้
- พัฒนาในโปรแกรมแก้ไขโค้ดบนเบราว์เซอร์ได้ แต่เลือกพัฒนาในเครื่องได้โดยใช้
clasp
ซึ่งเป็นเครื่องมือการติดตั้งใช้งานบรรทัดคําสั่งสําหรับ Apps Script - เขียนโค้ดใน JavaScript เวอร์ชันพิเศษที่ปรับแต่งเพื่อเข้าถึง G Suite และบริการอื่นๆ ของ Google หรือภายนอก (ผ่าน Apps Script
URLfetch
หรือบริการJdbc
) - หลีกเลี่ยงการเขียนรหัสการให้สิทธิ์เนื่องจาก Apps Script จัดการให้คุณ
- ไม่ต้องโฮสต์แอป แอปก็ทํางานและทํางานบนเซิร์ฟเวอร์ Google ในระบบคลาวด์ได้
หมายเหตุ: โดยส่วนใหญ่แล้วจะอยู่นอกขอบเขตการใช้ Codelab นี้เพื่อสอน Apps Script ให้กับคุณ เรามีแหล่งข้อมูลออนไลน์มากมายที่ช่วยคุณได้ เอกสารประกอบอย่างเป็นทางการยังมีภาพรวมที่มีคู่มือเริ่มใช้งานฉบับย่อ บทแนะนํา และวิดีโอด้วย และสุดท้าย อย่าลืม อย่าลืม Codelab แนะนําแอปของ Apps Script ซึ่งควรกรอกให้เสร็จก่อนเริ่มใช้รหัสนี้
Apps Script อินเทอร์เฟซของเทคโนโลยี Google อื่นๆ ใน 2 วิธีดังนี้
- บริการในตัว/เนทีฟ
- บริการขั้นสูง
บริการในตัวเป็นวิธีระดับสูงที่คุณใช้เพื่อเข้าถึงข้อมูลผลิตภัณฑ์ของ G Suite หรือ Google หรือวิธีการอื่นๆ ที่เป็นประโยชน์ได้ บริการขั้นสูงเป็นเพียง Wrapper เนื้อหาน้อยรอบ G Suite หรือ Google REST API บริการขั้นสูงมี REST API ที่ครอบคลุมและมักจะทําได้มากกว่าบริการในตัว แต่ต้องใช้โค้ดที่ซับซ้อนกว่า (แต่ก็ยังใช้งานง่ายกว่า REST API เอง) บริการขั้นสูงจะต้องได้รับการเปิดใช้งานสําหรับโปรเจ็กต์สคริปต์ก่อนที่จะใช้บริการ
หากเป็นไปได้ นักพัฒนาแอปควรเลือกใช้บริการในตัวเนื่องจากใช้งานง่ายและยกน้ําหนักมากกว่าบริการขั้นสูง อย่างไรก็ตาม Google APIs บางอย่างไม่มีบริการในตัว ดังนั้นบริการขั้นสูงจึงอาจเป็นตัวเลือกเดียว Google BigQuery คือตัวอย่างหนึ่ง... ไม่มีบริการในตัว แต่มีบริการ BigQuery ขั้นสูงอยู่ (ดีกว่าไม่มีบริการใช่ไหม) หากเพิ่งเริ่มใช้ BigQuery เป็นบริการ GCP ที่ช่วยให้คุณค้นหาข้อมูล (หรือซับซ้อน) เกี่ยวกับคลังข้อมูลขนาดใหญ่มากๆ ได้ เช่น ตามลําดับหลายเทราไบต์ แต่ยังคงระบุผลลัพธ์เป็นวินาทีได้
การเข้าถึง Google ชีตและสไลด์จาก Apps Script
ทั้ง Google ชีตและสไลด์จะมีบริการในตัว (เช่นเดียวกับบริการขั้นสูง ซึ่งคุณใช้เพื่อเข้าถึงฟีเจอร์ที่พบใน API เท่านั้น) ดูเอกสารสําหรับทั้งบริการชีตและสไลด์ในตัวก่อนที่จะข้ามไปยังโค้ด นอกจากนี้ยังมีเอกสารสําหรับบริการขั้นสูงด้วย เอกสารเหล่านี้มีไว้สําหรับชีตและสไลด์ตามลําดับ
บทนำ
เราจะลองใช้ Codelab เล็กๆ น้อยๆ นี้ในการทํางานแรก อันที่จริงแล้ว เมื่อทําเสร็จแล้ว อีกประมาณครึ่งทาง Codelab ก็จะเสร็จ แยกย่อยเป็นส่วนย่อยหลายส่วน คุณจะทําสิ่งต่อไปนี้ได้ทั้งหมด
- เริ่มต้นโครงการ Google Apps Script ใหม่
- เปิดใช้บริการขั้นสูงของ BigQuery
- ไปที่เครื่องมือแก้ไขการพัฒนาและป้อนซอร์สโค้ดของแอปพลิเคชัน
- ทําตามขั้นตอนการให้สิทธิ์แอป (OAuth2)
- เรียกใช้แอปพลิเคชันที่ส่งคําขอไปยัง BigQuery
- ดูสเปรดชีตใหม่ใน Google ชีตที่สร้างขึ้นด้วยผลลัพธ์จาก BigQuery
ตั้งค่า
- ก) สร้างโปรเจ็กต์ Apps Script ใหม่โดยไปที่
script.google.com
สายผลิตภัณฑ์ของ G Suite จะแตกต่างกันไป วิธีสร้างโปรเจ็กต์ใหม่อาจแตกต่างกันไปตามเวอร์ชันที่คุณใช้ หากเพิ่งเริ่มใช้บัญชี Gmail และยังเป็นโปรเจ็กต์ที่กําลังพัฒนาอยู่ คุณจะเห็นหน้าจอว่างพร้อมด้วยปุ่มในการสร้างโปรเจ็กต์แรก
ข) มิเช่นนั้น คุณอาจเห็นโปรเจ็กต์ทั้งหมดและปุ่ม +ใหม่ ขนาดใหญ่ที่ด้านซ้ายบน ดังนั้นให้คลิกโปรเจ็กต์
ค) หากไม่ตรงกับข้อใดข้อหนึ่งข้างต้น หน้าจออาจมีลักษณะเหมือนด้านล่างนี้ หากใช่ ให้ค้นหาไอคอนเมนู hamburger ที่มุมซ้ายบนแล้วเลือก +สคริปต์ใหม่
d) สําหรับผู้ที่ชื่นชอบบรรทัดคําสั่ง เครื่องมือของคุณคือ clasp
กล่าวอย่างเจาะจงคือ คุณจะเรียกใช้คําสั่ง clasp create
e) ขั้นตอนสุดท้ายในการสร้างโปรเจ็กต์สคริปต์ใหม่คือไปที่ลิงก์ทางลัด: https://script.google.com/create
- ไม่ว่าคุณจะใช้เทคนิคใดในการเริ่มโครงการใหม่ สิ่งที่สําคัญคือสิ่งที่คุณควรจะถูกวางไว้ในเครื่องมือแก้ไขโค้ดของ Apps Script ซึ่งหน้าจอมีลักษณะดังนี้
- คลิก File > Save แล้วตั้งชื่อโปรเจ็กต์
- ต่อไป คุณจะต้องสร้างโปรเจ็กต์ Google Cloud Console เพื่อเรียกใช้การค้นหา BigQuery
- สร้างโปรเจ็กต์ใหม่ ตั้งชื่อ เลือกบัญชีสําหรับการเรียกเก็บเงิน แล้วคลิกสร้าง
- เมื่อสร้างโปรเจ็กต์เสร็จสิ้น การแจ้งเตือนจะปรากฏขึ้นที่มุมขวาบนของหน้า คลิกที่รายการ Create Project: <Project Name> เพื่อเปิดโปรเจ็กต์
- คลิกไอคอนเมนู
ที่ด้านซ้ายบน แล้วไปยัง API และ &Services; > Credentials คลิกแท็บหน้าจอคํายินยอม OAuth (ลิงก์โดยตรง)
- ในช่อง Application name ให้ป้อน "Big Data Codelab" แล้วคลิกปุ่มบันทึกที่ด้านล่าง
- คลิกไอคอน 3 จุด
ที่ด้านขวาบนเพื่อขยายเมนู แล้วเลือกการตั้งค่าโปรเจ็กต์ (ลิงก์โดยตรง)
- คัดลอกค่าที่แสดงอยู่ในส่วนหมายเลขโปรเจ็กต์ (มีช่องรหัสผลิตภัณฑ์แยกต่างหาก เราจะใช้ใน Codelab ในภายหลัง)
- กลับไปที่เครื่องมือแก้ไข App Script ให้คลิกทรัพยากรและโปรเจ็กต์ Cloud Platform
- ป้อนหมายเลขโครงการลงในช่องข้อความ แล้วคลิกตั้งค่าโครงการ เมื่อเห็นข้อความแจ้ง ให้คลิกยืนยัน
- เมื่อเสร็จแล้วให้คลิกปิดเพื่อปิดกล่องโต้ตอบ
- เมื่อตั้งค่าโปรเจ็กต์ใหม่แล้ว คุณต้องเปิดใช้บริการขั้นสูงของ BigQuery ดังนั้นให้ดึงทรัพยากร -> บริการของ Google ขั้นสูง แล้วพลิกเปิดบิตสําหรับ BigQuery API
- หมายเหตุที่สถานะด้านล่าง &&tt;บริการเหล่านี้ต้องเปิดใช้ใน "Google Cloud Platform API Dashboard" ด้วย ดังนั้นให้คลิกลิงก์ที่เปิดแท็บเบราว์เซอร์อื่นไปยังคอนโซลของนักพัฒนาซอฟต์แวร์ หรือเรียกสั้นๆ "devconsole"
- ที่ devconsole คลิกปุ่ม +เปิดใช้ API และบริการที่ด้านบน ค้นหา "bigquery" เลือก BigQuery API (ไม่ใช่ API การโอนข้อมูล BigQuery) และคลิกเปิดใช้เพื่อเปิด เปิดแท็บเบราว์เซอร์นี้ค้างไว้
หมายเหตุ: หลังจากเปิดใช้ API แล้ว คุณอาจเห็นหมายเหตุในหน้านี้โดยระบุว่า &&tt;;หากต้องการใช้ API นี้ คุณต้องสร้างข้อมูลเข้าสู่ระบบ...," แต่ไม่ต้องกังวล! ในตอนนี้ Apps Script จะดูแลขั้นตอนนี้ให้คุณ - กลับไปที่แท็บเบราว์เซอร์สําหรับแก้ไขโค้ด คุณจะยังอยู่ในเมนูขั้นสูงของ Google Services ดังนั้น ให้คลิกตกลงเพื่อปิดกล่องโต้ตอบ จะอยู่ในโปรแกรมแก้ไขโค้ด คลิกชื่อโครงการที่ด้านบนแล้วตั้งชื่อตามต้องการ เช่น "quot;BigQuery Demo" หรือที่คล้ายกัน" โดยเราจะตั้งชื่อให้ชื่อว่า "miles Mileline"
ตอนนี้คุณก็พร้อมที่จะป้อนรหัสแอปพลิเคชันแล้ว เข้าสู่กระบวนการให้สิทธิ์ และทําให้การนําทางแรกเริ่มของแอปพลิเคชันนี้ใช้งานได้
อัปโหลดและเรียกใช้
- คัดลอกโค้ดในช่องด้านล่างแล้ววางทุกอย่างในโปรแกรมแก้ไขโค้ดด้วย
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see http://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 BQ 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 new 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());
}
ตอนนี้ให้บันทึกไฟล์ที่คุณเพิ่งสร้าง แต่เปลี่ยนชื่อจาก Code.gs
เป็น bq-sheets-slides.js
แล้วโค้ดนี้ทําอะไรได้บ้าง เราได้แจ้งให้คุณทราบแล้วว่าเป็นการค้นหา BigQuery และเขียนผลลัพธ์ลงในสเปรดชีตใหม่ใน Google ชีต แต่การค้นหานี้คืออะไร คุณจะเห็นข้อมูลนี้ใกล้กับด้านบนของ 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
การค้นหานี้ดูผลงานของ Shakespeare' ซึ่งเป็นส่วนหนึ่งของชุดข้อมูลสาธารณะของ BigQuery' และผลิตคําที่ปรากฏมากที่สุด 10 อันดับแรกในผลงานทั้งหมดของเขา โดยจัดเรียงจากความนิยมที่เพิ่มขึ้นจากมากไปหาน้อย ลองจินตนาการดูว่า (ถ้าไม่) วิธีนี้น่าสนุกที่คุณจะต้องลงมือทําเอง และคุณน่าจะมีแนวคิดว่า BigQuery มีประโยชน์แค่ไหน
- ใกล้จะเสร็จแล้ว แต่ก็ยังไม่พร้อมที่จะลองทําดู ตามที่คุณเห็นใกล้กับข้อมูลโค้ดนี้ คุณต้องระบุรหัสโปรเจ็กต์ที่ถูกต้อง เราจึงต้องเพิ่มรหัสของคุณลงในรหัสแอปพลิเคชัน โดยกลับไปที่หน้าต่างเบราว์เซอร์หรือแท็บที่มีหน้าคอนโซลของนักพัฒนาซอฟต์แวร์ (เราบอกให้เปิดทิ้งไว้นะ)
- ที่ด้านบนซ้ายของรูปโปรไฟล์บัญชี Google คือตัวเลือกเมนูแบบเลื่อนลง (
) คลิกเมนูแบบเลื่อนลงแล้วเลือกการตั้งค่าโปรเจ็กต์ คุณจะเห็นชื่อโปรเจ็กต์ รหัส และหมายเลข คัดลอกรหัสโปรเจ็กต์และตั้งค่าตัวแปร
PROJECT_ID
ที่ด้านบนของbq-sheets-slides.js
เป็นค่าที่ได้รับจากคอนโซลนักพัฒนาซอฟต์แวร์ หมายเหตุ: หากตัวเลือกเมนูติดหนึบและใช้งานไม่ได้ ให้โหลดหน้าเว็บซ้ํา - คําสั่ง
if
มีไว้เพื่อป้องกันไม่ให้แอปพลิเคชันดําเนินการต่อโดยไม่มีรหัสโปรเจ็กต์ เมื่อเพิ่ม บันทึกไฟล์ และเรียกใช้โค้ดโดยไปยังแถบเมนู แล้วเลือกเรียกใช้ > เรียกใช้ฟังก์ชัน > RunQuery คลิกกล่องโต้ตอบตรวจสอบสิทธิ์ แอปนี้ยังไม่ได้รับการยืนยัน และ GIF แบบเคลื่อนไหว (สําหรับแอปอื่น) จะแสดง 2-3 ขั้นตอนถัดไป - เมื่อขอสิทธิ์แล้ว คุณจะเห็นกล่องโต้ตอบใหม่ดังที่แสดงด้านบน เลือกบัญชี Google ที่ถูกต้องที่จะเรียกใช้สคริปต์ เลือกขั้นสูง เลื่อนลง แล้วคลิก "ไปที่ < PROJECT NAME> (ไม่ปลอดภัย)" เพื่อไปยังหน้าจอการให้สิทธิ์แอปพลิเคชัน OAuth2 (อ่านเพิ่มเติมเกี่ยวกับขั้นตอนการยืนยันเพื่อดูเหตุผลที่หน้าจอนี้อยู่ระหว่างคุณและกล่องโต้ตอบการให้สิทธิ์ OAuth2 ด้านล่าง)
หมายเหตุ: เมื่อคุณให้สิทธิ์แอปแล้ว เมื่อคุณไม่จําเป็นต้องทําขั้นตอนนี้ซ้ํากับแต่ละการดําเนินการ จนกว่าคุณจะไปที่งาน 3 ในบทแนะนํานี้ คุณจะเห็นกล่องโต้ตอบนี้อีกครั้ง จากนั้นให้ขอสิทธิ์ผู้ใช้ในการสร้างและจัดการงานนําเสนอ Google สไลด์ - เมื่อคุณคลิกอนุญาตบนกล่องโต้ตอบกล่องโต้ตอบ OAuth2 สคริปต์จะเริ่มต้น... จากนั้นคุณจะเห็นกล่องโต้ตอบสีเหลืองพาสเทลที่ด้านบน ทํางานค่อนข้างเร็ว คุณจึงอาจไม่รู้ว่าโฆษณาทํางานหรือดําเนินการเสร็จสมบูรณ์แล้ว
- กล่องโต้ตอบดังกล่าวจะหายไปเมื่อเสร็จสิ้นแล้ว ดังนั้นหากคุณไม่เห็นไอคอนนี้ ไอคอนอาจจะย้ายไปแล้ว ดังนั้นให้ไปที่ Google ไดรฟ์ (
drive.google.com
) แล้วมองหาสเปรดชีตใหม่ใน Google ชีตชื่อ "คําทั่วไปใน Shakespeare'ทั้งหมด หรือคําใดก็ตามที่คุณกําหนดให้ตัวแปรQUERY_NAME
: - เปิดสเปรดชีต จากนั้นคุณจะเห็นจํานวนคํา 10 แถวและจํานวนรวมของแถวที่จัดเรียงจากมากไปน้อย
สรุปงาน 1
รู้ว่าเกิดอะไรขึ้น... คุณได้เรียกใช้โค้ดที่ค้นหาทั้งหมดของ Shakespeare' (ไม่ใช่ข้อมูลจํานวนมาก แต่ที่แน่ๆ คือคุณสามารถสแกนตัวเองเพื่อดูทุกคําในการเล่นทุกครั้ง จัดการจํานวนคําเหล่านั้น จากนั้นจึงจัดเรียงตามลําดับการปรากฏจากมากไปน้อย คุณไม่เพียงขอให้ BigQuery ดําเนินการนี้ในนามของคุณเท่านั้น แต่คุณยังใช้บริการในตัวของ Apps Script สําหรับ Google ชีตเพื่อนําข้อมูลนี้ไปใช้ได้อย่างง่ายดาย
โค้ดสําหรับ bq-sheets-slides.js
(ชื่อไฟล์ที่เราเลือก) ซึ่งคุณวางไว้ด้านบน (นอกเหนือจาก PROJECT_ID
ซึ่งควรมีรหัสโครงการจริง) อยู่ในโฟลเดอร์ step1
ในที่เก็บ GitHub ของ Hub นี้ที่ github.com/googlecodelabs/bigquery-sheets-slides โค้ดดังกล่าวได้รับแรงบันดาลใจมาจากตัวอย่างต้นฉบับในหน้าบริการขั้นสูงของ BigQuery ซึ่งเรียกใช้คําค้นหาที่แตกต่างออกไปเล็กน้อย... คําใดที่ได้รับความนิยมมากที่สุดจากเชกสเปียร์ที่มีอักขระ 10 ตัวขึ้นไป รวมถึงดูตัวอย่างในที่เก็บ GitHub ได้ด้วย
หากคุณสนใจคําค้นหาอื่นๆ ที่คุณลองเปรียบเทียบกับงานของเชกสเปียร์หรือตารางข้อมูลสาธารณะอื่นๆ ได้ ให้ดูที่หน้านี้และหน้านี้ ไม่ว่าจะใช้คําค้นหาใด เพียงทดสอบคําค้นหาในคอนโซล BigQuery ก่อนที่จะเรียกใช้ใน Apps Script เท่านั้น อินเทอร์เฟซผู้ใช้ของ BigQuery' มีให้บริการแก่นักพัฒนาซอฟต์แวร์ที่ bigquery.cloud.google.com ตัวอย่างการค้นหาของเราเมื่อใช้ UI ของ BigQuery จะมีลักษณะดังนี้
แม้ว่าขั้นตอนข้างต้นจะใช้ประโยชน์จากตัวแก้ไขโค้ดของ Apps Script' แต่คุณก็เลือกพัฒนาในเครื่องผ่านบรรทัดคําสั่งได้เช่นกัน หากต้องการ ให้สร้างสคริปต์ชื่อ bq-sheets-slides.js
วางโค้ดด้านบนลงในสคริปต์ จากนั้นอัปโหลดไปยัง Google ด้วยคําสั่ง clasp push
(หากคุณพลาดข้อมูลเหล่านี้ไปก่อน โปรดไปที่ลิงก์ของ clasp
และวิธีใช้งานอีกครั้ง)
วัตถุประสงค์ของ runQuery()
คือพูดคุยกับ BigQuery และส่งผลลัพธ์ไปยังชีต ทีนี้เราต้องสร้างแผนภูมิที่มีข้อมูล มาสร้างฟังก์ชันใหม่ที่ชื่อว่า createColumnChart()
ที่จะเรียกใช้เมธอด newChart()
ของชีตเพื่อดําเนินการดังกล่าว
- สร้างแผนภูมิ เพิ่มเนื้อหาของ
createColumnChart()
ที่แสดงด้านล่างลงในbq-sheets-slides.js
ทันทีหลังจากrunQuery()
โดยจะได้รับชีตที่มีข้อมูลและขอแผนภูมิคอลัมน์ที่มีข้อมูลทั้งหมด ช่วงข้อมูลจะเริ่มต้นที่เซลล์ A2 เนื่องจากแถวแรกมีส่วนหัวของคอลัมน์ ไม่ใช่ข้อมูล
/**
* Uses spreadsheet data to create columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} visualizing the results
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first and only) 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 params.
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);
}
- แสดงผลสเปรดชีต ด้านบน
createColumnChart()
ต้องมีออบเจ็กต์สเปรดชีต เราจึงต้องอัปเดตrunQuery()
เพื่อแสดงออบเจ็กต์spreadsheet
เพื่อให้เราส่งไปยังcreateColumnChart()
ได้ หลังจากบันทึกการสร้าง Google ชีตเรียบร้อยแล้ว ให้แสดงผลออบเจ็กต์spreadsheet
ที่ท้ายrunQuery()
ต่อจากบรรทัดบันทึก:
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// NEW: Return the spreadsheet object for later use.
return spreadsheet;
}
- ฟังก์ชัน
createBigQueryPresentation()
การขับรถ การแยกฟังก์ชันการทํางานของ BigQuery และการสร้างแผนภูมิเป็นความคิดที่ดี ต่อไปเราจะมาสร้างฟังก์ชันcreateBigQueryPresentation()
เพื่อขับเคลื่อนแอป โดยเรียกใช้ทั้งrunQuery()
และcreateColumnChart()
โค้ดที่คุณเพิ่มควรมีลักษณะดังนี้
/**
* Runs a BigQuery query, adds data and a chart in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
createColumnChart(spreadsheet);
}
- ทําให้โค้ดใช้ซ้ําได้ คุณทําตาม 2 ขั้นตอนข้างต้นที่สําคัญ ได้แก่ การแสดงออบเจ็กต์สเปรดชีตและการสร้างฟังก์ชันการขับรถ หากเพื่อนร่วมงานต้องการใช้
runQuery()
ซ้ําและไม่ต้องการให้บันทึก URL เราจึงต้องย้ายบรรทัดบันทึกนั้นเพื่อให้ทําความเข้าใจได้ง่ายขึ้นสําหรับการใช้งานทั่วไปของrunQuery()
ย้ายไปสถานที่ไหนดี หากเดาเป็นcreateBigQueryPresentation()
คุณตอบถูก หลังจากย้ายบรรทัดบันทึก ควรจะมีลักษณะดังนี้
/**
* Runs a BigQuery query, adds data and a chart in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
createColumnChart(spreadsheet);
}
เมื่อใช้การเปลี่ยนแปลงเหล่านี้ข้างต้น (อีกครั้งยกเว้น PROJECT_ID
) ตอนนี้ bq-sheets-slides.js
ของคุณควรมีลักษณะเช่นนี้ (และยังพบในโฟลเดอร์ step2
ของที่เก็บ GitHub ด้วย) ดังนี้
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
*
* @returns {Sheet} Returns a sheet with results
* @see http://developers.google.com/apps-script/reference/spreadsheet/sheet
*/
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 BQ 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 new 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 columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} visualizing the results
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first and only) 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 params.
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 in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
บันทึกไฟล์ จากนั้นไปที่ด้านบนของตัวแก้ไขโค้ดแล้วเปลี่ยนเพื่อเรียกใช้ createBigQueryPresentation()
แทน runQuery()
หลังจากเรียกใช้แล้ว คุณจะได้รับชีตใน Google ชีตอีกครั้ง แต่ครั้งนี้แผนภูมิจะปรากฏในชีตถัดจากข้อมูล
ส่วนสุดท้ายของ Codelab จะมีการสร้างงานนําเสนอ Google สไลด์ใหม่ การกรอกชื่อและชื่อรองในสไลด์ชื่อ จากนั้นจึงเพิ่มสไลด์ใหม่ 2 รายการ โดยเซลล์หนึ่งมีไว้สําหรับเซลล์ข้อมูลแต่ละเซลล์และอีกเซลล์สําหรับแผนภูมิ
- สร้างชุดสไลด์ งานทั้งหมดในชุดสไลด์จะเกิดขึ้นใน
createSlidePresentation()
ซึ่งเราจะเพิ่มไปที่bq-sheets-slides.js
หลังจากวันที่createColumnChart()
เริ่มต้นด้วยการสร้างชุดสไลด์ใหม่ จากนั้นเพิ่มชื่อและคําบรรยายลงในสไลด์ชื่อเรื่องเริ่มต้นที่เราได้รับด้วยงานนําเสนอใหม่ทั้งหมด
/**
* Create presentation with spreadsheet data & chart
* @param {Spreadsheet} Spreadsheet with results data
* @param {EmbeddedChart} Sheets chart to embed on slide
* @returns {Presentation} Slide deck with results
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the new 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('via GCP and G Suite APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
- เพิ่มตารางข้อมูล ขั้นตอนถัดไปใน
createSlidePresentation()
คือการนําเข้าข้อมูลเซลล์จาก Google ชีตไปยังสไลด์ใหม่ของเรา ดังนั้นให้เพิ่มข้อมูลโค้ดนี้ลงในฟังก์ชัน
// 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 of
// the dimensions of the data range; fails if Sheet 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]));
}
}
- นําเข้าแผนภูมิ ขั้นตอนสุดท้ายใน
createSlidePresentation()
คือการสร้างสไลด์เพิ่มอีก 1 รายการ นําเข้าแผนภูมิจากสเปรดชีตของเรา และส่งคืนออบเจ็กต์Presentation
เพิ่มข้อมูลโค้ดสุดท้ายนี้ลงในฟังก์ชัน
// 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;
}
- แผนภูมิการคืนสินค้า ตอนนี้ฟังก์ชันสุดท้ายของเราเสร็จสมบูรณ์แล้ว มาดูลายเซ็นอีกครั้งกัน ได้
createSlidePresentation()
ต้องใช้ทั้งสเปรดชีตและออบเจ็กต์แผนภูมิ เราได้ปรับเปลี่ยนrunQuery()
เพื่อแสดงออบเจ็กต์Spreadsheet
แล้ว แต่ตอนนี้จําเป็นต้องทําการเปลี่ยนแปลงที่คล้ายกันกับcreateColumnChart()
เพื่อแสดงออบเจ็กต์แผนภูมิ (EmbeddedChart
) กลับไปที่แอปพลิเคชันของคุณเพื่อเขียนโค้ดเพื่อเพิ่มบรรทัดสุดท้ายในตอนท้ายของcreateColumnChart()
เพื่อทําเช่นนั้น
// NEW: Return chart object for later use
return chart;
}
- อัปเดต
createBigQueryPresentation()
เนื่องจากcreateColumnChart()
ส่งกลับแผนภูมิ เราจึงต้องบันทึกแผนภูมินั้นลงในตัวแปร จากนั้นส่งทั้งสเปรดชีตและแผนภูมิไปยังcreateSlidePresentation()
เนื่องจากเราบันทึก URL ของสเปรดชีตที่สร้างขึ้นใหม่ เราจะบันทึก URL ของงานนําเสนอสไลด์ใหม่ด้วย อัปเดตcreateBigQueryPresentation()
ให้มีลักษณะดังนี้
/**
* Runs a BigQuery query, adds data and a chart in a Sheet,
* 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
}
- บันทึกและเรียกใช้
createBigQueryPresentation()
อีกครั้ง แต่ก่อนที่จะใช้งาน โปรดทราบว่าแอปของคุณจําเป็นต้องมีสิทธิ์จากผู้ใช้อีก 1 ชุดเพื่อดูและจัดการงานนําเสนอ Google สไลด์ เมื่อคุณอนุญาตแล้ว สิทธิ์จะทํางานได้เช่นเดิม - นอกจากชีตที่สร้างแล้ว คุณยังควรได้รับงานนําเสนอสไลด์ใหม่พร้อมสไลด์ 3 รายการ (ชื่อ ตารางข้อมูล แผนภูมิข้อมูล) ตามที่แสดงด้านล่าง
ยินดีด้วย ขณะนี้คุณได้สร้างแอปพลิเคชันที่ใช้ประโยชน์จาก Google Cloud ทั้ง 2 ด้านด้วยการส่งคําขอ Google BigQuery ที่สืบค้นชุดข้อมูลสาธารณะชุดหนึ่ง สร้างสเปรดชีตใน Google ชีตใหม่เพื่อจัดเก็บผลลัพธ์ เพิ่มแผนภูมิตามข้อมูลที่ได้รับล่าสุด และสุดท้ายแล้วสร้างงานนําเสนอ Google สไลด์ที่แสดงผลลัพธ์ รวมถึงแผนภูมิในสเปรดชีต
นั่นคือสิ่งที่คุณทําในทางเทคนิค พูดกว้างๆ ก็คือ จากการวิเคราะห์ข้อมูลขนาดใหญ่ ไปเป็นการนําเสนอให้ผู้มีส่วนเกี่ยวข้องทําทุกอย่างครบโดยอัตโนมัติ เราหวังว่าตัวอย่างนี้จะสร้างแรงบันดาลใจให้คุณนําการปรับแต่งนี้ไปปรับแต่งสําหรับโครงการของคุณ ในตอนท้ายของ Codelab นี้ เราจะให้คําแนะนําเกี่ยวกับวิธีปรับปรุงแอปตัวอย่างนี้
ด้วยการเปลี่ยนแปลงข้างต้นจากงานสุดท้าย (อีกครั้งยกเว้น PROJECT_ID
) ตอนนี้ bq-sheets-slides.js
ของคุณควรมีลักษณะดังต่อไปนี้ (และยังพบในโฟลเดอร์ final
ในที่เก็บ GitHub) อีกด้วย
bq-sheets-slides.js
/**
* 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.
*/
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see http://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 BQ 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 new 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 columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} visualizing the results
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first and only) 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 params.
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 & chart
* @param {Spreadsheet} Spreadsheet with results data
* @param {EmbeddedChart} Sheets chart to embed on slide
* @returns {Presentation} Returns a slide deck with results
* @see http://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the new 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('via GCP and G Suite 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 of
// the dimensions of the data range; fails if Sheet 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 in a Sheet,
* 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());
}
บทบาทไม่มีใน Codelab นี้คือ "Second file" ใน Codelab นี้ ซึ่งเป็นไฟล์ Manifest ของ Apps Script ชื่อ appsscript.json
คุณเข้าถึงเบราว์เซอร์นี้ได้โดยไปที่แท็บเบราว์เซอร์ที่ใช้ตัวแก้ไขโค้ด แล้วเลือกดู > แสดงไฟล์ Manifest จากเมนูด้านบน เนื้อหาควรมีลักษณะดังนี้
appsscript.json
{
"timeZone": "America/Los_Angeles",
"dependencies": {
"enabledAdvancedServices": [{
"userSymbol": "BigQuery",
"serviceId": "bigquery",
"version": "v2"
}]
},
"exceptionLogging": "STACKDRIVER"
}
ไฟล์ Manifest คือไฟล์การกําหนดค่าระดับระบบที่ Apps Script ใช้เพื่อรู้ว่าสภาพแวดล้อมการดําเนินการใดพร้อมใช้งานสําหรับแอปพลิเคชันของคุณ การปิดเนื้อหาของไฟล์ Manifest อยู่นอกเหนือขอบเขตของ Codelab นี้ แต่รวบรวมรายละเอียดได้ดังนี้
ด้านล่างนี้เป็นแหล่งข้อมูลเพิ่มเติมที่จะช่วยให้คุณเจาะลึกเนื้อหาที่ครอบคลุมอยู่ใน Codelab นี้ได้มากขึ้น รวมถึงสํารวจวิธีอื่นๆ ในการเข้าถึงเครื่องมือสําหรับนักพัฒนาซอฟต์แวร์ของ Google แบบเป็นโปรแกรม เราตั้งใจให้ Codelab นี้ซิงค์กับที่เก็บนี้
ทรัพยากรสําหรับแอปพลิเคชันนี้
- ลิงก์ Codelab นี้ g.co/codelabs/bigquery-sheets-slides
- พื้นที่เก็บข้อมูลซอร์สโค้ด
- บล็อกโพสต์ (และ) วิดีโอสําหรับนักพัฒนาซอฟต์แวร์
- เซสชัน Google Cloud Next '18
เอกสารประกอบ
- เว็บไซต์เอกสารประกอบ Google Apps Script ของ Google
- บริการสเปรดชีตของ Apps Script
- บริการสไลด์ของ Apps Script
- Apps Script บริการขั้นสูงของ BigQuery
วิดีโอทั่วไปและที่เกี่ยวข้อง
- เป็นข้อมูลลับของ Google (แอป) อีกประเภทหนึ่ง (วิดีโอแนะนํา สคริปต์ แนะนํา Apps Script)
- ต้องการเข้าถึง Google Maps จากสเปรดชีตหรือไม่ (วิดีโอ)
- ไลบรารีวิดีโอของ Google Apps Script
- ซีรีส์วิดีโอ Launchpad ออนไลน์ (ต่างจาก...)
- ชุดวิดีโอของ G Suite Dev Show
ข่าวสารและข้อมูลทั่วไปที่เกี่ยวข้อง
- เครื่องมือเชื่อมต่อข้อมูลของ Google ชีตสําหรับ BigQuery (ประกาศ)
- Google BigQuery ผสานรวมกับ Google ไดรฟ์ (link1, link2)
- บล็อกสําหรับนักพัฒนาซอฟต์แวร์ Google
- บล็อก Cloud Platform ของ Google
- Google Cloud Big Data & Machine Learning Blog
- Google Developers Twitter (@GoogleDevs)
- บล็อกของนักพัฒนาซอฟต์แวร์ G Suite
- นักพัฒนาซอฟต์แวร์ G Suite Twitter (@googleworkspace)
- จดหมายข่าวนักพัฒนาซอฟต์แวร์ของ G Suite
Codelab อื่นๆ
ระดับเริ่มต้น
- [REST API] G Suite & Google APIs (API ของไดรฟ์)
- [App Maker] สร้างเว็บแอปฐานข้อมูลใน App Maker
ระดับกลาง
- [Apps Script] เครื่องมือบรรทัดคําสั่ง Apps Script สําหรับ CLASP
- [Apps Script] ส่วนเสริมของ Gmail
- [Apps Script] ส่วนเสริมและเอกสารของ GCP Natural Language API
- [Apps Script] เฟรมเวิร์กบ็อต Hangouts Chat
- [REST API] เครื่องมือการรายงานที่กําหนดเอง ( Sheets API)
- [REST API] โปรแกรมสร้างสไลด์ที่กําหนดเองสําหรับเครื่องมือวิเคราะห์ BigQuery ของ GitHub (สไลด์ + BigQuery API)
แอปอ้างอิง
- ตัวแปลงมาร์กอัปเป็น Google สไลด์ (API ของสไลด์)
&ด้านล่างคือความท้าทายต่างๆ ใน "code," วิธีต่างๆ ที่คุณสามารถปรับปรุงหรือเสริมตัวอย่างที่เราสร้างใน Codelab นี้ แน่นอนว่ารายการนี้ยังเป็นเพียงตัวอย่างโดยสังเขป แต่ควรแนะนําไอเดียที่สร้างแรงบันดาลใจได้ว่าคุณต้องทําอย่างไรต่อไป
- แอปพลิเคชัน ต้องการจํากัดโดยใช้ JavaScript หรือข้อจํากัดที่ Apps Script กําหนดใช่ไหม โอนแอปพลิเคชันนี้ไปยังภาษาโปรแกรมโปรดของคุณโดยใช้ REST API สําหรับ Google BigQuery, ชีต และสไลด์
- BigQuery ทดลองใช้คําค้นหาอื่นสําหรับชุดข้อมูลของเชกสเปียร์... คุณอาจพบการค้นหาที่คุณสนใจ ดูการค้นหาตัวอย่างอื่นๆ ได้ในแอปตัวอย่าง BigQuery ของ Apps Script ต้นฉบับ
- BigQuery ทดลองใช้ชุดข้อมูลสาธารณะอื่นๆ บางชุดของ BigQuery'... คุณอาจพบชุดข้อมูลที่น่าจะมีความหมายกับคุณมากกว่า
- BigQuery ก่อนหน้านี้เราได้พูดถึงการค้นหาอื่นๆ ที่คุณสามารถลองใช้กับงานของ Shakespeare' หรือตารางข้อมูลสาธารณะอื่นๆ และต้องการแชร์หน้านี้และหน้านี้อีกครั้ง
- ชีต ทดลองใช้แผนภูมิประเภทอื่นๆ
- ชีตและ AMP สลับตารางไปรอบๆ... คุณอาจมีชุดข้อมูลขนาดใหญ่ในสเปรดชีต ในปี 2016 ทีม BigQuery ได้เปิดตัวฟีเจอร์ที่ช่วยให้นักพัฒนาซอฟต์แวร์สามารถใช้ชีตเป็นแหล่งข้อมูลได้ (ดูบล็อกโพสต์ 1 และ 2 เพื่อดูข้อมูลเพิ่มเติม)
- สไลด์ เพิ่มสไลด์อื่นๆ ในงานนําเสนอที่สร้างขึ้น เช่น รูปภาพหรือเนื้อหาอื่นๆ ที่สัมพันธ์กับการวิเคราะห์ข้อมูลขนาดใหญ่ ดูคําแนะนําเกี่ยวกับบริการสไลด์ในตัวเพื่อเริ่มต้นใช้งาน
- G Suite ค้นหาการใช้บริการ G Suite หรือบริการอื่นๆ ในตัวของ Google จาก Apps Script เช่น Gmail, Google ไดรฟ์, ปฏิทิน, เอกสาร, Maps, Analytics, YouTube ฯลฯ รวมถึงบริการขั้นสูงอื่นๆ ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมข้อมูลอ้างอิงสําหรับบริการทั้งในตัวและขั้นสูง