Servizi avanzati di Looker Studio

Se il connettore recupera i dati da BigQuery, puoi utilizzare i servizi avanzati di Looker Studio per ottimizzarlo. Anziché chiamare direttamente l'API BigQuery, fornisci una configurazione della query e Looker Studio recupererà per te i dati e lo schema.

Come funziona

I connettori della community che utilizzano i servizi avanzati di Looker Studio funzionano in modo simile a un normale connettore.

La differenza notevole è la risposta prevista dall'esecuzione delle funzioni getSchema() e/o getData(). Anziché recuperare e restituire uno schema e dati, queste funzioni possono restituire configurazioni di query. Quando viene restituita una configurazione di query, Looker Studio recupera direttamente lo schema e/o i dati in base alla configurazione della query fornita.

Sviluppo del connettore

I connettori della community che utilizzano i servizi avanzati di Looker Studio sono uguali a un connettore normale, con due eccezioni.

  1. Una chiave manifest aggiuntiva
  2. Una risposta diversa da getSchema() e/o getData()

Riferimento manifest

Nel manifest, imposta le seguenti proprietà su true.

  • Per getSchema(), utilizza la proprietà dataStudio.advancedServices.schema
  • Per getData(), utilizza la proprietà dataStudio.advancedServices.data

Il valore true indica che per la rispettiva funzione, il connettore restituirà una configurazione di query anziché la risposta standard.

Per definire il tuo schema utilizzando la risposta getSchema() standard, imposta dataStudio.advancedServices.schema su false nel manifest oppure ometti questa proprietà. Questa operazione è necessaria quando tutti i campi dello schema non possono essere rappresentati da una singola query BigQuery, ad esempio quando crei un connettore multi-schema.

Poiché la query BigQuery verrà eseguita per conto dell'utente autorizzato, per richiedere l'autorizzazione devi anche includere l'ambito OAuth di BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") nel manifest.

Di seguito è riportato il manifest del connettore che utilizza le credenziali dell'utente autorizzato per la connessione a 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"]
}

Se utilizzi un account di servizio per accedere a BigQuery, l'ambito OAuth bigquery.readonly non è richiesto nel manifest. Tuttavia, l'ambito deve essere aggiunto all'elenco degli ambiti per l'account di servizio.

Riferimento getData e getSchema

I connettori che utilizzano i servizi avanzati di Looker Studio restituiscono un oggetto di configurazione delle query per getSchema() e/o getData(). A seconda dell'origine dati, questa configurazione potrebbe richiedere proprietà aggiuntive.

Di seguito è riportato un esempio di utilizzo del servizio DataStudioApp per creare questo oggetto di configurazione:

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

Esempio di funzione getSchema() e 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)
}