Biến dữ liệu lớn thành thông tin chi tiết bằng Google Trang tính và Trang trình bày

Có rất nhiều công cụ để nhà khoa học dữ liệu thực hiện phân tích dữ liệu lớn, nhưng cuối cùng, bạn vẫn phải giải thích những kết quả đó cho ban quản lý, đúng không? Việc trình bày nhiều con số trên giấy hoặc trong cơ sở dữ liệu cho các bên liên quan chính là điều khó có thể thực hiện được. Lớp học lập trình Google Apps Script trung cấp này tận dụng một cặp nền tảng dành cho nhà phát triển của Google, G SuiteGoogle Cloud Platform (GCP), để giúp bạn hoàn thành bước cuối cùng đó.

Các công cụ dành cho nhà phát triển của Google Cloud cho phép bạn thực hiện phân tích dữ liệu chuyên sâu, sau đó lấy những kết quả đó, đưa vào bảng tính và tạo bản trình bày bằng dữ liệu đó, cung cấp một giai đoạn phù hợp hơn để gửi kết quả cho ban quản lý. Lớp học lập trình này đề cập đến API BigQuery của GCP (dưới dạng một dịch vụ nâng cao của Apps Script) và các dịch vụ tích hợp của Apps Script cho Google Trang tínhGoogle Trang trình bày.

Động lực/thông tin trước đây

Ứng dụng mẫu trong lớp học lập trình này được lấy cảm hứng từ những mẫu mã khác sau đây...

Mặc dù ứng dụng mẫu trong lớp học lập trình Slides API cũng có BigQuery và Trang trình bày, nhưng ứng dụng này khác với ứng dụng mẫu trong lớp học lập trình này ở một số điểm:

  • Ứng dụng Node.js so với ứng dụng Apps Script của chúng tôi
  • Sử dụng API REST trong khi chúng tôi sử dụng các dịch vụ Apps Script
  • Sử dụng Google Drive nhưng không sử dụng Google Trang tính, trong khi ứng dụng này sử dụng Trang tính nhưng không sử dụng Drive

Trong lớp học lập trình này, chúng tôi muốn kết hợp nhiều công nghệ vào một ứng dụng duy nhất, đồng thời giới thiệu các tính năng và API trên Google Cloud theo cách giống với trường hợp sử dụng thực tế hơn. Mục tiêu là truyền cảm hứng để bạn sử dụng trí tưởng tượng và cân nhắc việc tận dụng cả GCP và G Suite để giải quyết các vấn đề khó khăn cho tổ chức hoặc khách hàng của bạn.

Kiến thức bạn sẽ học được

  • Cách sử dụng Google Apps Script với nhiều dịch vụ của Google (GCP và G Suite)
  • Cách sử dụng Google BigQuery để phân tích dữ liệu lớn
  • Cách tạo một Trang tính trên Google và điền dữ liệu vào đó
  • Cách tạo biểu đồ mới trong Trang tính
  • Cách chuyển biểu đồ và dữ liệu từ Trang tính vào bản trình bày trên Google Trang trình bày

Bạn cần có

  • Có quyền truy cập vào Internet và trình duyệt web
  • Tài khoản Google (Tài khoản G Suite có thể yêu cầu quản trị viên phê duyệt)
  • Kỹ năng cơ bản về JavaScript
  • Kiến thức về phát triển Apps Script có thể hữu ích nhưng không bắt buộc

Bạn sẽ sử dụng lớp học lập trình/hướng dẫn này như thế nào?

Đọc qua để nắm thông tin, có thể chuyển cho đồng nghiệp kỹ thuật Đọc qua đến mức có thể và cố gắng thực hiện nhiều bài tập nhất có thể Dù có chuyện gì xảy ra, tôi cũng sẽ hoàn thành toàn bộ lớp học lập trình này

Bạn đánh giá thế nào về trải nghiệm của mình khi sử dụng các công cụ và API dành cho nhà phát triển của G Suite?

Người mới bắt đầu Trung cấp Thành thạo

Bạn đánh giá thế nào về trải nghiệm của mình với Apps Script?

Người mới bắt đầu Trung cấp Thành thạo

Bạn đánh giá thế nào về trải nghiệm của mình với các công cụ và API dành cho nhà phát triển của GCP?

Người mới bắt đầu Trung cấp Thành thạo

