שימוש ב-Google Sheets וב-Slides כדי להפוך את הנתונים הגדולים שלך לתובנות

קיימים הרבה כלים לביצוע מדעני נתונים רבים, אבל בסופו של דבר עדיין לא צריך להצדיק את התוצאות האלה בניהול? הרבה בעלי נייר או במסד נתונים כמעט לא מציגים את בעלי העניין המרכזיים. מעבדת הקוד הזו ברמת Google Apps Script משתמשת בזוג פלטפורמות למפתחים של Google, G Suite ו-Google Cloud Platform (GCP), כדי לעזור לכם להשלים את השלב הסופי הזה.

הכלים למפתחים של Google Cloud מאפשרים לכם לבצע ניתוח מעמיק של הנתונים, להוסיף אותם לגיליון אלקטרוני וליצור מצגת של שקפים עם הנתונים האלה. כך תוכלו לקבל את התוצאות המתאימות יותר בניהול התוצאות. שיעור הקוד הזה מכסה את ה-API של BigQuery ב-GCP&#39 (כשירות מתקדם ל-Apps Script) ואת שירותי Apps Script Script הרלוונטיים ל-Google Sheets ול-Google Slides.

מוטיבציה/אומנות קודמת

האפליקציה לדוגמה שבמעבדת הקוד הזו נוצרה בהשראת דוגמאות הקוד האלה...

אפליקציה לדוגמה של Slides API כוללת גם את BigQuery ואת Slides, אבל היא שונה מהאפליקציה לדוגמה הזו של codelab.

  • אפליקציית Node.js לעומת אפליקציית Apps Script שלנו
  • משתמש בממשקי API של REST בזמן שאנחנו משתמשים בשירותי Apps Script
  • משתמש ב-Google Drive אך לא ב-Google Sheets, אבל האפליקציה משתמשת ב-Sheets אבל לא ב-Drive

בשיעור הקוד הזה, רצנו לשלב כמה מהטכנולוגיות יחד באפליקציה אחת, ולהציג תכונות וממשקי API מכל הסוגים ב-Google Cloud באופן שדומה יותר לתרחיש לדוגמה בפועל. המטרה היא לעורר השראה בדמיון שלכם, ולשקול להשתמש ב-GCP וב-AMP. G Suuite לפתרון בעיות מאתגרות עבור הארגון או הלקוחות שלכם.

מה תלמדו

  • איך להשתמש ב-Google Apps Script עם כמה שירותים של Google (GCP & G Suite)
  • איך משתמשים ב-Google BigQuery כדי לבצע ניתוח נתונים גדול
  • איך יוצרים גיליון אלקטרוני ב-Google Sheets ומזינים בו נתונים?
  • יצירת תרשים חדש ב-Sheets
  • איך מעבירים תרשימים ונתונים מ-Sheets למצגת של Google Slides

מה תצטרך להכין

  • גישה לאינטרנט ולדפדפן אינטרנט
  • חשבון Google (חשבונות G Suite עשויים לדרוש אישור של מנהל מערכת)
  • מיומנויות JavaScript בסיסיות
  • ידע בפיתוח של Apps Script יכול להועיל לך, אבל לא חובה

איך תשתמשו ב-codelab/במדריך הזה?

מומלץ לקרוא את המידע כדי לקבל ממנו פרטים אישיים, אולי להעביר אותו לעמיתים טכניים אני רוצה לנסות כמה שיותר תרגילים להגיע לעזאזל או למים הגבוהים שלי, אני רוצה להשלים את כל שיעור הקוד

איך היית מדרג את חוויית השימוש שלך בכלים למפתחים ובממשקי API של G Suite?

מתחילים מתחילים בקיאים

איזה דירוג מתאים לדעתך לחוויה שלך עם Apps Script באופן ספציפי?

מתחילים מתחילים בקיאים

איך היית מדרג את חוויית השימוש שלך בכלים למפתחים ובממשקי API של GCP?

מתחילים מתחילים בקיאים

