داده‌های بزرگ خود را با استفاده از کاربرگ‌نگار و اسلایدنگار Google به اطلاعات آماری تبدیل کنید

۱. از تحلیل کلان‌داده تا ارائه اسلاید

ابزارهای زیادی برای دانشمندان داده وجود دارد تا تجزیه و تحلیل داده‌های بزرگ را انجام دهند، اما در نهایت تحلیلگران هنوز باید نتایج را برای مدیریت توجیه کنند. تعداد زیادی از اعداد روی کاغذ یا در یک پایگاه داده به سختی برای ذینفعان کلیدی قابل ارائه است. این آزمایشگاه کدنویسی Google Apps Script سطح متوسط ​​از دو پلتفرم توسعه‌دهندگان گوگل ( Google Workspace و Google Cloud Console ) استفاده می‌کند تا به شما در خودکارسازی آن بخش نهایی کمک کند.

ابزارهای توسعه‌دهندگان گوگل کلود به شما امکان می‌دهند تجزیه و تحلیل عمیق داده‌ها را انجام دهید. سپس می‌توانید نتایج را دریافت کنید، آنها را در یک صفحه گسترده وارد کنید و یک ارائه اسلاید با داده‌ها ایجاد کنید. این روش مناسب‌تری برای ارائه داده‌ها به مدیریت ارائه می‌دهد. این آزمایشگاه کد، رابط برنامه‌نویسی BigQuery کنسول کلود (به عنوان یک سرویس پیشرفته Apps Script) و سرویس‌های Apps Script داخلی برای Google Sheets و Google Slides را پوشش می‌دهد.

انگیزه

برنامه نمونه در این آزمایشگاه کد از این نمونه‌های کد دیگر الهام گرفته شده است:

اگرچه برنامه نمونه Codelab مربوط به Slides API نیز از BigQuery و Slides بهره می‌برد، اما از چندین جهت با برنامه نمونه Codelab متفاوت است:

  • برنامه Node.js آنها در مقابل برنامه Apps Script ما.
  • آنها از REST APIs استفاده می‌کنند در حالی که ما از سرویس‌های Apps Script استفاده می‌کنیم.
  • آنها از گوگل درایو استفاده می‌کنند اما از گوگل شیت نه، در حالی که این برنامه از شیت استفاده می‌کند اما از درایو نه.

برای این آزمایشگاه کد، ما می‌خواستیم چندین فناوری را در یک برنامه واحد گرد هم آوریم و در عین حال ویژگی‌ها و APIهای مختلف از سراسر Google Cloud را به روشی که شبیه یک مورد استفاده در زندگی واقعی باشد، به نمایش بگذاریم. هدف این است که شما را ترغیب کنیم تا از تخیل خود استفاده کنید و استفاده از Cloud Console و Google Workspace را برای حل مشکلات چالش‌برانگیز سازمان و مشتریان خود در نظر بگیرید.

آنچه یاد خواهید گرفت

  • نحوه استفاده از اسکریپت برنامه‌های گوگل با چندین سرویس گوگل
  • نحوه استفاده از Google BigQuery برای تجزیه و تحلیل کلان داده
  • نحوه ایجاد یک صفحه گوگل و وارد کردن داده‌ها در آن
  • نحوه ایجاد نمودار در Sheets
  • نحوه انتقال داده‌ها و نمودارها از Sheets به ارائه Google Slides

آنچه نیاز دارید

  • یک مرورگر وب با دسترسی به اینترنت
  • یک حساب گوگل (حساب‌های Google Workspace ممکن است نیاز به تأیید مدیر داشته باشند)
  • آشنایی اولیه با گوگل شیت
  • توانایی خواندن نت‌های A1
  • مهارت‌های پایه جاوا اسکریپت
  • آشنایی با توسعه اسکریپت برنامه‌ها مفید است اما الزامی نیست

۲. نظرسنجی

چگونه از این آزمایشگاه کد/آموزش استفاده خواهید کرد؟

برای اهداف اطلاعاتی آن را مطالعه کنید، و احتمالاً آن را به همکاران فنی خود نیز منتقل کنید. تا جایی که می‌توانم آن را مرور می‌کنم و تا جایی که می‌توانم تمرین‌هایش را امتحان می‌کنم هر اتفاقی بیفتد یا بیفتد، من کل آزمایشگاه کد را تکمیل خواهم کرد.

تجربه خود را با ابزارها و APIهای توسعه‌دهندگان Google Workspace چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

تجربه خود را با Apps Script به طور خاص چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

تجربه خود را با ابزارها و APIهای توسعه‌دهندگان Cloud Console چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

۳. مرور کلی

