Layanan Lanjutan Looker Studio

Jika konektor Anda mengambil data dari BigQuery, Anda dapat menggunakan Layanan Lanjutan Looker Studio untuk mengoptimalkan konektor. Daripada memanggil BigQuery API secara langsung, Anda memberikan konfigurasi kueri dan Looker Studio akan mengambil data dan skema untuk Anda.

Cara kerjanya

Konektor Komunitas yang menggunakan Layanan Lanjutan Looker Studio berfungsi serupa dengan konektor normal.

Perbedaan yang signifikan adalah respons yang diharapkan dari eksekusi fungsi getSchema() dan/atau getData(). Daripada mengambil dan menampilkan skema dan data, fungsi ini dapat menampilkan konfigurasi kueri. Saat konfigurasi kueri ditampilkan, Looker Studio akan langsung mengambil skema dan/atau data berdasarkan konfigurasi kueri yang diberikan.

Mengembangkan konektor

Konektor Komunitas yang menggunakan Layanan Lanjutan Looker Studio sama dengan konektor normal dengan dua pengecualian.

  1. Kunci manifes tambahan
  2. Respons yang berbeda dari getSchema() dan/atau getData()

Referensi manifes

Di manifest, tetapkan properti berikut ke true.

  • Untuk getSchema(), gunakan properti dataStudio.advancedServices.schema
  • Untuk getData(), gunakan properti dataStudio.advancedServices.data

Nilai true menunjukkan bahwa untuk fungsi terkait, konektor Anda akan menampilkan konfigurasi kueri, bukan respons standar.

Untuk menentukan skema Anda sendiri menggunakan respons getSchema() standar, tetapkan dataStudio.advancedServices.schema ke false dalam manifes atau hapus properti ini. Hal ini diperlukan jika semua kolom dalam skema Anda tidak dapat diwakili oleh satu kueri BigQuery, misalnya saat Anda membuat konektor multi-skema.

Karena kueri BigQuery akan dijalankan atas nama pengguna yang diberi otorisasi, Anda juga perlu menyertakan cakupan OAuth BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") dalam manifes untuk meminta otorisasi.

Berikut adalah manifes konektor yang menggunakan kredensial pengguna yang sah untuk terhubung ke 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"]
}

Jika Anda menggunakan akun layanan untuk mengakses BigQuery, cakupan OAuth bigquery.readonly tidak diperlukan dalam manifes. Namun, cakupan harus ditambahkan ke daftar cakupan untuk akun layanan.

Referensi getData dan getSchema

Konektor yang menggunakan Layanan Lanjutan Looker Studio menampilkan objek konfigurasi kueri untuk getSchema() dan/atau getData(). Bergantung pada sumber data, konfigurasi ini mungkin memerlukan properti tambahan.

Berikut adalah contoh penggunaan layanan DataStudioApp untuk membuat objek konfigurasi ini:

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();

Contoh fungsi getSchema() dan 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)
}