עכשיו, אחרי שקראתם על קוד ה-Lab הזה, מה אתם מתכוונים לעשות?

  1. דוגמה ל-Apps Script-BigQuery
  2. לפי הדוגמה הזו, איך לשלוח שאילתה אל BigQuery ולקבל את התוצאות שלה
  3. יצירה של גיליון אלקטרוני ב-Google Sheets והוספת התוצאות מ-BigQuery
  4. לשנות מעט את הקוד כדי לשנות מעט את הנתונים שהוחזרו והוסיפו לגיליון
  5. שימוש בשירות Sheets ב-Apps Script כדי ליצור תרשים של הנתונים מ-BigQuery
  6. שימוש בשירות Slides כדי ליצור מצגת חדשה
  7. הוספת כותרת וכתוביות לשקף ברירת המחדל לשקף שנוצר באופן אוטומטי בכל מרפסות השקף החדשות
  8. יצירת שקף חדש עם טבלת נתונים ולאחר מכן ייבוא לו את תאי הנתונים של Sheets
  9. הוספת שקף חדש והוספתו לתרשים התרשים

נתחיל עם מידע רקע על Apps Script, BigQuery, Sheets ו-Slides.

סקריפט של Google Apps ו-BigQuery

Google Apps Script הוא פלטפורמת פיתוח ב-G Suite שפועלת ברמה גבוהה יותר מאשר שימוש בממשקי API של Google REST. זוהי סביבת פיתוח ללא שרת וללא אירוח, שניתן לגשת אליה ממגוון רחב של רמות למיומנויות פיתוח. במשפט אחד, "Apps Script הוא זמן ריצה של JavaScript ללא שרת עבור אוטומציה, תוספים ושילובים ב-G Suite.

הוא מבוסס על JavaScript בצד השרת, בדומה ל-Node.js, אבל מתמקד באינטגרציה הדוקה עם G Suite ועם שירותי Google אחרים, במקום אירוח מהיר של אפליקציות אסינכרוניות. היא גם כוללת סביבת פיתוח שעלולה להיות שונה לגמרי מזו שאליה אתם רגילים. באמצעות Apps Script אפשר:

  • פיתוח בעורך קוד מבוסס דפדפן, אך ניתן לפתח אותו באופן מקומי אם משתמשים ב-clasp, כלי הפריסה של שורת הפקודה עבור Apps Script
  • קוד בגרסה מיוחדת של JavaScript המותאם אישית אל G Suite ולשירותים אחרים או של Google (באמצעות שירותי Apps Script URLfetch או Jdbc)
  • לא ניתן לכתוב קוד הרשאה כי Apps Script מטפל בו בשבילך
  • אין צורך לארח את האפליקציה – היא פעילה ומופעלת בשרתי Google בענן

הערה: ברוב המקרים, מחוץ להיקף קוד ה-Lab הזה יש אפשרות ללמד אתכם Apps Script. יש לנו המון מקורות מידע באינטרנט שיעזרו לכם. התיעוד הרשמי כולל גם סקירה כללית עם קווים מהירים, מדריכים וסרטונים. לבסוף, אל תשכחו להוסיף את מעבדת הקוד להיכרות עם Apps Script, שעליכם להשלים לפני שתתחילו את השיעור הזה.

הממשק של Apps Script פועל עם טכנולוגיות אחרות של Google בשתי דרכים שונות:

  • שירות מובנה/מקורי
  • שירות מתקדם