حالا که می‌دانید این آزمایشگاه کد درباره چیست، کارهایی که باید انجام دهید به شرح زیر است:

  1. یک نمونه Apps Script-BigQuery موجود را انتخاب کنید و آن را به کار بیندازید.
  2. از روی نمونه، یاد بگیرید که چگونه یک پرس‌وجو به BigQuery ارسال کنید و نتایج را دریافت کنید.
  3. یک گوگل شیت ایجاد کنید و نتایج BigQuery را در آن وارد کنید.
  4. کد را طوری تغییر دهید که داده‌های برگردانده شده و درج شده در Sheet را کمی تغییر دهد.
  5. از سرویس Sheets در Apps Script برای ایجاد نمودار برای داده‌های BigQuery استفاده کنید.
  6. برای ایجاد یک ارائه در گوگل اسلایدز، از سرویس اسلایدها استفاده کنید.
  7. یک عنوان و زیرعنوان به اسلاید عنوان پیش‌فرض اضافه کنید.
  8. یک اسلاید با جدول داده‌ها ایجاد کنید و سلول‌های داده‌ی Sheet را به آن منتقل کنید.
  9. یک اسلاید دیگر ایجاد کنید و نمودار صفحه گسترده را در آن وارد کنید.

بیایید با کمی اطلاعات پیش‌زمینه در مورد Apps Script، BigQuery، Sheets و Slides شروع کنیم.

اسکریپت برنامه‌های گوگل و BigQuery

Google Apps Script یک پلتفرم توسعه Google Workspace است که در سطح بالاتری نسبت به Google REST APIs عمل می‌کند. این یک محیط توسعه و میزبانی برنامه بدون سرور است که برای همه سطوح مهارت توسعه‌دهندگان قابل دسترسی است. اساساً، Apps Script یک زمان اجرای جاوا اسکریپت بدون سرور برای اتوماسیون، افزونه‌ها و ادغام Google Workspace است.

این برنامه از جاوا اسکریپت سمت سرور، مشابه Node.js، استفاده می‌کند، اما به جای میزبانی سریع و غیرهمزمان برنامه مبتنی بر رویداد، بر ادغام دقیق با Google Workspace و سایر سرویس‌های گوگل تمرکز دارد. همچنین دارای یک محیط توسعه است که ممکن است با آنچه شما به آن عادت دارید متفاوت باشد. با Apps Script، شما:

  • اسکریپت‌ها را با استفاده از یک ویرایشگر کد مبتنی بر مرورگر توسعه دهید، اما می‌توانید با استفاده از clasp ، ابزار استقرار خط فرمان برای Apps Script، به صورت محلی نیز توسعه دهید.
  • کد را در یک نسخه تخصصی از جاوا اسکریپت بنویسید که برای دسترسی به Google Workspace و سایر سرویس‌های گوگل یا خارجی سفارشی شده باشد (با استفاده از سرویس‌های URL Fetch یا JDBC اپلیکیشن Apps Script).
  • می‌تواند از نوشتن کد مجوز جلوگیری کند زیرا Apps Script آن را برای شما مدیریت می‌کند.
  • لازم نیست برنامه خود را میزبانی کنید - این برنامه روی سرورهای گوگل در فضای ابری اجرا می‌شود.

Apps Script به دو روش مختلف با سایر فناوری‌های گوگل ارتباط برقرار می‌کند:

  • به عنوان یک سرویس داخلی
  • به عنوان یک سرویس پیشرفته

یک سرویس داخلی دارای متدهای سطح بالا برای تعامل با داده‌های کاربر، سایر سیستم‌های گوگل و سیستم‌های خارجی است. یک سرویس پیشرفته اساساً یک پوشش نازک در اطراف یک API فضای کاری گوگل یا API REST گوگل است. سرویس‌های پیشرفته پوشش کاملی از API REST را ارائه می‌دهند و اغلب می‌توانند کارهای بیشتری نسبت به سرویس‌های داخلی انجام دهند، اما به پیچیدگی کد بیشتری نیاز دارند (در حالی که استفاده از آنها همچنان آسان‌تر از API REST کامل است). سرویس‌های پیشرفته همچنین باید قبل از استفاده برای یک پروژه اسکریپت فعال شوند .

در صورت امکان، توسعه‌دهندگان باید از یک سرویس داخلی استفاده کنند زیرا استفاده از آنها آسان‌تر است و کارهای بیشتری نسبت به سرویس‌های پیشرفته انجام می‌دهند. با این حال، برخی از APIهای گوگل سرویس‌های داخلی ندارند، بنابراین یک سرویس پیشرفته ممکن است تنها گزینه باشد. به عنوان مثال، Google BigQuery هیچ سرویس داخلی ندارد، اما سرویس BigQuery وجود دارد. سرویس BigQuery یک سرویس Cloud Console است که به شما امکان می‌دهد از Google BigQuery API برای انجام پرس‌وجو در داده‌های بزرگ (به عنوان مثال، چندین ترابایت) استفاده کنید، اما همچنان می‌تواند نتایج را در عرض چند ثانیه ارائه دهد.

دسترسی به برگه‌ها و اسلایدها از طریق اسکریپت برنامه‌ها