Bây giờ bạn đã biết nội dung của lớp học lập trình này, vậy bạn sẽ làm gì chính xác?

  1. Lấy một mẫu Apps Script-BigQuery hiện có và đưa mẫu đó vào hoạt động
  2. Từ mẫu đó, hãy tìm hiểu cách gửi truy vấn đến BigQuery và nhận kết quả
  3. Tạo một Google Trang tính và điền kết quả từ BigQuery vào đó
  4. Sửa đổi mã một chút để thay đổi nhẹ dữ liệu được trả về và thêm vào Trang tính
  5. Sử dụng dịch vụ Trang tính trong Apps Script để tạo biểu đồ cho dữ liệu từ BigQuery
  6. Sử dụng dịch vụ Trang trình bày để tạo một bản trình bày mới
  7. Thêm tiêu đề và tiêu đề phụ vào trang trình bày tiêu đề mặc định được tạo tự động cho tất cả bộ trang trình bày mới
  8. Tạo một trang trình bày mới có bảng dữ liệu, sau đó nhập các ô dữ liệu của Trang tính vào trang trình bày đó
  9. Thêm một trang trình bày mới khác và thêm biểu đồ bảng tính vào trang đó

Hãy bắt đầu bằng một số thông tin cơ bản về Apps Script, BigQuery, Trang tính và Trang trình bày.

Google Apps Script và BigQuery

Google Apps Script là một nền tảng phát triển G Suite hoạt động ở cấp độ cao hơn so với việc sử dụng Google REST API. Đây là một môi trường phát triển không máy chủ và lưu trữ ứng dụng mà nhiều nhà phát triển có thể truy cập, bất kể trình độ kỹ năng. Trong một câu, "Apps Script là một thời gian chạy JavaScript không cần máy chủ để tự động hoá, mở rộng và tích hợp G Suite".

Đây là JavaScript phía máy chủ, tương tự như Node.js, nhưng tập trung vào việc tích hợp chặt chẽ với G Suite và các dịch vụ khác của Google thay vì lưu trữ ứng dụng dựa trên sự kiện không đồng bộ nhanh. Nền tảng này cũng có một môi trường phát triển hoàn toàn khác với những gì bạn thường thấy. Với Apps Script, bạn có thể:

  • Phát triển trong trình chỉnh sửa mã dựa trên trình duyệt nhưng có thể chọn phát triển cục bộ nếu sử dụng clasp, công cụ triển khai dòng lệnh cho Apps Script
  • Viết mã bằng một phiên bản JavaScript chuyên biệt được tuỳ chỉnh để truy cập vào G Suite và các dịch vụ khác của Google hoặc dịch vụ bên ngoài (thông qua các dịch vụ URLfetch hoặc Jdbc của Apps Script)
  • Bạn không cần viết mã uỷ quyền vì Apps Script sẽ xử lý việc này cho bạn
  • Không cần lưu trữ ứng dụng – ứng dụng sẽ hoạt động trên các máy chủ của Google trên đám mây

LƯU Ý: Lớp học lập trình này không dạy bạn về Apps Script. Có rất nhiều tài nguyên trực tuyến có thể giúp bạn thực hiện việc này. Tài liệu chính thức cũng có thông tin tổng quan kèm theo hướng dẫn bắt đầu nhanh, hướng dẫnvideo. Cuối cùng, đừng quên lớp học lập trình giới thiệu về Apps Script. Bạn nên hoàn thành lớp học lập trình này trước khi bắt đầu lớp học lập trình này.

Apps Script tương tác với các công nghệ khác của Google theo hai cách:

  • dịch vụ tích hợp/dịch vụ gốc
  • dịch vụ nâng cao

Một dịch vụ tích hợp sẵn cung cấp các phương thức cấp cao mà bạn có thể dùng để truy cập vào dữ liệu của G Suite hoặc sản phẩm của Google, hoặc các phương thức tiện ích hữu ích khác. Dịch vụ nâng cao chỉ là một trình bao bọc mỏng xung quanh G Suite hoặc Google REST API. Các dịch vụ nâng cao cung cấp phạm vi bao phủ đầy đủ cho REST API và thường có thể làm được nhiều việc hơn các dịch vụ tích hợp, nhưng đòi hỏi độ phức tạp của mã cao hơn (mặc dù vẫn dễ sử dụng hơn chính REST API). Bạn cũng phải bật các dịch vụ nâng cao cho một dự án tập lệnh trước khi sử dụng.