שירות מובנה מספק שיטות ברמה גבוהה שבהן ניתן להשתמש כדי לגשת לנתוני מוצרים של G Suite או Google, או שיטות יעילות אחרות. שירות מתקדם הוא רק מעטפת מוקפת ב-G Suite או ב-Google REST API. שירותים מתקדמים מספקים כיסוי מלא של ה-API ל-REST, ולעיתים קרובות הם יכולים לבצע פעולות רבות יותר מהשירותים המובנים, אך עדיין מורכבים יותר (אבל עדיין קל יותר להשתמש בהם מאשר API עצמו. שירותים מתקדמים צריכים גם להפעיל לפרויקט סקריפט לפני השימוש בהם.

כאשר הדבר אפשרי, מפתחים מעדיפים להשתמש בשירות מובנה מכיוון שהם קלים יותר לשימוש ומוגבהים יותר משירותים מתקדמים. עם זאת, ממשקי API מסוימים של Google לא כוללים שירותים מובנים, לכן ייתכן ששירות מתקדם יהיה האפשרות היחידה. Google BigQuery הוא אחת הדוגמאות לכך... אין שירות מובנה זמין, אך שירות מתקדם של BigQuery קיים. (עדיף לא על השירות, נכון?) אם זו הפעם הראשונה שאתם משתמשים ב-BigQuery, זהו שירות GCP שמאפשר לכם לבצע שאילתות פשוטות (או מורכבות) על מאגרי נתונים גדולים מאוד, אבל הוא עדיין יכול לספק תוצאות תוך שניות.

גישה אל Google Sheets & Slides מ-Apps Script

בניגוד ל-BigQuery, גם ב-Google Sheets וגם ב-Slides יש שירותים מובנים (וגם שירותים מתקדמים, שמאפשרים לכם לגשת לתכונות שנמצאות רק ב-API). עליך לעיין במסמכים של שירותי Sheets מובנים וגם של Slides לפני שנכנסים לקוד. כמובן שיש גם מסמכים עבור השירותים המתקדמים; הם נמצאים כאן עבור Sheets ו-Slides, בהתאמה.

מבוא

אנחנו ניקח משימה קלה משיעור הקוד הזה במשימה הראשונה. למעשה, לאחר שתסיימו כאן, תסיימו כמעט את כל עבודת הקוד. תוצג לכם רשימה של כמה תתי-נושאים:

  • התחלת פרויקט חדש של סקריפט של Google Apps
  • הפעלת גישה לשירות המתקדם של BigQuery
  • יש לעבור לכלי הפיתוח ולהזין את קוד המקור של האפליקציה
  • יש לעבור את תהליך ההרשאה לאפליקציה (OAuth2)
  • הפעלת האפליקציה ששולחת בקשה ל-BigQuery
  • הצגת גיליון Google Sheets חדש שנוצר עם התוצאות מ-BigQuery

הגדרה

  1. א) יש ליצור פרויקט חדש ב-Apps Script דרך script.google.com . יש קווי מוצרים שונים ב-G Suite, ואופן היצירה של פרויקט חדש משתנה בהתאם לגרסה שבה משתמשים. אם זו הפעם הראשונה שאתם משתמשים בחשבון Gmail, ואתם רק מתחילים לפתח פרויקטים, יוצג לכם מסך ריק עם לחצן ליצירת הפרויקט הראשון:


ב) אחרת, אתם עשויים לראות את כל הפרויקטים שלכם ולחצן +חדש בפינה הימנית העליונה, לכן לוחצים עליו.



ג) אם אף אחת מהאפשרויות שלמעלה לא מופיעה, המסך עשוי להיראות כך למטה. אם כן, מחפשים את סמל התפריט המבורגר בפינה הימנית העליונה ובוחרים באפשרות +סקריפט חדש.



ד) אם אתם מעדיפים את שורת הפקודה. הכלי שלך הוא clasp, ובאופן ספציפי, אתה תריץ את הפקודה clasp create.