برخلاف BigQuery، هم Sheets و هم Slides دارای سرویس‌های داخلی هستند. آن‌ها همچنین سرویس‌های پیشرفته‌ای برای دسترسی به ویژگی‌هایی دارند که فقط در API یافت می‌شوند. قبل از شروع کد، مستندات مربوط به سرویس‌های داخلی Sheets و Slides را مشاهده کنید. توجه داشته باشید که مستنداتی برای سرویس‌های پیشرفته Sheets و Slides نیز وجود دارد.

۴. وظیفه ۱: اجرای BigQuery و ثبت نتایج در Sheets

مقدمه

ما قصد داریم بخش بزرگی از این آزمایشگاه کد را با این وظیفه اول انجام دهیم. در واقع، وقتی این کار را انجام دهید، تقریباً نیمی از کل آزمایشگاه کد را انجام داده‌اید. این بخش به چندین زیربخش تقسیم می‌شود و شما:

  • یک پروژه Google Apps Script و Cloud Console ایجاد کنید.
  • دسترسی به سرویس پیشرفته BigQuery را فعال کنید.
  • ویرایشگر اسکریپت را باز کنید و کد منبع برنامه را وارد کنید.
  • فرآیند مجوز برنامه (OAuth2) را پیمایش کنید.
  • برنامه‌ای را که درخواستی را به BigQuery ارسال می‌کند، اجرا کنید.
  • Google Sheet جدید ایجاد شده با استفاده از نتایج BigQuery را بررسی کنید.

راه‌اندازی

  1. برای ایجاد یک پروژه Apps Script، به script.google.com بروید و روی New project کلیک کنید.
  2. برای تغییر نام پروژه Apps Script خود، روی Untitled project کلیک کنید، عنوانی برای پروژه خود وارد کنید و روی Rename کلیک کنید.

در مرحله بعد، باید یک پروژه Cloud Console برای جستجوی داده‌ها در BigQuery ایجاد کنید.

  1. برای ایجاد یک پروژه Cloud Console، از این لینک میانبر برای ایجاد یک پروژه استفاده کنید، نامی برای پروژه انتخاب کنید و روی Create کلیک کنید.
  1. وقتی ایجاد پروژه کامل شد، یک اعلان در صفحه ظاهر می‌شود. مطمئن شوید که پروژه جدید شما در لیست پروژه‌ها در بالای صفحه انتخاب شده است.
  2. روی منو کلیک کنید f5fbd278915eb7aa.png و به APIها و خدمات > صفحه رضایت OAuth ( لینک مستقیم ) بروید.
  3. برای ساخت برنامه‌ای برای کاربران Google Workspace در سازمان خود، روی داخلی > ایجاد کلیک کنید.
  4. در فیلد نام برنامه ، عبارت «Big Data Codelab» را وارد کنید.
  5. ایمیل‌های تماس را برای فیلدهای اطلاعات تماس پشتیبانی کاربر و توسعه‌دهنده وارد کنید.
  6. روی ذخیره و ادامه > ذخیره و ادامه کلیک کنید.
  7. روی «بیشتر» کلیک کنید 50fa7e30ed2d1b1c.png در نوار ناوبری کلیک کنید و تنظیمات پروژه ( لینک مستقیم ) را انتخاب کنید.
  8. مقدار ذکر شده در زیر شماره پروژه را کپی کنید. (یک فیلد جداگانه برای شناسه پروژه بعداً در آزمایشگاه کد استفاده می‌شود.)

در مرحله بعد، پروژه Apps Script خود را به پروژه Cloud Console متصل خواهید کرد.

  1. به ویرایشگر اسکریپت برنامه بروید و روی تنظیمات پروژه کلیک کنید تنظیمات-دنده .
  2. در زیر پروژه پلتفرم ابری گوگل (GCP)، روی تغییر پروژه کلیک کنید.
  3. شماره پروژه را وارد کنید و روی «تنظیم پروژه» کلیک کنید.
  4. بعد، روی ویرایشگر کلیک کنید ویرایشگر کد برای شروع اضافه کردن سرویس پیشرفته BigQuery.
  5. در کنار سرویس‌ها ، روی افزودن سرویس کلیک کنید اضافه کردن سرویس .
  6. در پنجره‌ی «افزودن سرویس»، BigQuery API را انتخاب کرده و روی «افزودن» کلیک کنید.

مرحله آخر، فعال کردن API بیگ‌کوئری در کنسول ابری است.

  1. برای انجام این کار، به کنسول ابری بروید و روی APIها و خدمات > داشبورد کلیک کنید. (مطمئن شوید که هنوز روی همان پروژه‌ای هستید که در مرحله ۳ ایجاد کردید.)
  2. روی فعال کردن APIها و سرویس‌ها کلیک کنید.
  3. عبارت «big query» را جستجو کنید، BigQuery API ( نه BigQuery Data Transfer API) را انتخاب کنید و برای فعال کردن آن، روی Enable کلیک کنید.

a0e07fa159de9367.png

اکنون آماده‌اید تا کد برنامه را وارد کنید، مراحل مجوزدهی را طی کنید و اولین نسخه از این برنامه را اجرا کنید.

