יש הרבה כלים למדעני נתונים לביצוע ניתוחים של נתונים גדולים, אבל בסופו של דבר, עדיין צריך להצדיק את התוצאות האלה בפני ההנהלה. קשה להציג הרבה מספרים על נייר או במסד נתונים לבעלי עניין מרכזיים. ב-Codelab הזה של Google Apps Script ברמת ביניים נעשה שימוש בשתי פלטפורמות למפתחים של Google, G Suite ו-Google Cloud Platform (GCP), כדי לעזור לכם להשלים את השלב האחרון.
הכלים למפתחים של Google Cloud מאפשרים לכם לבצע ניתוח נתונים מעמיק, לקחת את התוצאות, להכניס אותן לגיליון אלקטרוני וליצור מצגת שקפים עם הנתונים האלה. כך תוכלו להציג את התוצאות להנהלה בצורה מתאימה יותר. בסדנת התכנות הזו נסביר על BigQuery API של GCP (BigQuery) (בתור שירות מתקדם של Apps Script) ועל שירותי Apps Script המובנים ל-Google Sheets ול-Google Slides.
מוטיבציה/ידע קודם
האפליקציה לדוגמה במדריך הזה קיבלה השראה מדוגמאות הקוד האלה...
- אפליקציית הדוגמה של שירות BigQuery ב-Google Apps Script וקוד פתוח ב-GitHub
- אפליקציית הדוגמה שמוצגת בסרטון למפתחים בנושא יצירת שקפים מנתונים בגיליון אלקטרוני ופורסמה בפוסט הזה בבלוג
- אפליקציית הדוגמה שמוצגת ב-Google Slides API codelab
אפליקציית הדוגמה ב-codelab של Slides API כוללת גם את BigQuery ו-Slides, אבל היא שונה מאפליקציית הדוגמה של ה-codelab הזה בכמה דרכים:
- אפליקציית Node.js לעומת אפליקציית Apps Script
- משתמש ב-REST API בזמן שאנחנו משתמשים בשירותי Apps Script
- האפליקציה משתמשת ב-Google Drive אבל לא ב-Google Sheets, ואילו האפליקציה הזו משתמשת ב-Sheets אבל לא ב-Drive
בסדנת התכנות הזו רצינו לשלב כמה שיותר טכנולוגיות באפליקציה אחת, ולהציג תכונות וממשקי API מכל Google Cloud באופן שדומה יותר לתרחיש שימוש מהחיים האמיתיים. המטרה היא לעורר בכם השראה להשתמש בדמיון ולשקול להשתמש ב-GCP וב-G Suite כדי לפתור בעיות מורכבות בארגון או אצל הלקוחות שלכם.
מה תלמדו
- איך משתמשים ב-Google Apps Script עם כמה שירותי Google (GCP ו-G Suite)
- איך משתמשים ב-Google BigQuery כדי לבצע ניתוח של Big Data
- איך ליצור גיליון אלקטרוני ב-Google Sheets ולאכלס אותו בנתונים
- איך יוצרים תרשים חדש ב-Sheets
- איך מעבירים תרשימים ונתונים מ-Sheets למצגת ב-Google Slides
מה נדרש
- גישה לאינטרנט ולדפדפן אינטרנט
- חשבון Google (יכול להיות שחשבונות G Suite ידרשו אישור אדמין)
- מיומנויות בסיסיות ב-JavaScript
- ידע בפיתוח Apps Script יכול לעזור, אבל הוא לא חובה
איך תשתמשו ב-codelab או במדריך הזה?
איך היית מדרג את חוויית השימוש שלך בכלי הפיתוח ובממשקי ה-API של G Suite?
איזה דירוג מגיע לדעתך לחוויית השימוש שלך ב-Apps Script?
איך היית מדרג את חוויית השימוש שלך בכלי הפיתוח ובממשקי ה-API של GCP?
עכשיו, אחרי שהבנתם במה עוסק ה-codelab הזה, מה בדיוק אתם הולכים לעשות?
- שימוש בדוגמה קיימת של Apps Script-BigQuery כדי להפעיל אותה
- בדוגמה הזו מוסבר איך לשלוח שאילתה ל-BigQuery ולקבל את התוצאות שלה
- יצירת גיליון אלקטרוני ב-Google Sheets ואכלוס התוצאות מ-BigQuery
- לשנות קצת את הקוד כדי לשנות קלות את הנתונים שמוחזרים ומוסיפים לגיליון
- שימוש בשירות Sheets ב-Apps Script כדי ליצור תרשים לנתונים מ-BigQuery
- איך משתמשים בשירות Slides כדי ליצור מצגת חדשה
- הוספת שם וכותרת משנה לשקף הכותרת שנוצר אוטומטית כברירת מחדל לכל מצגת חדשה
- יוצרים שקף חדש עם טבלת נתונים, ואז מייבאים אליו את תאי הנתונים מגיליון ה-Sheets
- מוסיפים עוד שקף חדש ומוסיפים אליו את התרשים מהגיליון האלקטרוני
נתחיל עם מידע כללי על Apps Script, BigQuery, Sheets ו-Slides.
Google Apps Script ו-BigQuery
Google Apps Script היא פלטפורמת פיתוח של G Suite שפועלת ברמה גבוהה יותר משימוש ב-Google REST APIs. זוהי סביבה לפיתוח ולאירוח אפליקציות ללא שרת (serverless), שנגישה למפתחים ברמות שונות של מיומנות. במשפט אחד, "Apps Script הוא זמן ריצה של JavaScript ללא שרת לאוטומציה, להרחבה ולשילוב של G Suite".
זהו JavaScript בצד השרת, בדומה ל-Node.js, אבל הוא מתמקד בשילוב הדוק עם G Suite ושירותים אחרים של Google, ולא באירוח מהיר של אפליקציות אסינכרוניות מבוססות-אירועים. בנוסף, יש בה סביבת פיתוח שעשויה להיות שונה לחלוטין ממה שאתם רגילים. באמצעות Apps Script, אתם יכולים:
- פיתוח בעורך קוד מבוסס-דפדפן, אבל אפשר לבחור לפתח באופן מקומי אם משתמשים ב-
clasp
, כלי הפריסה של שורת הפקודה ל-Apps Script - לכתוב קוד בגרסה מיוחדת של JavaScript שמותאמת לגישה ל-G Suite ולשירותים אחרים של Google או לשירותים חיצוניים (באמצעות שירותי
URLfetch
אוJdbc
של Apps Script) - לא צריך לכתוב קוד הרשאה כי Apps Script מטפל בזה בשבילכם
- לא צריך לארח את האפליקציה – היא פועלת בשרתי Google בענן
הערה: רוב התוכן של ה-codelab הזה לא עוסק ב-Apps Script. יש באינטרנט הרבה מקורות מידע שיעזרו לכם. במסמכי התיעוד הרשמיים יש גם סקירה כללית עם מדריכים למתחילים, מדריכים וסרטונים. ולסיום, אל תשכחו לעיין ב-Apps Script introductory codelab, שמומלץ להשלים אותו לפני שמתחילים את המדריך הזה.
ממשקי Apps Script פועלים עם טכנולוגיות אחרות של Google בשתי דרכים שונות:
- שירות מובנה/מקורי
- שירות מתקדם
שירות מובנה מספק שיטות ברמה גבוהה שבהן אפשר להשתמש כדי לגשת לנתונים של G Suite או של מוצר Google, או שיטות שימושיות אחרות. שירות מתקדם הוא רק מעטפת דקה סביב G Suite או Google REST API. שירותים מתקדמים מספקים כיסוי מלא של ה-API ל-REST, ולעתים קרובות יכולים לעשות יותר מהשירותים המובנים, אבל הם דורשים קוד מורכב יותר (אבל עדיין קלים יותר לשימוש מה-API ל-REST עצמו). כדי להשתמש בשירותים מתקדמים, צריך גם להפעיל אותם בפרויקט של סקריפט.
כשהדבר אפשרי, מפתחים צריכים להעדיף שירות מובנה כי קל יותר להשתמש בו והוא מבצע יותר פעולות מאשר שירותים מתקדמים. עם זאת, לחלק מ-Google APIs אין שירותים מובנים, ולכן שירות מתקדם עשוי להיות האפשרות היחידה. דוגמה לכך היא Google BigQuery… אין שירות מובנה זמין, אבל שירות מתקדם של BigQuery כן קיים. (עדיף על שום שירות, נכון?) אם אתם חדשים ב-BigQuery, זהו שירות GCP שמאפשר לכם להריץ שאילתות פשוטות (או מורכבות) על מערכי נתונים גדולים מאוד, למשל בסדר גודל של כמה טרה-בייט, ועדיין לקבל תוצאות תוך שניות.
גישה ל-Google Sheets ול-Slides מ-Apps Script
בניגוד ל-BigQuery, גם ל-Google Sheets וגם ל-Slides יש שירותים מובנים (וגם שירותים מתקדמים, שמשמשים רק לגישה לתכונות שקיימות רק ב-API). לפני שמתחילים לכתוב קוד, כדאי לעיין במסמכים של שירותי Sheets ו-Slides המובנים. כמובן שיש גם מסמכים לשירותים המתקדמים. הנה קישורים למסמכים של Sheets ושל Slides.
מבוא
במשימה הראשונה הזו נתחיל לפתור את הבעיה שמוצגת ב-codelab. למעשה, אחרי שתסיימו את השלב הזה, תהיו בערך באמצע הדרך של כל ה-codelab. המדריך מחולק לכמה חלקים, ובו תמצאו הסברים על הפעולות הבאות:
- התחלת פרויקט חדש של סקריפט של Google Apps
- הפעלת גישה לשירות המתקדם של BigQuery
- עוברים לעורך הפיתוח ומזינים את קוד המקור של האפליקציה
- משלימים את תהליך ההרשאה של האפליקציה (OAuth2)
- מריצים את האפליקציה ששולחת בקשה ל-BigQuery
- הצגת גיליון חדש לגמרי ב-Google Sheets שנוצר עם התוצאות מ-BigQuery
הגדרה
- א) יוצרים פרויקט חדש ב-Apps Script על ידי מעבר אל
script.google.com
. יש קווי מוצרים שונים של G Suite, והאופן שבו יוצרים פרויקט חדש עשוי להיות שונה בהתאם לגרסה שבה אתם משתמשים. אם אתם משתמשים רק בחשבון Gmail וחדשים בפיתוח פרויקטים, יוצג לכם מסך ריק עם לחצן ליצירת הפרויקט הראשון:
ב) אם לא, יכול להיות שיוצגו כל הפרויקטים שלכם ולחצן גדול עם +חדש בפינה הימנית העליונה. במקרה כזה, לוחצים עליו.
ג) אם לא, יכול להיות שהמסך ייראה כמו בתמונה שלמטה. אם כן, מחפשים את סמל תפריט ההמבורגר בפינה הימנית העליונה ובוחרים באפשרות +סקריפט חדש.
ד) למי שמעדיף את שורת הפקודה. הכלי שלכם הוא clasp
, ובאופן ספציפי, תריצו את הפקודה clasp create
.
ה) הדרך האחרונה ליצור פרויקט סקריפט חדש היא פשוט להיכנס לקיצור הדרך: https://script.google.com/create.
- לא משנה באיזו שיטה השתמשתם כדי להתחיל פרויקט חדש, בסופו של דבר תועברו לעורך הקוד של Apps Script, למסך שנראה כך:
- לוחצים על File > Save ונותנים שם לפרויקט.
- לאחר מכן תצטרכו ליצור פרויקט ב-Google Cloud Console כדי להריץ שאילתות BigQuery.
- יוצרים פרויקט חדש, נותנים לו שם, בוחרים חשבון לחיוב ולוחצים על CREATE.
- כשהפרויקט ייווצר, תופיע הודעה בפינה השמאלית העליונה של הדף. לוחצים על הערך Create Project: <Project Name> כדי לפתוח את הפרויקט.
- לוחצים על סמל התפריט
בפינה הימנית העליונה ועוברים אל APIs & Services > Credentials (ממשקי API ושירותים > פרטי כניסה). לוחצים על הכרטיסייה מסך הסכמה ל-OAuth (קישור ישיר).
- בשדה שם האפליקציה מזינים Big Data Codelab ולוחצים על הלחצן שמירה בתחתית.
- לוחצים על סמל האפשרויות הנוספות (3 נקודות)
בפינה השמאלית העליונה כדי להרחיב את התפריט, ובוחרים באפשרות הגדרות הפרויקט (קישור ישיר).
- מעתיקים את הערך שמופיע בקטע מספר הפרויקט. (יש שדה נפרד בשם מזהה מוצר שנשתמש בו בהמשך ה-codelab).
- חוזרים לעורך Apps Script ולוחצים על Resources > Cloud Platform project (משאבים > פרויקט Cloud Platform).
- מזינים את מספר הפרויקט בתיבת הטקסט ולוחצים על Set Project (הגדרת פרויקט). כשמופיעה בקשה, לוחצים על אישור.
- בסיום, לוחצים על הכפתור סגירה כדי לסגור את תיבת הדו-שיח.
- אחרי שמגדירים פרויקט חדש, צריך להפעיל את השירות המתקדם של BigQuery. לשם כך, פותחים את התפריט הנפתח Resources -> Advanced Google Services ומפעילים את BigQuery API.
- בהערה שבתחתית הדף מצוין שצריך להפעיל את השירותים האלה גם ב'מרכז הבקרה של ה-API של Google Cloud Platform'. לכן, לוחצים על הקישור הזה שנפתח בכרטיסייה אחרת בדפדפן, אל מסוף המפתחים או 'devconsole' בקיצור.
- ב-devconsole, לוחצים על הלחצן +Enable APIs and Services (הפעלת ממשקי API ושירותים) בחלק העליון, מחפשים את BigQuery, בוחרים את BigQuery API (לא את BigQuery Data Transfer API) ולוחצים על enable (הפעלה) כדי להפעיל אותו. משאירים את כרטיסיית הדפדפן הזו פתוחה.
הערה: אחרי שה-API מופעל, יכול להיות שתוצג הערה בדף הזה, למשל "כדי להשתמש ב-API הזה, צריך ליצור פרטי כניסה...", אבל אין צורך לדאוג לגבי זה בשלב הזה – Apps Script יבצע את השלב הזה בשבילכם. - חוזרים לכרטיסייה בדפדפן של עורך הקוד. עדיין נמצאים בתפריט Advanced Google Services (שירותים מתקדמים של Google), אז לוחצים על OK כדי לסגור את תיבת הדו-שיח ולחזור לעורך הקוד. לוחצים על שם הפרויקט בחלק העליון ונותנים לו שם שרוצים, למשל BigQuery demo או שם דומה. אנחנו קראנו לפרויקט שלנו final mile.
עכשיו אפשר להזין את קוד האפליקציה, לעבור את תהליך ההרשאה ולהפעיל את הגרסה הראשונה של האפליקציה.
העלאה והפעלה של האפליקציה
- מעתיקים את הקוד בתיבה שלמטה ומדביקים אותו במקום כל מה שמופיע בעורך הקוד:
// 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 Sheets, אבל מהי השאילתה הזו? הוא מופיע בחלק העליון של 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
השאילתה הזו סורקת את היצירות של שייקספיר, שהן חלק ממערך הנתונים הציבורי של BigQuery, ומפיקה את 10 המילים שמופיעות הכי הרבה פעמים בכל היצירות שלו, ממוינות בסדר יורד לפי הפופולריות שלהן. תארו לעצמכם כמה (לא) כיף יהיה לעשות את זה ידנית, ותקבלו מושג לגבי מידת התועלת של BigQuery.
- אנחנו כמעט מוכנים לנסות את זה, אבל לא לגמרי. כפי שאפשר לראות בחלק העליון של קטע הקוד הזה, נדרש מזהה פרויקט תקין, ולכן צריך להוסיף את המזהה שלכם לקוד האפליקציה. כדי לעשות את זה, חוזרים לחלון או לכרטיסייה בדפדפן שבהם נמצא דף מסוף הפיתוח. (הזכרנו לך להשאיר אותה פתוחה, נכון?)
- בפינה הימנית העליונה, משמאל לאווטאר של חשבון Google, נמצא התפריט הנפתח (
). לוחצים עליו ובוחרים באפשרות הגדרות הפרויקט. יוצגו השם, המזהה והמספר של הפרויקט. מעתיקים את מזהה הפרויקט ומגדירים את המשתנה
PROJECT_ID
בחלק העליון שלbq-sheets-slides.js
לערך שקיבלתם מ-Developer Console. הערה: אם בורר התפריט נתקע ולא ניתן להשתמש בו, צריך לטעון מחדש את הדף. - ההצהרה
if
נועדה למנוע מהאפליקציה להמשיך בלי מזהה פרויקט. אחרי שמוסיפים את המזהה, שומרים את הקובץ ומריצים את הקוד. כדי לעשות את זה, עוברים לסרגל התפריטים ובוחרים באפשרות Run > Run function > runQuery (הפעלה > הפעלת פונקציה > runQuery). לוחצים על תיבת הדו-שיח בדיקת הרשאות, על האפשרות 'האפליקציה הזו לא אומתה' ועל קובץ ה-GIF המונפש שמופיע בהמשך (של אפליקציה אחרת) כדי לראות את השלבים הבאים: - אחרי שתבקשו לבדוק את ההרשאות, תוצג לכם תיבת דו-שיח חדשה, כמו שמוצג למעלה. בוחרים את חשבון Google הנכון שדרכו יופעל הסקריפט, בוחרים באפשרות מתקדם, גוללים למטה ולוחצים על 'מעבר אל <שם הפרויקט שלך> (לא בטוח)' כדי להגיע למסך ההרשאה של אפליקציית OAuth2. (כאן אפשר לקרוא מידע נוסף על תהליך האימות ולהבין למה המסך הזה מופיע בין המשתמש לבין תיבת הדו-שיח של ההרשאה ב-OAuth2 שמופיעה בהמשך).
הערה: אחרי שתאשרו את האפליקציה, לא תצטרכו לחזור על התהליך הזה בכל הפעלה. רק במשימה 3 בהמשך המדריך הזה תראו שוב את תיבת הדו-שיח הזו, שבה תתבקשו לתת הרשאת משתמש ליצירה ולניהול של מצגות ב-Google Slides. - אחרי שלוחצים על אישור בתיבת הדו-שיח של OAuth2, הסקריפט מתחיל לפעול... בחלק העליון תופיע תיבת דו-שיח בצבע צהוב פסטל. הוא פועל די מהר, כך שאולי לא תשימו לב שהוא פועל או שההפעלה הסתיימה.
- תיבת הדו-שיח הזו נעלמת כשהפעולה מסתיימת. אם היא לא מופיעה, כנראה שהפעולה הסתיימה. עוברים אל Google Drive (
drive.google.com
) ומחפשים גיליון אלקטרוני חדש של Google Sheets בשם 'Most common words in all of Shakespeare's works' (המילים הנפוצות ביותר בכל היצירות של שייקספיר) או כל שם שהקציתם למשתנהQUERY_NAME
: - פותחים את הגיליון האלקטרוני ורואים 10 שורות של מילים והספירה הכוללת שלהן, ממוינות בסדר יורד:
סיכום משימה 1
תנסו להבין מה קרה הרגע... הפעלתם קוד שביצע שאילתה על כל היצירות של שייקספיר (לא כמות גדולה של נתונים, אבל בהחלט יותר טקסט ממה שאפשר לסרוק בקלות לבד, כשמסתכלים על כל מילה בכל מחזה, מנהלים ספירה של מילים כאלה ואז ממיינים אותן בסדר יורד לפי מספר המופעים). לא רק שביקשתם מ-BigQuery לעשות את זה בשבילכם, אלא גם השתמשתם בשירות המובנה ב-Apps Script ל-Google Sheets כדי להכניס את הנתונים לשם לצריכה קלה.
הקוד של bq-sheets-slides.js
(שם הקובץ שבחרנו) שהעתקתם למעלה (מלבד PROJECT_ID
שצריך להיות מזהה פרויקט אמיתי) נמצא גם בתיקייה step1
במאגר GitHub של ה-codelab הזה בכתובת github.com/googlecodelabs/bigquery-sheets-slides. הקוד הזה מבוסס על הדוגמה המקורית בדף השירותים המתקדמים של BigQuery, שבה הופעלה שאילתה קצת שונה… מהן המילים הפופולריות ביותר שבהן שייקספיר השתמש, עם 10 תווים או יותר. אפשר לראות את הדוגמה הזו גם במאגר GitHub שלה.
אם אתם רוצים לנסות שאילתות אחרות על יצירות של שייקספיר או על טבלאות אחרות של נתונים ציבוריים, כדאי לעיין גם בדף האינטרנט הזה וגם בזה. לא משנה באיזו שאילתה משתמשים, תמיד אפשר לבדוק את השאילתה במסוף BigQuery לפני שמריצים אותה ב-Apps Script. ממשק המשתמש של BigQuery זמין למפתחים בכתובת bigquery.cloud.google.com. לדוגמה, כך נראית השאילתה שלנו באמצעות ממשק המשתמש של 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);
}
- שימוש חוזר בקוד. ביצעתם שני שלבים חשובים: החזרתם את אובייקט הגיליון האלקטרוני ויצרתם פונקציית הפעלה. מה קורה אם עמית רוצה לעשות שימוש חוזר ב-
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 Slides, ממלאים את הכותרת וכותרת המשנה בשקף הכותרת, ואז מוסיפים 2 שקפים חדשים, אחד לכל אחד מתאי הנתונים ואחד לתרשים.
- Create slide deck (יצירת מצגת). כל העבודה על מצגת השקפים תתבצע ב-
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()
הוא ליצור עוד שקף, לייבא את התרשים מהגיליון האלקטרוני ולהחזיר את האובייקט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()
שוב. אבל לפני שהיא תפעל, תראו שהאפליקציה צריכה עוד קבוצת הרשאות מהמשתמש כדי להציג ולנהל את המצגות ב-Google Slides. אחרי שמאשרים את ההרשאה, היא תפעל כמו קודם. - בנוסף לגיליון שנוצר, אמורה להתקבל גם מצגת חדשה ב-Slides עם 3 שקפים (שקף כותרת, טבלת נתונים ותרשים נתונים), כמו שמוצג בהמשך:
מעולה! יצרתם עכשיו אפליקציה שמנצלת את שני הצדדים של Google Cloud. האפליקציה מבצעת בקשה ל-Google BigQuery שיוצרת שאילתה על אחת מקבוצות הנתונים הציבוריות שלו, יוצרת גיליון אלקטרוני חדש ב-Google Sheets לאחסון התוצאות, מוסיפה תרשים שמבוסס על הנתונים ששוחזרו, ולבסוף יוצרת מצגת ב-Google Slides שכוללת את התוצאות ואת התרשים בגיליון האלקטרוני.
זה מה שעשית מבחינה טכנית. באופן כללי, עברתם מניתוח של נתונים גדולים למשהו שאפשר להציג לבעלי עניין, והכול בקוד ובאופן אוטומטי. אנחנו מקווים שהדוגמה הזו תעורר בכם השראה ותעזור לכם להתאים אותה לפרויקטים שלכם. בסיום ה-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 הזה, קובץ המניפסט של Apps Script, appsscript.json
, לא ממלא תפקיד ב-codelab הזה. כדי לגשת אליו, עוברים לכרטיסיית הדפדפן של עורך הקוד ובוחרים באפשרות תצוגה > הצגת קובץ המניפסט מהתפריט בחלק העליון. התוכן צריך להיראות בערך כך:
appsscript.json
{
"timeZone": "America/Los_Angeles",
"dependencies": {
"enabledAdvancedServices": [{
"userSymbol": "BigQuery",
"serviceId": "bigquery",
"version": "v2"
}]
},
"exceptionLogging": "STACKDRIVER"
}
קובץ המניפסט הוא קובץ הגדרות ברמת המערכת ש-Apps Script משתמש בו כדי לדעת איזו סביבת הפעלה צריכה להיות זמינה לאפליקציה. הסבר על התוכן של קובץ מניפסט חורג מהיקף ה-codelab הזה, אבל תוכלו לקבל מושג לגבי הפעולות שהוא מבצע.
בהמשך מופיעים מקורות מידע נוספים שיעזרו לכם להעמיק בחומר שמופיע ב-codelab הזה, וגם לבדוק דרכים אחרות לגשת לכלי הפיתוח של Google באופן פרוגרמטי. אנחנו שואפים לשמור על סנכרון בין ה-codelab הזה לבין המאגר.
מקורות מידע על האפליקציה הזו
- הקישור ל-Codelab הזה: g.co/codelabs/bigquery-sheets-slides
- repo קוד המקור
- סרטון (ו)פוסט בבלוג למפתחים
- סשן של Google Cloud NEXT 2018
מאמרי עזרה
- אתר התיעוד של Google Apps Script
- Apps Script Spreadsheet service
- Slides service ב-Apps Script
- Apps Script שירות מתקדם של BigQuery
סרטונים קשורים וסרטונים כלליים
- סוד נוסף של Google (Apps)? (סרטון מבוא ל-Apps Script כאן)
- גישה למפות Google מגיליון אלקטרוני?!? (סרטון)
- ספריית הסרטונים של Google Apps Script
- סדרת סרטונים של Launchpad Online (קודמת ל...)
- סדרת הסרטונים G Suite Dev Show
חדשות ועדכונים כלליים וקשורים
- מחבר נתונים של Google Sheets ל-BigQuery (הודעה)
- Google BigQuery משתלב עם Google Drive (link1, link2)
- בלוג Google Developers
- הבלוג של Google Cloud Platform
- בלוג בנושא Big Data ולמידת מכונה ב-Google Cloud
- Google Developers Twitter (@GoogleDevs)
- הבלוג למפתחים של G Suite
- מפתחים של G Suite Twitter (@googleworkspace)
- הניוזלטר החודשי למפתחים של G Suite
Codelabs אחרים
רמה למתחילים
- [REST APIs] G Suite & Google APIs (Drive API)
- [App Maker] בניית אפליקציית אינטרנט של מסד נתונים ב-App Maker
רמה בינונית
- [Apps Script] CLASP Apps Script command-line tool
- [Apps Script] Gmail Add-ons
- [Apps Script] Docs Add-on & GCP Natural Language API
- [Apps Script] Hangouts Chat bot framework
- [REST APIs] Custom reporting tool (Sheets API)
- [REST APIs] Custom slide generator for Github license BigQuery analyzer (Slides+BigQuery APIs)
אפליקציות הפניה
- כלי להמרת Markdown ל-Google Slides (Slides API)
בהמשך מופיעות כמה 'משימות תכנות' שונות שבעזרתן אפשר לשפר או להרחיב את הדוגמה שיצרנו ב-codelab הזה. הרשימה הזו היא כמובן לא מלאה, אבל היא יכולה לתת לכם כמה רעיונות מעוררי השראה לגבי הצעד הבא.
- אפליקציה. לא רוצים להיות מוגבלים בשימוש ב-JavaScript או בהגבלות שמוטלות על ידי Apps Script? העברה של האפליקציה הזו לשפת התכנות המועדפת עליך שמשתמשת בממשקי REST API ל-Google BigQuery, Sheets ו-Slides.
- BigQuery. אפשר לנסות שאילתה אחרת במערך הנתונים של שייקספיר... אולי תמצאו שאילתה שתעניין אתכם. שאילתה לדוגמה נוספת זמינה באפליקציית הדוגמה המקורית של Apps Script BigQuery.
- BigQuery. אפשר להתנסות עם חלק ממערכי הנתונים הציבוריים האחרים של BigQuery... אולי תמצאו מערך נתונים שיהיה משמעותי יותר עבורכם.
- BigQuery. קודם לכן הזכרנו שאפשר לנסות שאילתות אחרות על יצירות של שייקספיר או על טבלאות אחרות של נתונים ציבוריים, ורצינו לשתף שוב את דף האינטרנט הזה וגם את זה.
- Sheets. נסו סוגים אחרים של תרשימים.
- Sheets ו-BigQuery. אפשר להפוך את היוצרות… יכול להיות שיש לכם מערך נתונים גדול בגיליון אלקטרוני איפשהו. בשנת 2016, צוות BigQuery הציג את התכונה שמאפשרת למפתחים להשתמש בגיליון כבסיס נתונים (מידע נוסף זמין בפוסטים בבלוג 1 ו2).
- Slides. מוסיפים שקפים אחרים למצגת שנוצרה, כמו תמונות או נכסים אחרים שקשורים לניתוח הביג דאטה. כאן אפשר למצוא מדריך לתחילת העבודה עם שירות Slides המובנה.
- G Suite. אפשר להשתמש בשירותים מובנים אחרים של G Suite או של Google מ-Apps Script, כלומר: Gmail, Google Drive, יומן Google, Docs, מפות Google, Analytics, YouTube וכו', וגם שירותים מתקדמים אחרים. מידע נוסף על שירותים מובנים ושירותים מתקדמים זמין בסקירה הכללית של ההפניות.