ה) הדרך הסופית ליצירת פרויקט סקריפט חדש היא פשוט לעבור אל קישור הקיצור: https://script.google.com/create.

  1. בלי קשר לשיטה שבה השתמשתם כדי להתחיל פרויקט חדש, השורה התחתונה היא שאחרי ההעברה יהיה לכם עורך קוד של Apps Script, שנראה כך:


  2. לוחצים על File > Save ונותנים שם לפרויקט.
  3. השלב הבא הוא ליצור פרויקט ב-Google Cloud Console כדי להריץ שאילתות BigQuery.
  1. יוצרים פרויקט חדש, נותנים לו שם, בוחרים חשבון לחיוב ולוחצים על יצירה.
  1. עם יצירת הפרויקט, תופיע התראה בפינה השמאלית העליונה של הדף. לוחצים על הרשומה Create project: <Project Name> כדי לפתוח את הפרויקט.
  2. לוחצים על סמל התפריט בפינה הימנית העליונה ועוברים אל APIs & Services > Credentials. לוחצים על הכרטיסייה מסך הסכמה ל-OAuth (קישור ישיר).
  3. בשדה שם האפליקציה מזינים "Big Data Codelab" ולוחצים על הלחצן שמירה בתחתית המסך.
  4. לוחצים על סמל התפריט (3 נקודות) בפינה השמאלית העליונה כדי להרחיב את התפריט ובוחרים באפשרות הגדרות הפרויקט (קישור ישיר).
  5. מעתיקים את הערך שמופיע בקטע מספר פרויקט. (יש שדה מזהה מוצר נפרד שנשתמש בו מאוחר יותר במעבדת הקוד.)
  6. חזרה בעורך App Script, לוחצים על Resources > Cloud Platform project.
  7. מזינים את מספר הפרויקט בתיבת הטקסט ולוחצים על הגדרת הפרויקט. כשמופיעה בקשה, לוחצים על אישור.
  8. בסיום, לוחצים על הלחצן סגירה כדי לסגור את תיבת הדו-שיח.
  9. עכשיו, לאחר הגדרת פרויקט חדש, עליכם להפעיל את השירות המתקדם של BigQuery. לכן, יש למשוך למטה את Resources -> Advanced Google Services ולהפעיל את ממשק ה-API של BigQuery.


  10. הערה במצב התחתון, "שירותים אלה חייבים להיות מופעלים גם ב-"מרכז הבקרה של Google Cloud Platform API, לכן יש ללחוץ על הקישור הזה שפותח כרטיסייה אחרת בדפדפן למסוף המפתחים או "devconsole" .
  11. ב-dev Console, לוחצים על הלחצן +Enable APIs and Services (הפעלה של ממשקי API ושירותים) בחלק העליון, מחפשים את "bigquery" , בוחרים את BigQuery API (לא את BigQuery Data Transfer API) ולוחצים על enable (הפעלה) כדי להפעיל אותו. משאירים את כרטיסיית הדפדפן הזו פתוחה.

    הערה: לאחר הפעלת ה-API, ייתכן שתוצג בדף הזה הערה כמו: "כדי להשתמש ב-API הזה, צריך ליצור פרטי כניסה..., " אבל אין צורך לדאוג לכך בשלב זה – Apps Script יטפל בשלב הזה בשבילך.


  12. בחזרה לכרטיסיית הדפדפן של עורך הקוד, אתם עדיין נמצאים בתפריט המתקדם של שירותי Google. לכן, לחצו על אישור כדי לסגור את תיבת הדו-שיח ותשאירו אתכם בעורך הקוד. לוחצים על שם הפרויקט בחלק העליון, ונותנים לו שם לפי בחירתך, "הדגמת BigQuery; או שם דומה – נתנו שם ל"מייל סופי".

עכשיו אתם מוכנים להזין את קוד האפליקציה, לעבור את תהליך ההרשאה ולהתחיל את תהליך ההטמעה הראשון של האפליקציה.

העלאת האפליקציה והרצה שלה

  1. מעתיקים את הקוד בתיבה שבהמשך ומדביקים בו את כל הפרטים בעורך הקוד:
// 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.

  1. אנחנו כמעט מוכנים לנסות את זה. כפי שאתה רואה בחלק העליון של קטע הקוד הזה, עליך להזין מזהה פרויקט חוקי, לכן עלינו להוסיף את הקוד שלך לקוד האפליקציה. כדי לעשות את זה, חוזרים לחלון או לכרטיסייה של הדפדפן שבהם מופיע הדף של מסוף המפתחים. (אמרנו לך להשאיר אותו פתוח, נכון?)
  2. בפינה הימנית העליונה של הדמות של חשבון Google, מופיע בורר התפריטים הנפתחים (). לוחצים עליו ובוחרים באפשרות Project settings (הגדרות פרויקט). יוצגו השם, המזהה והמספר של הפרויקט. מעתיקים את מזהה הפרויקט ומגדירים את המשתנה PROJECT_ID בחלק העליון של bq-sheets-slides.js לערך שקיבלתם ממסוף המפתחים. הערה: אם בורר התפריטים נתקע ולא ניתן להפעיל אותו, יש לטעון מחדש את הדף.
  3. ההצהרה if נועדה למנוע את המשך הטיפול של האפליקציה ללא מזהה פרויקט. לאחר ההוספה של הקובץ שלכם, שמירה של הקובץ והפעלת הקוד, נכנסים לסרגל התפריטים ובוחרים באפשרות Run > Run function > RunQuery, לוחצים על Review Permissions (תיבת הדו-שיח) בקטע 'בדיקת הרשאות'. האפליקציה לא מאומתת ובתחתיתה מופיע GIF מונפש (לאפליקציה אחרת) שמתאר את השלבים הבאים:
  4. לאחר הבקשה לבדוק את ההרשאות, תוצג לכם תיבת דו-שיח חדשה, כפי שמתואר למעלה. בוחרים את חשבון Google הנכון שיריץ את הסקריפט, בוחרים באפשרות מתקדם, גוללים למטה ולוחצים על "מעבר אל <YOUR PROJECT NAME> (unsafe)" כדי להגיע למסך ההרשאות של אפליקציית OAuth2. (מומלץ לקרוא מידע נוסף על תהליך האימות כדי להבין למה המסך הזה שוכן ביניכם לבין תיבת הדו-שיח של הרשאת OAuth2 שבהמשך.)


    הערה: לאחר האישור של האפליקציה, אין צורך לחזור על התהליך הזה בכל הפעלה. רק אחרי שתופיע במשימה 3, תוצג לכם שוב המסך הזה בתיבת הדו-שיח, שבה תתבקשו לתת למשתמש הרשאה ליצור ולנהל מצגות ב-Google Slides.
  5. לאחר הלחיצה על אישור בחלון הדו-שיח של OAuth2, הסקריפט יתחיל לפעול... בתיבת הדו-שיח תופיע צהוב פסטל בחלק העליון. היא פועלת במהירות יחסית, לכן ייתכן שלא תבחינו שהיא פועלת או שביצועה הושלם.

  6. תיבת הדו-שיח הזו נעלמת בסיום הפעולה, לכן אם היא לא מופיעה, כנראה שהיא הסתיימה, לכן כדאי להיכנס ל-Google Drive (drive.google.com) ולחפש גיליון Google Sheets חדש בשם "המילים הנפוצות ביותר בכל העבודות של שייקספיר' או כל מה שהקצית למשתנה QUERY_NAME:


  7. פותחים את הגיליון האלקטרוני אמורים לראות 10 שורות מילים ואת מספר הסיכום שלהן בסדר יורד:

סיכום של משימה 1

קל לזהות מה קרה... הרצתם קוד כלשהו ששאל את כל היצירות של שייקספיר (אבל לא כמות גדולה של נתונים, אבל בהחלט יש יותר טקסט מאשר אתם יכולים לסרוק בעצמכם את כל המילים בכל משחק, לנהל את הספירה של המילים האלה בסדר יורד. בנוסף, ביקשתם מ-BigQuery לעשות זאת בשמכם, אבל הצלחתם להשתמש בשירות המובנה ב-Apps Script של Google Sheets כדי להעביר אותו לנתונים בקלות.

אפשר למצוא את הקוד של bq-sheets-slides.js (שם הקובץ שנבחר) שהודבק למעלה (חוץ מ-PROJECT_ID שאמור להכיל מזהה פרויקט אמיתי), גם בתיקייה של step1 בסקריפט של GitHub ב-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().

  1. יוצרים תרשים. כדאי להוסיף את התוכן של 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);
}
  1. חזרה לגיליון האלקטרוני. למעלה, createColumnChart() זקוק לאובייקט הגיליון האלקטרוני, ולכן עלינו לעדכן את runQuery() כדי להחזיר את האובייקט spreadsheet, כדי שנוכל להעביר אותו אל createColumnChart(). אחרי שיוצרים גיליון אלקטרוני ב-Google Sheets, צריך להחזיר את האובייקט spreadsheet בסוף runQuery(), מיד אחרי שורת היומן:
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());

  // NEW: Return the spreadsheet object for later use.
  return spreadsheet;
}
  1. נהיגה createBigQueryPresentation(). הפרדה לוגית בין הפונקציונליות של BigQuery לבין יצירת התרשימים היא רעיון טוב. עכשיו הגיע הזמן ליצור פונקציה ב-createBigQueryPresentation() לעידוד האפליקציה באמצעות האפליקציה runQuery() וגם createColumnChart(). הקוד שמוסיפים צריך להיראות כך:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  createColumnChart(spreadsheet);
}
  1. צרו קוד לשימוש חוזר. ביצעת את שני השלבים החשובים הבאים: החזרת אובייקט הגיליון האלקטרוני ויצירת פונקציית נהיגה. מה קורה אם קולגה רוצה לעשות שימוש חוזר ב-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 Sheets, אבל הפעם יוצג תרשים בגיליון האלקטרוני לצד הנתונים:

החלק האחרון של קוד שיעור ה-Lab כולל יצירה של מצגת חדשה ב-Google Slides, מילוי הכותרת והכותרת בשקף הכותרת, הוספת 2 שקפים חדשים, אחד לכל אחד מתאי הנתונים ושני לתרשים.

  1. יוצרים שקף. כל העבודה דק השקף תתבצע ב-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');
  1. הוספת טבלת נתונים. השלב הבא ב-createSlidePresentation() הוא לייבא את נתוני התא מגיליון Google Sheets למצגת החדשה. קטע קוד זה, לכן יש להוסיף אותו לפונקציה:
  // 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]));
    }
  }
  1. מייבאים תרשים. השלב האחרון ב-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;
}
  1. תרשים החזרה. עכשיו, כשהפונקציה הסופית הושלמה, בודקים שוב את החתימה שלה. כן, עבור createSlidePresentation() צריך גם גיליון אלקטרוני וגם אובייקט תרשים. כבר התאמנו את runQuery() כדי להחזיר את האובייקט Spreadsheet, אבל עכשיו אנחנו צריכים לבצע שינוי דומה ל-createColumnChart() כדי להחזיר את אובייקט התרשים (EmbeddedChart). עליך לחזור לאפליקציה שלך כדי להוסיף קוד בסוף השורה האחרונה בסוף הפונקציה createColumnChart():
  // NEW: Return chart object for later use
  return chart;
}
  1. לעדכון createBigQueryPresentation(). מכיוון שהתרשים מחזיר את התרשים, אנחנו צריכים לשמור את התרשים במשתנה ואז להעביר את הגיליון האלקטרוני ואת התרשים ל-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
}
  1. שמירה והפעלה של createBigQueryPresentation() שוב. עם זאת, לפני הפעלתה, עליך לזהות באפליקציה שלך עוד קבוצת הרשאות מהמשתמש שלך כדי לצפות במצגות שלך ב-Google Slides ולנהל אותן. אחרי אישור ההרשאה הזו, היא תפעל כמו קודם.
  2. בנוסף לגיליון שנוצר, עליכם לקבל גם מצגת חדשה של Slides עם 3 שקפים (כותרת, טבלת נתונים ותרשים נתונים), כפי שמוצג בהמשך:

מעולה! עכשיו אתם יוצרים אפליקציה שמשתמשת בשני הצדדים של Google Cloud, על ידי ביצוע בקשה מ-Google BigQuery שמתעדת אחת מקבוצות הנתונים שלה, יוצרת גיליון Google Sheets חדש כדי לאחסן את התוצאות, מוסיפה תרשים שמבוסס על הנתונים שנשלפו לאחרונה ובסופו של דבר יוצרת מצגת ב-Google Slides שכוללת את התוצאות, וגם תרשים בגיליון האלקטרוני.

זה מה שעשיתם באופן טכני. באופן כללי, עברתם מניתוח נתונים גדול למשהו שאפשר להציג לבעלי עניין, והכול בקוד, באופן אוטומטי. אנחנו מקווים שהדוגמה הזו תעודד אתכם לקחת את הקטע הזה ולהתאים אותו אישית לפרויקטים שלכם. בסיום שיעור Lab זה, נספק כמה הצעות שיעזרו לך לשפר עוד יותר את האפליקציה לדוגמה הזו.