برنامه را آپلود کنید و اجرا کنید

  1. در ویرایشگر اسکریپت، بلوک کد پیش‌فرض myFunction() را با کد زیر جایگزین کنید:
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into a Sheet. You must turn on
 * the BigQuery advanced service before you can run this code.
 * @see https://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
 */
function runQuery() {
  // Replace sample with your own BigQuery query.
  var request = {
    query:
        'SELECT ' +
            'LOWER(word) AS word, ' +
            'SUM(word_count) AS count ' +
        'FROM [bigquery-public-data:samples.shakespeare] ' +
        'GROUP BY word ' +
        'ORDER BY count ' +
        'DESC LIMIT 10'
  };
  var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
  var jobId = queryResults.jobReference.jobId;

  // Wait for BigQuery job completion (with exponential backoff).
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
  }

  // Get all results from BigQuery.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  // Return null if no data returned.
  if (!rows) {
    return Logger.log('No rows returned.');
  }

  // Create the results spreadsheet.
  var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
  var sheet = spreadsheet.getActiveSheet();

  // Add headers to Sheet.
  var headers = queryResults.schema.fields.map(function(field) {
    return field.name.toUpperCase();
  });
  sheet.appendRow(headers);

  // Append the results.
  var data = new Array(rows.length);
  for (var i = 0; i < rows.length; i++) {
    var cols = rows[i].f;
    data[i] = new Array(cols.length);
    for (var j = 0; j < cols.length; j++) {
      data[i][j] = cols[j].v;
    }
  }

  // Start storing data in row 2, col 1
  var START_ROW = 2;      // skip header row
  var START_COL = 1;
  sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);

  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
}
  1. روی ذخیره کلیک کنید ذخیره کردن .
  2. در کنار Code.gs ، روی «بیشتر» کلیک کنید 50fa7e30ed2d1b1c.png > تغییر نام . عنوان را از Code.gs به bq-sheets-slides.js تغییر دهید.
  3. در مرحله بعد، کدی را بررسی می‌کنیم که BigQuery را پرس‌وجو می‌کند و نتایج را در یک Google Sheet می‌نویسد. می‌توانید آن را در بالای 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 چقدر می‌تواند مفید باشد.

این تابع همچنین یک متغیر PROJECT_ID تعریف می‌کند که به یک شناسه پروژه معتبر Cloud Console نیاز دارد. عبارت if زیر این متغیر برای جلوگیری از ادامه برنامه بدون شناسه پروژه وجود دارد.

  1. به پروژه Cloud Console خود بروید، روی «بیشتر» کلیک کنید 50fa7e30ed2d1b1c.png در نوار پیمایش، و تنظیمات پروژه را انتخاب کنید.
  2. مقدار ذکر شده در زیر شناسه پروژه را کپی کنید.
  3. به ویرایشگر App Script برگردید، متغیر PROJECT_ID را در bq-sheets-slides.js پیدا کنید و مقدار آن را اضافه کنید.
  4. روی ذخیره کلیک کنید ذخیره کردن > بدو .
  5. برای ادامه، روی بررسی مجوزها کلیک کنید.
  1. به محض اینکه اسکریپت شروع به اجرا می‌کند، گزارش اجرای داخلی باز می‌شود و اقدامات اسکریپت را به صورت بلادرنگ ثبت می‌کند.
  1. به محض اینکه عبارت «اجرا تکمیل شد» در گزارش اجرا نمایش داده شد، به گوگل درایو خود ( drive.google.com ) بروید و صفحه گوگل با نام «رایج‌ترین کلمات در تمام آثار شکسپیر» (یا نامی که به متغیر QUERY_NAME اختصاص داده‌اید، اگر آن را به‌روزرسانی کرده‌اید) را پیدا کنید:
  2. برای مشاهده 10 کلمه رایج و تعداد کل آنها که به ترتیب نزولی مرتب شده‌اند، صفحه گسترده را باز کنید:

afe500ad43f8cdf8.png

خلاصه وظیفه ۱

برای بررسی، شما کدی را اجرا کردید که تمام آثار شکسپیر را با بررسی هر کلمه در هر نمایشنامه جستجو می‌کرد. این کد کلمات را می‌شمرد و آنها را به ترتیب نزولی ظاهر مرتب می‌کرد. شما همچنین از سرویس داخلی Apps Script برای Google Sheets برای نمایش این داده‌ها استفاده کردید.

کدی که برای bq-sheets-slides.js استفاده کردید را می‌توانید در پوشه step1 مخزن گیت‌هاب این codelab به آدرس github.com/googlecodelabs/bigquery-sheets-slides نیز پیدا کنید. این کد از این مثال اصلی در صفحه خدمات پیشرفته BigQuery الهام گرفته شده است که یک پرس‌وجوی کمی متفاوت را اجرا می‌کند و محبوب‌ترین کلمات با 10 کاراکتر یا بیشتر استفاده شده توسط شکسپیر را بازیابی می‌کند. همچنین می‌توانید نمونه‌ای را در مخزن گیت‌هاب آن مشاهده کنید.

