Các dịch vụ nâng cao của Looker Studio

Nếu trình kết nối của bạn tìm nạp dữ liệu từ BigQuery, thì bạn có thể sử dụng Dịch vụ nâng cao của Looker Studio để tối ưu hoá trình kết nối của mình. Thay vì gọi trực tiếp BigQuery API, bạn cung cấp một cấu hình truy vấn và Looker Studio sẽ tìm nạp dữ liệu và giản đồ cho bạn.

Cách thức hoạt động

Trình kết nối cộng đồng dùng Dịch vụ nâng cao của Looker Studio hoạt động tương tự như một trình kết nối thông thường.

Điểm khác biệt đáng chú ý là phản hồi dự kiến khi thực thi các hàm getSchema() và/hoặc getData(). Thay vì tìm nạp và trả về một giản đồ và dữ liệu, các hàm này có thể trả về cấu hình truy vấn. Khi một cấu hình truy vấn được trả về, Looker Studio sẽ trực tiếp tìm nạp giản đồ và/hoặc dữ liệu dựa trên cấu hình truy vấn được cung cấp.

Phát triển trình kết nối

Trình kết nối cộng đồng sử dụng Dịch vụ nâng cao của Looker Studio cũng giống như trình kết nối thông thường nhưng có 2 ngoại lệ.

  1. Khoá tệp kê khai bổ sung
  2. Câu trả lời khác từ getSchema() và/hoặc getData()

Tài liệu tham khảo về tệp kê khai

Trong tệp kê khai, hãy đặt các thuộc tính sau thành true.

  • Đối với getSchema(), hãy sử dụng thuộc tính dataStudio.advancedServices.schema
  • Đối với getData(), hãy sử dụng thuộc tính dataStudio.advancedServices.data

Giá trị true cho biết đối với hàm tương ứng, trình kết nối sẽ trả về cấu hình truy vấn thay vì phản hồi chuẩn.

Để xác định giản đồ của riêng bạn bằng phản hồi getSchema() tiêu chuẩn, hãy đặt dataStudio.advancedServices.schema thành false trong tệp kê khai hoặc bỏ qua thuộc tính này. Điều này cần thiết khi tất cả các trường trong giản đồ của bạn không thể được biểu thị bằng một truy vấn BigQuery duy nhất, ví dụ: khi bạn đang tạo một trình kết nối nhiều giản đồ.

Vì truy vấn BigQuery sẽ được thực thi thay mặt cho người dùng được uỷ quyền, nên bạn cũng cần đưa phạm vi OAuth của BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") vào tệp kê khai để yêu cầu uỷ quyền.

Sau đây là tệp kê khai trình kết nối sử dụng thông tin xác thực của người dùng được uỷ quyền để kết nối với BigQuery:

{
  "dataStudio": {
    "name": "BigQuery Public Dataset Demo",
    "logoUrl": "https://www.gstatic.com/images/branding/product/1x/data_connector_48dp.png",
    "company": "Looker DevRel",
    "companyUrl": "https://developers.google.com/looker-studio/",
    "addOnUrl": "https://developers.google.com/looker-studio/",
    "supportUrl": "https://developers.google.com/looker-studio/",
    "description": "Use BigQuery public dataset with Looker Studio's Advanced Services.",
    "advancedServices": {
      "schema": true,
      "data": true
    }
  },
  "oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]
}

Nếu đang dùng tài khoản dịch vụ để truy cập BigQuery, thì bạn không bắt buộc phải cung cấp phạm vi OAuth bigquery.readonly trong tệp kê khai. Tuy nhiên, bạn nên thêm phạm vi này vào danh sách phạm vi cho tài khoản dịch vụ.

Tài liệu tham khảo getDatagetSchema

Trình kết nối sử dụng Dịch vụ nâng cao của Looker Studio sẽ trả về một đối tượng cấu hình truy vấn cho getSchema() và/hoặc getData(). Tuỳ thuộc vào nguồn dữ liệu, cấu hình này có thể cần thêm thuộc tính.

Sau đây là ví dụ về cách sử dụng dịch vụ DataStudioApp để tạo đối tượng cấu hình này:

var bqTypes = DataStudioApp.createCommunityConnector().BigQueryParameterType;
var configuration = DataStudioApp.createCommunityConnector().newBigQueryConfig()
    // BigQuery billing project's Id.
    .setBillingProjectId('billingProjectId')
    // The query that will be executed.
    .setQuery('myQueryString')
    // Set to `true` to use StandardSQL.
    .setUseStandardSql(true)
    // The accessToken used for service execution.
    .setAccessToken('myAccessToken')
    // Adding a `STRING` query parameter. Other supported types are `BOOL`,
    // `FLOAT64`, and `INT64`.
    .addQueryParameter('myUrlParameterName', bqTypes.STRING, 'myUrlParameterValue')
    .build();

Ví dụ về hàm getSchema()getData()

var sqlString = "" +
    "SELECT " +
    "  _TABLE_SUFFIX AS yyyymm, " +
    "  ROUND(SUM(IF(fcp.start < @fast_fcp, fcp.density, 0)), 4) AS fast_fcp, " +
    "  ROUND(SUM(IF(fcp.start >= 1000 AND fcp.start < 3000, fcp.density, 0)), 4) AS avg_fcp, " +
    "  ROUND(SUM(IF(fcp.start >= 3000, fcp.density, 0)), 4) AS slow_fcp " +
    "FROM " +
    "  `chrome-ux-report.all.*`, " +
    "  UNNEST(first_contentful_paint.histogram.bin) AS fcp " +
    "WHERE " +
    "  origin = @url " +
    "GROUP BY " +
    "  yyyymm " +
    "ORDER BY " +
    "  yyyymm ";

function getQueryConfig(request) {
  var url = (request.configParams && request.configParams.url);
  var projectId = (request.configParams && request.configParams.projectId);
  var authToken = ScriptApp.getOAuthToken();
  return DataStudioApp.createCommunityConnector().newBigQueryConfig()
      .setAccessToken(authToken)
      .setUseStandardSql(true)
      .setBillingProjectId(projectId)
      .setQuery(sqlString)
      .addQueryParameter('url', bqTypes.STRING, url)
      .addQueryParameter('fast_fcp', bqTypes.INT64, '' + 1000)
      .build();
}

function getSchema(request) {
  return getQueryConfig(request);
}

function getData(request) {
  return getQueryConfig(request)
}