Khi có thể, nhà phát triển nên ưu tiên dịch vụ tích hợp sẵn vì chúng dễ sử dụng hơn và thực hiện nhiều thao tác hơn so với các dịch vụ nâng cao. Tuy nhiên, một số API của Google không có dịch vụ tích hợp sẵn, vì vậy, dịch vụ nâng cao có thể là lựa chọn duy nhất. Google BigQuery là một ví dụ về điều này... không có dịch vụ tích hợp nào, nhưng dịch vụ nâng cao BigQuery tồn tại. (Tốt hơn là không có dịch vụ, đúng không?) Nếu bạn mới sử dụng BigQuery, thì đây là một dịch vụ của GCP cho phép bạn thực hiện các truy vấn đơn giản (hoặc phức tạp) trên các tập dữ liệu rất lớn, chẳng hạn như theo thứ tự nhiều terabyte, nhưng vẫn có thể cung cấp kết quả trong vài giây.

Truy cập vào Google Trang tính và Trang trình bày bằng Apps Script

Không giống như BigQuery, cả Google Trang tính và Trang trình bày đều có các dịch vụ tích hợp (cũng như các dịch vụ nâng cao mà bạn chỉ dùng để truy cập vào những tính năng chỉ có trong API). Hãy xem tài liệu cho cả dịch vụ Trang tínhTrang trình bày tích hợp sẵn trước khi chuyển sang mã. Tất nhiên, cũng có tài liệu cho các dịch vụ nâng cao; đây là tài liệu cho Trang tínhTrang trình bày, tương ứng.

Giới thiệu

Chúng ta sẽ bắt đầu lớp học lập trình này bằng nhiệm vụ đầu tiên. Trên thực tế, sau khi hoàn thành phần này, bạn sẽ hoàn thành khoảng một nửa lớp học lập trình. Được chia thành nhiều phần nhỏ, bạn sẽ thực hiện tất cả những việc sau:

  • Bắt đầu một dự án Google Apps Script mới
  • Cho phép truy cập vào dịch vụ nâng cao của BigQuery
  • Chuyển đến trình chỉnh sửa phát triển và nhập mã nguồn ứng dụng
  • Thực hiện quy trình uỷ quyền ứng dụng (OAuth2)
  • Chạy ứng dụng gửi yêu cầu đến BigQuery
  • Xem một Google Trang tính hoàn toàn mới được tạo bằng kết quả từ BigQuery

Thiết lập

  1. a) Tạo một dự án Apps Script mới bằng cách chuyển đến script.google.com . Có nhiều dòng sản phẩm G Suite và cách bạn tạo một dự án mới có thể khác nhau tuỳ thuộc vào phiên bản bạn đang sử dụng. Nếu chỉ sử dụng tài khoản Gmail và mới bắt đầu phát triển dự án, bạn sẽ thấy một màn hình trống cùng với nút tạo dự án đầu tiên:


b) Nếu không, bạn có thể thấy tất cả dự án của mình và một nút +Mới lớn ở phía trên bên trái, hãy nhấp vào nút đó.



c) Nếu không phải trường hợp nào ở trên, màn hình của bạn có thể trông như bên dưới. Nếu có, hãy tìm biểu tượng trình đơn hamburger ở góc trên bên trái rồi chọn +Tập lệnh mới.



d) Đối với những người thích dòng lệnh. Công cụ của bạn là clasp, cụ thể là bạn sẽ chạy lệnh clasp create.