اگر به کوئری‌های دیگری که می‌توانید با آثار شکسپیر یا سایر جداول داده عمومی بسازید علاقه‌مند هستید، به «نحوه کوئری کردن جداول نمونه BigQuery» و این مخزن گیت‌هاب مراجعه کنید.

همچنین می‌توانید قبل از اجرای کوئری‌ها در Apps Script، آنها را با استفاده از صفحه BigQuery در Cloud Console اجرا کنید. برای یافتن آن، روی Menu کلیک کنید. f5fbd278915eb7aa.png و به BigQuery UI > SQL workspace ( لینک مستقیم ) بروید. برای مثال، نحوه نمایش کوئری ما در رابط گرافیکی BigQuery به این صورت است:

BigQueryUI

۵. وظیفه ۲: ایجاد نمودار در گوگل شیت

هدف runQuery() استفاده از BigQuery و ارسال نتایج داده‌های آن به یک Google Sheet است. در مرحله بعد باید با استفاده از داده‌ها یک نمودار ایجاد کنیم. بیایید یک تابع جدید به نام createColumnChart() ایجاد کنیم که متد newChart() شیت‌ها را فراخوانی می‌کند.

  1. در ویرایشگر Apps Script، تابع createColumnChart() را پس از runQuery() به bq-sheets-slides.js اضافه کنید. این کد، شیت را دریافت کرده و یک نمودار ستونی با تمام داده‌ها درخواست می‌کند. محدوده داده‌ها از سلول A2 شروع می‌شود، زیرا ردیف اول شامل سرستون‌ها است.
/**
 * Uses spreadsheet data to create a column chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} Visualizes the results
 * @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first) Sheet.
  var sheet = spreadsheet.getSheets()[0];
  // Data range in Sheet is from cell A2 to B11.
  var START_CELL = 'A2';  // skip header row
  var END_CELL = 'B11';
  // Place chart on Sheet starting on cell E5.
  var START_ROW = 5;      // row 5
  var START_COL = 5;      // col E
  var OFFSET = 0;

  // Create & place chart on the Sheet using above values.
  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.COLUMN)
     .addRange(sheet.getRange(START_CELL + ':' + END_CELL))
     .setPosition(START_ROW, START_COL, OFFSET, OFFSET)
     .build();
  sheet.insertChart(chart);
}
  1. تابع createColumnChart() به یک پارامتر شیء صفحه گسترده نیاز دارد، بنابراین باید runQuery() را به‌روزرسانی کنیم تا یک شیء spreadsheet را که می‌توانیم به createColumnChart() ارسال کنیم، برگرداند. در پایان runQuery() ، شیء spreadsheet را پس از ثبت ایجاد موفقیت‌آمیز برگه، برگردانید:
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());

  // NEW: Return the spreadsheet object for later use.
  return spreadsheet;
}
  1. یک تابع createBigQueryPresentation() ایجاد کنید تا هم runQuery() و createColumnChart() را فراخوانی کند. جداسازی منطقی BigQuery و عملکرد ایجاد نمودار، بهترین روش است:
/**
 * Runs the query, adds data and a chart to a spreadsheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  createColumnChart(spreadsheet);
}
  1. شما دو مرحله مهم را در بالا انجام دادید: برگرداندن شیء صفحه گسترده و ایجاد تابع ورودی. برای اینکه runQuery() قابل استفاده‌تر شود، باید خط گزارش را از runQuery() به createBigQueryPresentation() منتقل کنیم. اکنون متد شما باید به شکل زیر باشد:
/**
 * Runs a BigQuery query, adds data and a chart to a spreadsheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
  createColumnChart(spreadsheet);
}

با تغییرات فوق (به جز PROJECT_IDbq-sheets-slides.js شما اکنون باید به شکل زیر باشد. این کد همچنین در step2 از مخزن GitHub یافت می‌شود.

// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into a sheet. You must turn on
 * the BigQuery advanced service before you can run this code.
 * @see https://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
 */
function runQuery() {
  // Replace sample with your own BigQuery query.
  var request = {
    query:
        'SELECT ' +
            'LOWER(word) AS word, ' +
            'SUM(word_count) AS count ' +
        'FROM [bigquery-public-data:samples.shakespeare] ' +
        'GROUP BY word ' +
        'ORDER BY count ' +
        'DESC LIMIT 10'
  };
  var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
  var jobId = queryResults.jobReference.jobId;

  // Wait for BigQuery job completion (with exponential backoff).
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
  }

  // Get all results from BigQuery.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  // Return null if no data returned.
  if (!rows) {
    return Logger.log('No rows returned.');
  }

  // Create the results spreadsheet.
  var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
  var sheet = spreadsheet.getActiveSheet();

  // Add headers to sheet.
  var headers = queryResults.schema.fields.map(function(field) {
    return field.name.toUpperCase();
  });
  sheet.appendRow(headers);

  // Append the results.
  var data = new Array(rows.length);
  for (var i = 0; i < rows.length; i++) {
    var cols = rows[i].f;
    data[i] = new Array(cols.length);
    for (var j = 0; j < cols.length; j++) {
      data[i][j] = cols[j].v;
    }
  }

  // Start storing data in row 2, col 1
  var START_ROW = 2;      // skip header row
  var START_COL = 1;
  sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);

  // Return the spreadsheet object for later use.
  return spreadsheet;
}