אם ביצעת את השינויים שלמעלה מהמשימה האחרונה (מלבד 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 זה הוא קובץ ה-"ה שני;" ב-codelab זה, שהוא קובץ המניפסט של Apps Script, appsscript.json. כדי לגשת אליו, נכנסים לכרטיסייה 'עורך קוד' של הדפדפן ובוחרים באפשרות הצגה > הצגת קובץ מניפסט מהתפריט שבחלק העליון. התוכן צריך להיראות בערך כך:

appscript.json

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "BigQuery",
      "serviceId": "bigquery",
      "version": "v2"
    }]
  },
  "exceptionLogging": "STACKDRIVER"
}

קובץ המניפסט הוא קובץ הגדרה ברמת המערכת שבו Apps Script משתמש כדי לדעת איזו סביבת הפעלה תהיה זמינה לאפליקציה שלכם. הסתרת התוכן של קובץ מניפסט לא נמצאת במסגרת היקף ה-Codelab הזה, אבל אפשר להבין מה הוא עושה.

בהמשך הדף ישנם מקורות מידע נוספים שיעזרו לכם להתעמק בחומר המקור של שיעור ה-Lab הזה ולגלות דרכים פרוגרמטיות אחרות לגשת לכלים למפתחים של Google. אנחנו שואפים לסנכרן את ה-Codelab הזה עם ה-Repo.

משאבים לאפליקציה הזו

מאמרי עזרה

Codelabs אחרים

רמה למתחילים

רמה בינונית

אפליקציות עזר

בהמשך מוצגים מגוון אתגרים של &code;code; דרכים שונות שבהן ניתן לשפר או להרחיב את הדוגמה שפיתחנו במעבדת קוד זו. רשימה זו חלקית בלבד, אך היא צריכה לתת רעיונות מעוררי השראה בנוגע לשלב הבא שבו תוכלו לנקוט.

  • אפליקציה. לא רוצה להגביל אותך באמצעות JavaScript או הגבלות שהוטלו על ידי Apps Script? מעבירים את האפליקציה הזו לשפת התכנות המועדפת עליכם באמצעות ממשקי API של REST עבור Google BigQuery , Sheets ו-Slides.
  • BigQuery. אפשר לנסות שאילתה אחרת עם מערך הנתונים של שייקספיר... אולי תמצא שאילתה שמעניינת אותך. שאילתה לדוגמה אחרת נמצאת באפליקציה לדוגמה המקורית של Apps Script של BigQuery.
  • BigQuery. נסו חלק ממערכי הנתונים הציבוריים האחרים של BigQuery... אולי תמצאו קבוצת נתונים בעלת משמעות רבה יותר עבורכם.
  • BigQuery. מוקדם יותר הזכרנו שאילתות אחרות שאפשר לנסות כנגד יצירות של שייקספיר או טבלאות נתונים אחרות, ורצינו לשתף שוב את דף האינטרנט הזה וכן את הדף הזה שוב.
  • Sheets. אפשר לנסות סוגים אחרים של תרשימים.
  • Sheets & BigQuery. סובב את הטבלאות... אולי יש לך מערך נתונים גדול בגיליון אלקטרוני. ב-2016, צוות BigQuery השיק את התכונה שמאפשרת למפתחים להשתמש בגיליון אלקטרוני כמקור נתונים (מידע נוסף זמין בפוסט בבלוג אחת ובשתיים).
  • Slides. להוסיף שקפים אחרים למצגת שנוצרה, כמו תמונות או נכסים אחרים שקשורים לניתוח הנתונים הגדולים. ריכזנו כאן מדריך לשירות המובנה של Slides.
  • G Suite. תוכלו למצוא מידע על השירותים האחרים של G Suite או של Google המובנים ב-Apps Script, כלומר Gmail , Google Drive, יומן Google , Docs , מפות Google , Google Analytics , YouTube וכו', וכן שירותים מתקדמים אחרים. כדי לקבל מידע נוסף, אפשר לעיין בסקירה הכללית בנושא קובצי עזר גם בשירותים מובְנים וגם בשירותים מתקדמים.