e) Cách cuối cùng để tạo một dự án tập lệnh mới là chỉ cần truy cập vào đường liên kết lối tắt: https://script.google.com/create.

  1. Bất kể bạn sử dụng kỹ thuật nào để bắt đầu một dự án mới, điều quan trọng là bạn sẽ được chuyển đến trình chỉnh sửa mã Apps Script, một màn hình có dạng như sau:


  2. Nhấp vào File > Save (Tệp > Lưu) rồi đặt tên cho dự án.
  3. Tiếp theo, bạn cần tạo một dự án trên Google Cloud Console để chạy các truy vấn BigQuery.
  1. Tạo một dự án mới, đặt tên cho dự án, chọn Tài khoản thanh toán rồi nhấp vào TẠO.
  1. Khi quá trình tạo dự án hoàn tất, một thông báo sẽ xuất hiện ở phía trên bên phải của trang. Nhấp vào mục Create Project: <Project Name> (Tạo dự án: <Tên dự án>) để mở dự án.
  2. Nhấp vào biểu tượng trình đơn ở trên cùng bên trái rồi chuyển đến API và dịch vụ > Thông tin xác thực. Nhấp vào thẻ Màn hình xin phép bằng OAuth (đường liên kết trực tiếp).
  3. Trong trường Tên ứng dụng, hãy nhập "Big Data Codelab" rồi nhấp vào nút Lưu ở dưới cùng.
  4. Nhấp vào biểu tượng ba dấu chấmở trên cùng bên phải để mở rộng trình đơn rồi chọn Cài đặt dự án (đường liên kết trực tiếp).
  5. Sao chép giá trị có trong mục Số dự án. (Có một trường riêng biệt là Mã sản phẩm mà chúng ta sẽ sử dụng sau này trong lớp học lập trình.)
  6. Trong Trình chỉnh sửa tập lệnh ứng dụng, hãy nhấp vào Tài nguyên > Dự án Cloud Platform.
  7. Nhập số dự án vào hộp văn bản rồi nhấp vào Đặt dự án. Khi thấy lời nhắc, hãy nhấp vào Xác nhận.
  8. Sau khi hoàn tất, hãy nhấp vào nút Đóng để đóng hộp thoại.
  9. Giờ đây, sau khi thiết lập một dự án mới, bạn cần bật dịch vụ nâng cao BigQuery. Vì vậy, hãy kéo xuống Tài nguyên -> Dịch vụ nâng cao của Google rồi bật bit cho BigQuery API.


  10. Một lưu ý ở cuối trang cho biết "Bạn cũng phải bật các dịch vụ này trong "Trang tổng quan API của Google Cloud Platform", vì vậy hãy nhấp vào đường liên kết đó để mở một thẻ trình duyệt khác đến bảng điều khiển dành cho nhà phát triển hoặc "devconsole" (viết tắt).
  11. Tại bảng điều khiển dành cho nhà phát triển, hãy nhấp vào nút +Enable APIs and Services (+ Bật API và dịch vụ) ở trên cùng, tìm kiếm "bigquery", chọn BigQuery API (không phải BigQuery Data Transfer API) rồi nhấp vào enable (bật) để bật API này. Để nguyên thẻ trình duyệt này.

    LƯU Ý: sau khi bật API, bạn có thể thấy một lưu ý trên trang này có nội dung như "Để sử dụng API này, bạn cần tạo thông tin đăng nhập...", nhưng đừng lo lắng về điều đó ngay bây giờ – Apps Script sẽ xử lý bước này cho bạn.


  12. Quay lại thẻ trình duyệt của trình soạn thảo mã, bạn vẫn đang ở trong trình đơn Dịch vụ nâng cao của Google, vì vậy, hãy nhấp vào OK để đóng hộp thoại, đưa bạn trở lại trình soạn thảo mã. Nhấp vào tên dự án ở trên cùng và đặt tên cho dự án theo ý bạn, chẳng hạn như "BigQuery demo" (Bản minh hoạ BigQuery) hoặc tên tương tự. Chúng tôi đặt tên cho dự án của mình là "final mile" (dặm cuối).

Giờ đây, bạn đã sẵn sàng nhập mã ứng dụng, thực hiện quy trình uỷ quyền và chạy phiên bản đầu tiên của ứng dụng này.

Tải ứng dụng lên và chạy ứng dụng

  1. Sao chép mã trong hộp bên dưới và dán vào mọi thứ trong trình chỉnh sửa mã:
// 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());
}


Giờ đây, hãy lưu tệp bạn vừa tạo nhưng đổi tên tệp đó từ Code.gs thành bq-sheets-slides.js. Vậy mã này có chức năng gì? Chúng tôi đã cho bạn biết rằng truy vấn này sẽ truy vấn BigQuery và ghi kết quả vào một Trang tính mới trên Google, nhưng truy vấn này là gì? Bạn có thể thấy thông tin này ở gần đầu 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