/**
 * Uses spreadsheet data to create a columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} Visualizes the results
 * @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first) sheet.
  var sheet = spreadsheet.getSheets()[0];
  // Data range in sheet is from cell A2 to B11.
  var START_CELL = 'A2';  // skip header row
  var END_CELL = 'B11';
  // Place chart on Sheet starting on cell E5.
  var START_ROW = 5;      // row 5
  var START_COL = 5;      // col E
  var OFFSET = 0;

  // Create & place chart on the sheet using above values.
  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.COLUMN)
     .addRange(sheet.getRange(START_CELL + ':' + END_CELL))
     .setPosition(START_ROW, START_COL, OFFSET, OFFSET)
     .build();
  sheet.insertChart(chart);
}

/**
 * Runs a BigQuery query, adds data and a chart to a spreadsheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  createColumnChart(spreadsheet);
}

در ویرایشگر اسکریپت، پروژه اسکریپت خود را ذخیره کنید. سپس از لیست توابع، createBigQueryPresentation انتخاب کرده و روی Run کلیک کنید. پس از اتمام، یک صفحه گسترده دیگر در گوگل درایو شما ایجاد می‌شود، اما این بار یک نمودار در برگه کنار داده‌ها قرار می‌گیرد:

برگه با نمودار

۶. وظیفه ۳: داده‌های نتایج را در یک دسته اسلاید قرار دهید

بخش پایانی آزمایشگاه کد شامل ایجاد یک ارائه گوگل اسلاید، اضافه کردن عنوان و زیرعنوان به اسلاید عنوان و سپس ساخت اسلایدها برای سلول‌های داده و نمودار است.

  1. در ویرایشگر Apps Script، تابع createSlidePresentation() را پس از createColumnChart() به bq-sheets-slides.js اضافه کنید. تمام کارهای مربوط به مجموعه اسلایدها در این تابع انجام می‌شود. بیایید با ایجاد یک مجموعه اسلاید شروع کنیم و سپس یک عنوان و یک زیرعنوان به اسلاید عنوان پیش‌فرض اضافه کنیم.
/**
 * Create presentation with spreadsheet data and a chart
 * @param {Spreadsheet} Spreadsheet containing results data
 * @param {EmbeddedChart} Sheets chart to embed on a slide
 * @returns {Presentation} Slide deck with the results
  * @see https://developers.google.com/apps-script/reference/slides/presentation
 */
function createSlidePresentation(spreadsheet, chart) {
  // Create the presentation.
  var deck = SlidesApp.create(QUERY_NAME);

  // Populate the title slide.
  var [title, subtitle] = deck.getSlides()[0].getPageElements();
  title.asShape().getText().setText(QUERY_NAME);
  subtitle.asShape().getText().setText('using Google Cloud Console and Google Workspace APIs:\n' +
    'Google Apps Script, BigQuery, Sheets, Slides');
  1. مرحله بعدی در createSlidePresentation() وارد کردن داده‌های سلول از Google Sheet به مجموعه اسلایدهای جدیدمان است. این قطعه کد را به تابع اضافه کنید:
  // Data range to copy is from cell A1 to B11
  var START_CELL = 'A1';  // include header row
  var END_CELL = 'B11';
  // Add the table slide and insert an empty table on it with
  // the dimensions of the data range; fails if the sheet is empty.
  var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  var sheetValues = spreadsheet.getSheets()[0].getRange(
      START_CELL + ':' + END_CELL).getValues();
  var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);

  // Populate the table with spreadsheet data.
  for (var i = 0; i < sheetValues.length; i++) {
    for (var j = 0; j < sheetValues[0].length; j++) {
      table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
    }
  }
  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() به پارامترهای شیء spreadsheet و chart نیاز دارد. ما قبلاً runQuery() را طوری تنظیم کرده‌ایم که شیء Spreadsheet برگرداند، اما باید تغییر مشابهی را در createColumnChart() ایجاد کنیم تا یک شیء نمودار ( EmbeddedChart ) برگرداند. به تابع createColumnChart() برگردید و قطعه کد زیر را به انتهای تابع اضافه کنید:
  // NEW: Return the chart object for later use.
  return chart;
}
  1. از آنجایی که createColumnChart() اکنون یک شیء نمودار را برمی‌گرداند، باید نمودار را در یک متغیر ذخیره کنیم. سپس متغیرهای صفحه گسترده و نمودار را به createSlidePresentation() ارسال می‌کنیم. همچنین، از آنجایی که URL صفحه گسترده تازه ایجاد شده را ثبت می‌کنیم، بیایید URL ارائه اسلاید جدید را نیز ثبت کنیم. createBigQueryPresentation() خود را به‌روزرسانی کنید تا به شکل زیر درآید:
/**
 * Runs a BigQuery query, adds data and a chart to a spreadsheet,
 * and adds the data and chart to a new slide presentation.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  var chart = createColumnChart(spreadsheet); // UPDATED
  var deck = createSlidePresentation(spreadsheet, chart); // NEW
  Logger.log('Results slide deck created: %s', deck.getUrl()); // NEW
}
  1. ذخیره کنید و دوباره createBigQueryPresentation() را اجرا کنید. قبل از اجرا، برنامه شما برای مشاهده و مدیریت ارائه‌های Google Slides به یک مجموعه مجوز دیگر از کاربر نیاز دارد. پس از بررسی و تأیید این مجوزها، برنامه مانند قبل اجرا خواهد شد.
  2. اکنون، علاوه بر صفحه‌گسترده‌ای که ایجاد شده است، باید یک ارائه اسلاید جدید با ۳ اسلاید (عنوان، جدول داده‌ها، نمودار داده‌ها) نیز داشته باشید، همانطور که در زیر نشان داده شده است:

f6896f22cc3cd50d.png

۵۹۹۶۰۸۰۳e۶۲f۷c۶۹.png

5549f0ea81514360.png

۷. نتیجه‌گیری

تبریک می‌گوییم، شما برنامه‌ای ایجاد کرده‌اید که از هر دو طرف Google Cloud استفاده می‌کند. این برنامه یک درخواست Google BigQuery را اجرا می‌کند که یکی از مجموعه داده‌های عمومی آن را جستجو می‌کند، یک صفحه گسترده Google Sheets برای ذخیره نتایج ایجاد می‌کند، یک نمودار بر اساس داده‌ها اضافه می‌کند و در نهایت یک ارائه Google Slides با داده‌ها و نتایج نمودار از صفحه گسترده ایجاد می‌کند.

این مراحل، کارهایی هستند که شما از نظر فنی انجام داده‌اید. به طور کلی، شما از تجزیه و تحلیل کلان‌داده به نتیجه‌ای رسیده‌اید که می‌توانید به ذینفعان ارائه دهید - همه این‌ها با استفاده از کد به صورت خودکار انجام می‌شود. امیدواریم این نمونه به شما الهام ببخشد تا آن را برای پروژه‌های خود سفارشی کنید. در پایان این آزمایشگاه کد، پیشنهاداتی در مورد چگونگی بهبود بیشتر این برنامه نمونه ارائه خواهیم داد.

با تغییرات انجام شده در کار نهایی (به جز PROJECT_IDbq-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.
 */

// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into a spreadsheet. You must turn on
 * the BigQuery advanced service before you can run this code.
 * @see https://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
 */
function runQuery() {
  // Replace sample with your own BigQuery query.
  var request = {
    query:
        'SELECT ' +
            'LOWER(word) AS word, ' +
            'SUM(word_count) AS count ' +
        'FROM [bigquery-public-data:samples.shakespeare] ' +
        'GROUP BY word ' +
        'ORDER BY count ' +
        'DESC LIMIT 10'
  };
  var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
  var jobId = queryResults.jobReference.jobId;

  // Wait for BigQuery job completion (with exponential backoff).
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
  }

  // Get all results from BigQuery.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  // Return null if no data returned.
  if (!rows) {
    return Logger.log('No rows returned.');
  }

  // Create the results spreadsheet.
  var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
  var sheet = spreadsheet.getActiveSheet();

  // Add headers to sheet.
  var headers = queryResults.schema.fields.map(function(field) {
    return field.name.toUpperCase();
  });
  sheet.appendRow(headers);

  // Append the results.
  var data = new Array(rows.length);
  for (var i = 0; i < rows.length; i++) {
    var cols = rows[i].f;
    data[i] = new Array(cols.length);
    for (var j = 0; j < cols.length; j++) {
      data[i][j] = cols[j].v;
    }
  }

  // Start storing data in row 2, col 1
  var START_ROW = 2;      // skip header row
  var START_COL = 1;
  sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);

  // Return the spreadsheet object for later use.
  return spreadsheet;
}

/**
 * Uses spreadsheet data to create a column chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} Visualizes the results
 * @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first) sheet.
  var sheet = spreadsheet.getSheets()[0];
  // Data range in sheet is from cell A2 to B11.
  var START_CELL = 'A2';  // skip header row
  var END_CELL = 'B11';
  // Place chart on sheet starting on cell E5.
  var START_ROW = 5;      // row 5
  var START_COL = 5;      // col E
  var OFFSET = 0;

  // Create & place chart on the sheet using above values.
  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.COLUMN)
     .addRange(sheet.getRange(START_CELL + ':' + END_CELL))
     .setPosition(START_ROW, START_COL, OFFSET, OFFSET)
     .build();
  sheet.insertChart(chart);
  
  // Return the chart object for later use.
  return chart;
}

/**
 * Create presentation with spreadsheet data and a chart
 * @param {Spreadsheet} Spreadsheet containing results data
 * @param {EmbeddedChart} Sheets chart to embed on a slide
 * @returns {Presentation} Slide deck with the results
 * @see https://developers.google.com/apps-script/reference/slides/presentation
 */
