Erweiterte Looker Studio-Dienste

Wenn Ihr Connector Daten aus BigQuery abruft, können Sie Looker Studio Advanced Services verwenden, um ihn zu optimieren. Anstatt die BigQuery API direkt aufzurufen, geben Sie eine Abfragekonfiguration an. Looker Studio ruft dann die Daten und das Schema für Sie ab.

Funktionsweise

Community-Connectors, die Looker Studio Advanced Services verwenden, funktionieren ähnlich wie normale Connectors.

Der wesentliche Unterschied besteht in der erwarteten Antwort bei der Ausführung der Funktionen getSchema() und/oder getData(). Anstatt ein Schema und Daten abzurufen und zurückzugeben, können diese Funktionen Abfragekonfigurationen zurückgeben. Wenn eine Abfragekonfiguration zurückgegeben wird, ruft Looker Studio das Schema und/oder die Daten direkt auf Grundlage der bereitgestellten Abfragekonfiguration ab.

Connector entwickeln

Community-Connectors, die Looker Studio Advanced Services verwenden, sind mit normalen Connectors vergleichbar, es gibt jedoch zwei Ausnahmen.

  1. Ein zusätzlicher Manifestschlüssel
  2. Eine andere Antwort von getSchema() und/oder getData()

Manifestreferenz

Legen Sie im Manifest die folgenden Attribute auf true fest.

  • Verwenden Sie für getSchema() die Property dataStudio.advancedServices.schema.
  • Verwenden Sie für getData() die Property dataStudio.advancedServices.data.

Der Wert true gibt an, dass für die entsprechende Funktion von Ihrem Connector anstelle der Standardantwort eine Abfragekonfiguration zurückgegeben wird.

Wenn Sie Ihr eigenes Schema mit der Standardantwort getSchema() definieren möchten, setzen Sie dataStudio.advancedServices.schema im Manifest auf false oder lassen Sie diese Eigenschaft weg. Dies ist erforderlich, wenn alle Felder in Ihrem Schema nicht durch eine einzelne BigQuery-Abfrage dargestellt werden können, z.B. wenn Sie einen Connector mit mehreren Schemas erstellen.

Da die BigQuery-Abfrage im Namen des autorisierten Nutzers ausgeführt wird, müssen Sie auch den BigQuery-OAuth-Bereich ("https://www.googleapis.com/auth/bigquery.readonly") in das Manifest aufnehmen, um die Autorisierung anzufordern.

Das folgende Connector-Manifest verwendet die Anmeldedaten des autorisierten Nutzers, um eine Verbindung zu BigQuery herzustellen:

{
  "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"]
}

Wenn Sie ein Dienstkonto für den Zugriff auf BigQuery verwenden, ist der OAuth-Bereich bigquery.readonly im Manifest nicht erforderlich. Der Bereich sollte jedoch der Liste der Bereiche für das Dienstkonto hinzugefügt werden.

getData- und getSchema-Referenz

Connectors, die Looker Studio Advanced Services verwenden, geben ein Abfragekonfigurationsobjekt für getSchema() und/oder getData() zurück. Je nach Datenquelle sind für diese Konfiguration möglicherweise zusätzliche Properties erforderlich.

Das folgende Beispiel zeigt, wie das Konfigurationsobjekt mit dem DataStudioApp-Dienst erstellt wird:

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

Beispiel für die Funktionen getSchema() und 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)
}