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ể dùng Looker Studio Dịch vụ nâng cao để tối ưu hoá trình kết nối của bạn. Thay vì gọi BigQuery trực tiếp bằng API, bạn chỉ cần cung cấp một cấu hình truy vấn và Looker Studio sẽ tìm nạp và giản đồ cho bạn.

Cách hoạt động

Những trình kết nối cộng đồng sử dụng các 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.

Sự khác biệt đáng chú ý là phản hồi dự kiến từ quá trình thực thi của Các hàm getSchema() và/hoặc getData(). Thay vì tìm nạp và trả về giản đồ và dữ liệu, các hàm này có thể trả về cấu hình truy vấn. Khi 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 đã 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 các Dịch vụ nâng cao của Looker Studio giống như một trình kết nối thông thường với hai ngoại lệ.

  1. Khoá tệp kê khai bổ sung
  2. Một phản hồi khác của getSchema() và/hoặc getData()

Tài liệu tham khảo trong 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ị của true cho biết rằng đối với chức năng tương ứng, trình kết nối của bạn 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 cách sử dụng phản hồi getSchema() tiêu chuẩn, hãy đặt dataStudio.advancedServices.schema sang false trong tệp kê khai hoặc bỏ qua thuộc tính này thuộc tính này. Điều này là 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, ví dụ: khi tạo 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 thêm phạm vi BigQuery OAuth ("https://www.googleapis.com/auth/bigquery.readonly") trong tệp kê khai để yêu cầu uỷ quyền.

Dưới đây là tệp kê khai trình kết nối sử dụng thông tin đăng nhập của người dùng được cấp phép để 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 bạn đang dùng một tài khoản dịch vụ để truy cập BigQuery, thì bigquery.readonly Không bắt buộc phải có phạm vi OAuth trong tệp kê khai. Tuy nhiên, Bạn nên thêm phạm vi vào danh sách phạm vi cho tài khoản dịch vụ.

Tham chiếu 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 dành cho getSchema() và/hoặc getData(). Tuỳ thuộc vào nguồn dữ liệu, config có thể cần thuộc tính bổ sung.

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

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)
}