function createSlidePresentation(spreadsheet, chart) {
  // Create the presentation.
  var deck = SlidesApp.create(QUERY_NAME);

  // Populate the title slide.
  var [title, subtitle] = deck.getSlides()[0].getPageElements();
  title.asShape().getText().setText(QUERY_NAME);
  subtitle.asShape().getText().setText('using Google Cloud Console and Google Workspace APIs:\n' +
    'Google Apps Script, BigQuery, Sheets, Slides');

  // Data range to copy is from cell A1 to B11
  var START_CELL = 'A1';  // include header row
  var END_CELL = 'B11';
  // Add the table slide and insert an empty table on it with
  // the dimensions of the data range; fails if the sheet is empty.
  var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  var sheetValues = spreadsheet.getSheets()[0].getRange(
      START_CELL + ':' + END_CELL).getValues();
  var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);

  // Populate the table with spreadsheet data.
  for (var i = 0; i < sheetValues.length; i++) {
    for (var j = 0; j < sheetValues[0].length; j++) {
      table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
    }
  }

  // Add a chart slide and insert the chart on it.
  var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  chartSlide.insertSheetsChart(chart);

  // Return the presentation object for later use.
  return deck;
}

/**
 * Runs a BigQuery query, adds data and a chart to a spreadsheet,
 * and adds the data and chart to a new slide presentation.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  var chart = createColumnChart(spreadsheet);
  var deck = createSlidePresentation(spreadsheet, chart);
  Logger.log('Results slide deck created: %s', deck.getUrl());
}

این نمونه کد را می‌توانید در پوشه final در مخزن گیت‌هاب نیز پیدا کنید.

۸. منابع اضافی

در زیر منابع بیشتری برای کمک به شما در بررسی عمیق‌تر مطالب پوشش داده شده در این آزمایشگاه کد و بررسی روش‌های دیگر دسترسی به ابزارهای توسعه‌دهندگان گوگل به صورت برنامه‌نویسی شده، ارائه شده است.

منابع این برنامه

مستندات

ویدیوها

اخبار و به‌روزرسانی‌ها

سایر آزمایشگاه‌های کد

مقدماتی

متوسط

۹. مرحله بعدی: چالش‌های کدنویسی

در زیر روش‌های مختلفی که می‌توانید نمونه‌ای را که در این آزمایشگاه کد ساخته‌ایم، بهبود یا تقویت کنید، فهرست شده است. این فهرست جامع نیست، اما ایده‌های الهام‌بخشی در مورد چگونگی برداشتن گام بعدی ارائه می‌دهد.

  • برنامه - آیا نمی‌خواهید محدود به استفاده از جاوا اسکریپت یا محدودیت‌های اعمال شده توسط Apps Script باشید؟ این برنامه را به زبان برنامه‌نویسی مورد علاقه خود که از APIهای REST برای Google BigQuery، Sheets و Slides استفاده می‌کند، منتقل کنید.
  • BigQuery — با یک پرس‌وجوی متفاوت برای مجموعه داده شکسپیر که مورد علاقه شماست، آزمایش کنید. نمونه پرس‌وجوی دیگری را می‌توانید در برنامه نمونه BigQuery اصلی Apps Script پیدا کنید.
  • BigQuery — با برخی از مجموعه داده‌های عمومی دیگر BigQuery آزمایش کنید تا موردی را پیدا کنید که برای شما معنادارتر باشد.
  • BigQuery — پیش از این، به کوئری‌های دیگری که می‌توانید با آثار شکسپیر یا سایر جداول داده عمومی بسازید اشاره کردیم. آن‌ها را می‌توانید در این صفحه وب و این مخزن گیت‌هاب پیدا کنید.
  • برگه‌ها — با انواع دیگر نمودارها در گالری نمودار آزمایش کنید.
  • Sheets و BigQuery — از مجموعه داده‌های صفحه گسترده بزرگ خود استفاده کنید. در سال ۲۰۱۶، تیم BigQuery ویژگی‌ای را معرفی کرد که به توسعه‌دهندگان اجازه می‌دهد از یک Sheet به عنوان منبع داده استفاده کنند. برای اطلاعات بیشتر، به ( Google BigQuery با Google Drive ادغام می‌شود) مراجعه کنید.
  • اسلایدها — اسلایدهای دیگری مانند تصاویر یا سایر موارد مرتبط با تحلیل کلان‌داده خود را به ارائه تولید شده اضافه کنید. در اینجا مستندات مرجع برای سرویس داخلی اسلایدها آمده است.
  • Google Workspace — از سایر سرویس‌های داخلی Google Workspace یا Google از Apps Script استفاده کنید. برای مثال، Gmail، Calendar، Docs، Drive، Maps، Analytics، YouTube و غیره، و همچنین سایر سرویس‌های پیشرفته. برای اطلاعات بیشتر، به مرور کلی مرجع برای سرویس‌های داخلی و پیشرفته مراجعه کنید.