Erweiterte Looker Studio-Dienste

Wenn der Connector Daten aus BigQuery abruft, können Sie ihn mithilfe der erweiterten Dienste von Looker Studio optimieren. Anstatt die BigQuery API direkt aufzurufen, geben Sie eine Abfragekonfiguration an. Die Daten und das Schema werden dann von Looker Studio abgerufen.

Funktionsweise

Community-Connectors, die die erweiterten Dienste von Looker Studio verwenden, funktionieren ähnlich wie ein normaler Connector.

Der wesentliche Unterschied ist die von der Ausführung der Funktionen getSchema() und/oder getData() erwartete Antwort. 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 der Grundlage der Abfragekonfiguration ab.

Connector entwickeln

Community-Connectors, die die erweiterten Dienste von Looker Studio verwenden, sind bis auf zwei Ausnahmen mit einem normalen Connector identisch.

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

Manifestreferenz

Legen Sie im Manifest die folgenden Attribute auf true fest.

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

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

Wenn Sie ein eigenes Schema mit der Standardantwort getSchema() definieren möchten, setzen Sie dataStudio.advancedServices.schema im Manifest auf false oder lassen Sie dieses Attribut weg. Dies ist erforderlich, wenn nicht alle Felder in Ihrem Schema 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 enthält 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. Er sollte jedoch in die Liste der Bereiche für das Dienstkonto aufgenommen werden.

Referenz zu getData und getSchema

Connectors, die erweiterte Looker Studio-Dienste verwenden, geben ein Abfragekonfigurationsobjekt für getSchema() und/oder getData() zurück. Je nach Datenquelle benötigt diese Konfiguration zusätzliche Attribute.

Im folgenden Beispiel wird der DataStudioApp-Dienst verwendet, um dieses Konfigurationsobjekt zu erstellen:

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 Funktion 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)
}