Truy vấn này xem xét các tác phẩm của Shakespeare, một phần trong tập dữ liệu công khai của BigQuery, đồng thời tạo ra 10 từ xuất hiện thường xuyên nhất trong tất cả các tác phẩm của ông, được sắp xếp theo thứ tự giảm dần về mức độ phổ biến. Hãy tưởng tượng xem việc thực hiện thao tác này theo cách thủ công sẽ (không) thú vị như thế nào, và bạn sẽ có một ý tưởng sơ bộ về mức độ hữu ích của BigQuery.

  1. Chúng tôi gần như đã sẵn sàng thử tính năng này. Như bạn thấy ở gần đầu đoạn mã này, bạn cần có một mã dự án hợp lệ, vì vậy, chúng ta cần thêm mã dự án của bạn vào mã ứng dụng. Để lấy thông tin này, hãy quay lại cửa sổ hoặc thẻ trình duyệt có trang bảng điều khiển dành cho nhà phát triển. (Chúng tôi đã bảo bạn để cửa mở, bạn nhớ chứ?)
  2. Ở trên cùng bên trái hình đại diện tài khoản Google của bạn là bộ chọn trình đơn thả xuống (). Nhấp vào bộ chọn này rồi chọn Cài đặt dự án. Bạn sẽ thấy tên, mã nhận dạng và số dự án. Sao chép mã dự án và đặt biến PROJECT_ID ở đầu bq-sheets-slides.js thành giá trị mà bạn nhận được từ bảng điều khiển dành cho nhà phát triển. LƯU Ý: Nếu bộ chọn trình đơn bị treo và không hoạt động, hãy tải lại trang.
  3. Câu lệnh if có ở đó để ngăn ứng dụng tiếp tục hoạt động mà không có mã dự án. Sau khi bạn thêm khoá của mình, hãy lưu tệp và chạy mã bằng cách chuyển đến thanh trình đơn rồi chọn Run > Run function > runQuery (Chạy > Chạy hàm > runQuery), nhấp vào hộp thoại Review Permissions (Xem xét quyền), Ứng dụng này chưa được xác minh và bên dưới là một GIF động (cho một ứng dụng khác) minh hoạ một vài bước tiếp theo:
  4. Sau khi yêu cầu xem xét các quyền, bạn sẽ thấy một hộp thoại mới như hình trên. Chọn đúng Tài khoản Google sẽ chạy tập lệnh, chọn Nâng cao, di chuyển xuống rồi nhấp vào "Chuyển đến <TÊN DỰ ÁN CỦA BẠN> (không an toàn)" để chuyển đến màn hình uỷ quyền ứng dụng OAuth2. (Đọc thêm về quy trình xác minh để tìm hiểu lý do màn hình này nằm giữa bạn và hộp thoại uỷ quyền OAuth2 bên dưới.)


    LƯU Ý: Sau khi bạn uỷ quyền cho ứng dụng, bạn sẽ không cần lặp lại quy trình này trong mỗi lần thực thi. Bạn sẽ không thấy lại màn hình hộp thoại này cho đến khi thực hiện Nhiệm vụ 3 trong hướng dẫn này. Màn hình này sẽ yêu cầu người dùng cấp quyền tạo và quản lý bản trình bày trên Google Trang trình bày.
  5. Sau khi bạn nhấp vào Cho phép trên cửa sổ hộp thoại OAuth2, tập lệnh sẽ bắt đầu chạy... bạn sẽ thấy một hộp thoại màu vàng nhạt ở trên cùng. Quá trình này diễn ra khá nhanh, nên bạn có thể không nhận thấy quá trình này đang chạy hoặc đã hoàn tất.

  6. Hộp thoại đó sẽ biến mất sau khi hoàn tất. Vì vậy, nếu bạn không thấy hộp thoại này, có thể là quá trình đã hoàn tất. Hãy chuyển đến Google Drive (drive.google.com) và tìm một Google Trang tính mới có tên "Most common words in all of Shakespeare's works" (Những từ phổ biến nhất trong tất cả các tác phẩm của Shakespeare) hoặc tên mà bạn đã chỉ định cho biến QUERY_NAME:


  7. Mở bảng tính, bạn sẽ thấy 10 hàng từ và tổng số lượt xuất hiện của các từ đó được sắp xếp theo thứ tự giảm dần:

Tóm tắt nhiệm vụ 1

