Layanan Lanjutan Looker Studio

Jika konektor Anda mengambil data dari BigQuery, Anda dapat menggunakan Layanan Lanjutan Looker Studio untuk mengoptimalkan konektor tersebut. Daripada memanggil BigQuery API secara langsung, Anda perlu menyediakan konfigurasi kueri dan Looker Studio akan mengambil data serta skemanya 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(). Sebagai ganti 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 Anda

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 manifes, 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 yang 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. Ini diperlukan jika semua kolom dalam skema Anda tidak dapat direpresentasikan oleh satu kueri BigQuery, misalnya saat Anda membuat konektor multi-skema.

Karena kueri BigQuery akan dieksekusi atas nama pengguna yang diberi otorisasi, Anda juga harus 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 diotorisasi 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 datanya, 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)
}