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à i dati e lo schema per te.

Come funziona

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

La differenza più evidente è 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 della 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 al 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

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

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

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

Di seguito è riportato un manifest del connettore che utilizza le credenziali dell'utente autorizzato per connettersi 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 service account per accedere a BigQuery, l'ambito OAuth bigquery.readonly non è richiesto nel manifest. Tuttavia, l'ambito deve essere aggiunto all'elenco degli ambiti per il service account.

Riferimento getData e getSchema

I connettori che utilizzano i servizi avanzati di Looker Studio restituiscono un oggetto di configurazione della 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)
}