Nhận ra những gì vừa xảy ra... bạn đã chạy một đoạn mã truy vấn tất cả các tác phẩm của Shakespeare (không phải là một LƯỢNG DỮ LIỆU LỚN, nhưng chắc chắn là nhiều văn bản hơn bạn có thể dễ dàng quét một mình khi xem xét từng từ trong mỗi vở kịch, quản lý số lượng từ như vậy, sau đó sắp xếp chúng theo thứ tự giảm dần về số lần xuất hiện. Không chỉ yêu cầu BigQuery thay bạn thực hiện việc này, bạn còn có thể sử dụng dịch vụ tích hợp trong Apps Script cho Google Trang tính để đưa dữ liệu này vào đó một cách dễ dàng.

Bạn cũng có thể tìm thấy mã cho bq-sheets-slides.js (tên tệp mà chúng ta chọn) mà bạn đã dán ở trên (ngoài PROJECT_ID phải có mã dự án thực) trong thư mục step1 trong kho lưu trữ GitHub của lớp học lập trình này tại github.com/googlecodelabs/bigquery-sheets-slides. Đoạn mã này được lấy cảm hứng từ ví dụ ban đầu trong trang dịch vụ nâng cao của BigQuery. Ví dụ này chạy một truy vấn hơi khác... những từ phổ biến nhất mà Shakespeare sử dụng có từ 10 ký tự trở lên. Bạn cũng có thể xem mẫu đó trong kho lưu trữ GitHub.

Nếu bạn quan tâm đến các truy vấn khác mà bạn có thể thử với các tác phẩm của Shakespeare hoặc các bảng dữ liệu công khai khác, hãy xem trang web này cũng như trang web này. Bất kể bạn sử dụng truy vấn nào, bạn luôn có thể kiểm thử truy vấn trong bảng điều khiển BigQuery trước khi chạy truy vấn đó trong Apps Script. Giao diện người dùng của BigQuery có sẵn cho nhà phát triển tại bigquery.cloud.google.com. Ví dụ: đây là truy vấn của chúng tôi khi sử dụng giao diện người dùng BigQuery:

Mặc dù các bước trên đã tận dụng trình chỉnh sửa mã của Apps Script, nhưng bạn cũng có thể chọn phát triển cục bộ thông qua dòng lệnh. Nếu muốn, hãy tạo một tập lệnh có tên là bq-sheets-slides.js, dán đoạn mã ở trên vào đó, rồi tải lên Google bằng lệnh clasp push. (Nếu bạn bỏ lỡ thông tin này trước đó, thì đây là đường liên kết đến clasp và cách sử dụng.)

Mục đích của runQuery() là trao đổi với BigQuery và gửi kết quả vào Trang tính. Bây giờ, chúng ta cần tạo một biểu đồ bằng dữ liệu này. Hãy tạo một hàm mới có tên là createColumnChart() để gọi phương thức newChart() của Trang tính nhằm thực hiện việc này.

  1. Tạo biểu đồ. Thêm nội dung của createColumnChart() bên dưới vào bq-sheets-slides.js ngay sau runQuery(). Ứng dụng này sẽ lấy trang tính có dữ liệu và yêu cầu một biểu đồ dạng cột có tất cả dữ liệu. Phạm vi dữ liệu bắt đầu từ ô A2 vì hàng đầu tiên chứa tiêu đề cột chứ không phải dữ liệu.
/**
 * 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. Trả về bảng tính. Ở trên, createColumnChart() cần đối tượng bảng tính, vì vậy chúng ta cần cập nhật runQuery() để trả về đối tượng spreadsheet để có thể truyền đối tượng này đến createColumnChart(). Sau khi ghi nhật ký việc tạo thành công Trang tính trên Google, hãy trả về đối tượng spreadsheet ở cuối runQuery(), ngay sau dòng nhật ký:
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());

  // NEW: Return the spreadsheet object for later use.
  return spreadsheet;
}
  1. Chức năng createBigQueryPresentation() lái xe. Việc phân tách một cách hợp lý chức năng BigQuery và chức năng tạo biểu đồ là một ý tưởng hay. Bây giờ, hãy tạo một hàm createBigQueryPresentation() để điều khiển ứng dụng, gọi cả runQuery()createColumnChart(). Mã bạn thêm sẽ có dạng như sau:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  createColumnChart(spreadsheet);
}
  1. Giúp mã có thể tái sử dụng nhiều hơn. Bạn đã thực hiện 2 bước quan trọng ở trên: trả về đối tượng bảng tính và tạo một hàm điều khiển. Nếu một đồng nghiệp muốn sử dụng lại runQuery() và không muốn URL được ghi lại thì sao? Để giúp người dùng dễ hiểu hơn khi sử dụng runQuery(), chúng ta cần di chuyển dòng nhật ký đó. Nơi nào là nơi tốt nhất để di chuyển? Nếu đoán là createBigQueryPresentation(), bạn đã đoán đúng! Sau khi di chuyển dòng nhật ký, dòng này sẽ có dạng như sau:
/**
 * 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);
}

Với những thay đổi nêu trên (ngoại trừ PROJECT_ID), bq-sheets-slides.js của bạn giờ đây sẽ có dạng như sau (và cũng có trong thư mục step2 của kho lưu trữ 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);
}

Lưu tệp, sau đó chuyển lên đầu trình chỉnh sửa mã và chuyển sang thực thi createBigQueryPresentation() thay vì runQuery(). Sau khi chạy, bạn sẽ nhận được một Trang tính khác của Google, nhưng lần này, một biểu đồ sẽ xuất hiện trong Trang tính bên cạnh dữ liệu:

Phần cuối cùng của lớp học lập trình liên quan đến việc tạo một bản trình bày mới trong Google Trang trình bày, điền tiêu đề và phụ đề vào trang trình bày tiêu đề, sau đó thêm 2 trang trình bày mới, một trang cho mỗi ô dữ liệu và một trang cho biểu đồ.

  1. Tạo bộ trang trình bày. Tất cả các thao tác trên bộ trang trình bày sẽ diễn ra trong createSlidePresentation() mà chúng ta sẽ thêm vào bq-sheets-slides.js ngay sau createColumnChart(). Hãy bắt đầu bằng việc tạo một bộ trang trình bày mới, sau đó thêm tiêu đề và tiêu đề phụ vào trang trình bày tiêu đề mặc định mà chúng ta nhận được khi tạo bản trình bày mới.
/**
 * 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. Thêm bảng dữ liệu. Bước tiếp theo trong createSlidePresentation() là nhập dữ liệu ô từ Google Trang tính vào bản trình bày mới. Đoạn mã này, vì vậy hãy thêm đoạn mã này vào hàm:
  // 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. Nhập biểu đồ. Bước cuối cùng trong createSlidePresentation() là tạo thêm một trang trình bày, nhập biểu đồ từ bảng tính và trả về đối tượng Presentation. Thêm đoạn mã cuối cùng này vào hàm:
  // 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. Biểu đồ lợi nhuận. Giờ đây, hàm cuối cùng của chúng ta đã hoàn tất, hãy xem lại chữ ký của hàm này. Có, createSlidePresentation() yêu cầu cả bảng tính và đối tượng biểu đồ. Chúng ta đã điều chỉnh runQuery() để trả về đối tượng Spreadsheet, nhưng giờ chúng ta cần thực hiện một thay đổi tương tự đối với createColumnChart() để trả về đối tượng biểu đồ (EmbeddedChart). Quay lại ứng dụng của bạn để mã hoá nhằm thêm một dòng cuối cùng vào cuối createColumnChart() để thực hiện việc đó:
  // NEW: Return chart object for later use
  return chart;
}
  1. Cập nhật createBigQueryPresentation(). Vì createColumnChart() trả về biểu đồ, nên chúng ta cần lưu biểu đồ đó vào một biến, sau đó truyền cả bảng tính và biểu đồ đến createSlidePresentation(). Vì chúng ta ghi nhật ký URL của bảng tính mới tạo, nên hãy ghi nhật ký URL của bản trình bày mới. Cập nhật createBigQueryPresentation() để có dạng như sau:
/**
 * 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. Lưu và chạy lại createBigQueryPresentation(). Tuy nhiên, trước khi thực thi, hãy nhận ra rằng ứng dụng của bạn hiện cần thêm một bộ quyền nữa của người dùng để xem và quản lý các bản trình bày trên Google Trang trình bày. Sau khi bạn cho phép quyền này, ứng dụng sẽ chạy như trước.
  2. Giờ đây, ngoài Trang tính đã tạo, bạn cũng sẽ nhận được một bản trình bày mới trên Trang trình bày có 3 trang trình bày (tiêu đề, bảng dữ liệu, biểu đồ dữ liệu), như minh hoạ dưới đây:

Xin chúc mừng! Giờ đây, bạn đã tạo một ứng dụng tận dụng cả hai phía của Google Cloud bằng cách thực hiện một yêu cầu Google BigQuery để truy vấn một trong các tập dữ liệu công khai của Google Cloud, tạo một Google Trang tính mới để lưu trữ kết quả, thêm một biểu đồ dựa trên dữ liệu vừa truy xuất đó và cuối cùng là tạo một bản trình bày trên Google Trang trình bày có kết quả cũng như biểu đồ trong bảng tính.

Đó là những gì bạn đã làm về mặt kỹ thuật. Nói chung, bạn đã chuyển từ phân tích dữ liệu lớn sang một thứ mà bạn có thể trình bày cho các bên liên quan, tất cả đều bằng mã, tất cả đều tự động. Chúng tôi hy vọng mẫu này sẽ truyền cảm hứng để bạn thực hiện và tuỳ chỉnh cho các dự án của riêng mình. Khi kết thúc lớp học lập trình này, chúng tôi sẽ đưa ra một số đề xuất về cách bạn có thể cải thiện thêm ứng dụng mẫu này.

Với những thay đổi nêu trên trong nhiệm vụ cuối cùng (ngoại trừ PROJECT_ID), bq-sheets-slides.js của bạn sẽ có dạng như sau (và cũng có trong thư mục final trong kho lưu trữ 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());
}

"Tệp thứ hai" trong lớp học lập trình này không đóng vai trò gì, đó là tệp kê khai Apps Script, appsscript.json. Bạn có thể truy cập vào tệp này bằng cách chuyển đến thẻ trình duyệt của trình chỉnh sửa mã rồi chọn View > Show manifest file (Xem > Hiện tệp kê khai) trong trình đơn ở trên cùng. Nội dung sẽ có dạng như sau:

appsscript.json

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

Tệp kê khai là một tệp cấu hình ở cấp hệ thống mà Apps Script dùng để biết môi trường thực thi nào có sẵn cho ứng dụng của bạn. Việc đề cập đến nội dung của tệp kê khai nằm ngoài phạm vi của lớp học lập trình này, nhưng bạn có thể hình dung được chức năng của tệp kê khai.

Dưới đây là các tài nguyên bổ sung giúp bạn tìm hiểu sâu hơn về nội dung được đề cập trong lớp học lập trình này, cũng như khám phá những cách khác để truy cập vào các công cụ dành cho nhà phát triển của Google theo phương thức lập trình. Chúng tôi cố gắng đồng bộ hoá lớp học lập trình này với kho lưu trữ.

Tài nguyên cho ứng dụng này

Tài liệu

  • Một khoá bí mật khác của Google (Apps)? (Video giới thiệu về Apps Script)
  • Truy cập Google Maps từ bảng tính?!? (video)
  • Thư viện video về Google Apps Script
  • Chuỗi video Launchpad Online (tiền thân của...)
  • Loạt video G Suite Dev Show

Các lớp học lập trình khác

Cơ bản

Bậc trung

Ứng dụng tham khảo

Dưới đây là nhiều "thử thách về mã", tức là nhiều cách để bạn có thể cải thiện hoặc tăng cường mẫu mà chúng ta đã tạo trong lớp học lập trình này. Danh sách này chắc chắn chưa đầy đủ nhưng có thể cung cấp cho bạn một số ý tưởng truyền cảm hứng về bước tiếp theo bạn có thể thực hiện.

  • Ứng dụng. Bạn không muốn bị giới hạn khi sử dụng JavaScript hoặc các quy định hạn chế do Apps Script áp đặt? Chuyển ứng dụng này sang ngôn ngữ lập trình mà bạn yêu thích bằng cách sử dụng các API REST cho Google BigQuery, Trang tính và Trang trình bày.
  • BigQuery. Thử nghiệm với một truy vấn khác cho tập dữ liệu Shakespeare... có lẽ bạn sẽ tìm thấy một truy vấn mà bạn quan tâm. Bạn có thể tìm thấy một truy vấn mẫu khác trong ứng dụng mẫu BigQuery của Apps Script ban đầu.
  • BigQuery. Thử nghiệm với một số tập dữ liệu công khai khác của BigQuery... có thể bạn sẽ tìm thấy một tập dữ liệu có ý nghĩa hơn đối với mình.
  • BigQuery. Trước đó, chúng tôi đã đề cập đến những truy vấn khác mà bạn có thể thử với các tác phẩm của Shakespeare hoặc các bảng dữ liệu công khai khác. Chúng tôi muốn chia sẻ lại trang web này cũng như trang web này.
  • Trang tính. Thử nghiệm với các loại biểu đồ khác.
  • Trang tính và BigQuery. Đảo ngược tình thế... có thể bạn có một tập dữ liệu lớn trong một bảng tính ở đâu đó. Vào năm 2016, nhóm BigQuery đã giới thiệu tính năng cho phép nhà phát triển sử dụng Trang tính làm nguồn dữ liệu (xem bài đăng trên blog mộthai để biết thêm thông tin).
  • Trang trình bày. Thêm các trang trình bày khác vào bản trình bày đã tạo, chẳng hạn như hình ảnh hoặc các thành phần khác liên quan đến hoạt động phân tích dữ liệu lớn của bạn. Sau đây là hướng dẫn về dịch vụ tích hợp của Trang trình bày để giúp bạn bắt đầu.
  • G Suite. Tìm cách sử dụng các dịch vụ khác của G Suite hoặc dịch vụ tích hợp sẵn của Google từ Apps Script, tức là Gmail, Google Drive, Lịch, Tài liệu, Maps, Analytics, YouTube, v.v., cũng như các dịch vụ nâng cao khác. Hãy xem phần tổng quan về tài liệu tham khảo cho cả dịch vụ tích hợp và dịch vụ nâng cao để biết thêm thông tin.