Campaign Manager-Übertragungen

Mit dem BigQuery Data Transfer Service für Campaign Manager können Sie wiederkehrende Ladejobs für Campaign Manager-Berichtsdaten automatisch planen und verwalten.

Unterstützte Berichte

Der BigQuery Data Transfer Service für Campaign Manager (ehemals DoubleClick Campaign Manager) unterstützt derzeit die folgenden Berichtsoptionen:

Informationen zur Umwandlung von Campaign Manager-Berichten in BigQuery-Tabellen und -Ansichten finden Sie unter Campaign Manager-Berichtsumwandlung.

Berichtsoption Support
Planen

Alle acht Stunden, je nach Erstellungszeitpunkt

Nicht konfigurierbar

Berichtszeitraum

Letzte zwei Tage

Nicht konfigurierbar

Maximale Backfill-Dauer

Letzte 60 Tage

Campaign Manager speichert Datenübertragungsdateien bis zu 60 Tage lang. Dateien, die älter als 60 Tage sind, werden von Campaign Manager gelöscht.

Vorbereitung

Diese Schritte sind erforderlich, bevor Sie eine Campaign Manager-Übertragung erstellen:

  • Überprüfen Sie, ob Sie alle erforderlichen Aktionen ausgeführt haben, damit Sie den BigQuery Data Transfer Service aktivieren können.
  • Erstellen Sie ein BigQuery-Dataset zum Speichern der Campaign Manager-Daten.
  • Ihre Organisation muss Zugriff auf Dateien von Campaign Manager Data Transfer V2 (Campaign Manager DTv2) haben. Diese Dateien werden vom Campaign Manager-Team an einen Cloud Storage-Bucket gesendet. Beim Zugriff auf Campaign Manager DTv2-Dateien hängt Ihr nächster Schritt davon ab, ob Sie einen direkten Vertrag für Campaign Manager haben. In beiden Fällen können zusätzliche Gebühren anfallen.

    • Wenn Sie einen Vertrag für Campaign Manager haben, wenden Sie sich zum Einrichten von Campaign Manager DTv2-Dateien an den Campaign Manager-Support.
    • Wenn Sie keinen Campaign Manager-Vertrag haben, hat möglicherweise Ihre Agentur oder Ihr Campaign Manager-Reseller Zugriff auf Campaign Manager DTv2-Dateien. Wenden Sie sich an Ihre Agentur oder an Ihren Reseller, um Zugriff auf diese Dateien zu erhalten.

    Nach der Ausführung dieses Schritts erhalten Sie einen Cloud Storage-Bucket-Namen, der ungefähr so aussieht:

    dcdt_-dcm_account123456

  • Wenn Sie Benachrichtigungen über die Übertragungsausführung für Pub/Sub einrichten möchten, benötigen Sie die Berechtigungen pubsub.topics.setIamPolicy. Weitere Informationen finden Sie unter Ausführungsbenachrichtigungen im BigQuery Data Transfer Service.

Erforderliche Berechtigungen

  • BigQuery: Achten Sie darauf, dass die Person, die die Übertragung erstellt, die folgenden Berechtigungen in BigQuery hat:

    • bigquery.transfers.update Berechtigungen zum Erstellen der Übertragung
    • Die Berechtigungen bigquery.datasets.get und bigquery.datasets.update für das Ziel-Dataset

    Die vordefinierte IAM-Rolle bigquery.admin enthält die Berechtigungen bigquery.transfers.update, bigquery.datasets.update und bigquery.datasets.get. Weitere Informationen zu IAM-Rollen in BigQuery Data Transfer Service finden Sie in der Zugriffssteuerung.

  • Campaign Manager: Lesezugriff auf die in Cloud Storage gespeicherten Campaign Manager DTv2-Dateien. Der Zugriff wird von der Entität verwaltet, von der Sie den Cloud Storage-Bucket erhalten haben.

Campaign Manager-Übertragung einrichten

Zum Einrichten einer Übertragung in Campaign Manager ist Folgendes erforderlich:

  • Cloud Storage-Bucket: Der Cloud Storage-Bucket-URI für Ihre Campaign Manager-DTv2-Dateien, wie unter Vorbereitung beschrieben. Der Bucket-Name sollte so aussehen:

    dcdt_-dcm_account123456

  • Campaign Manager-ID: Ihre Campaign Manager-Netzwerk-, Werbetreibenden- oder Floodlight-ID. Die Netzwerk-ID ist in der Hierarchie übergeordnet.

Nach Campaign Manager-ID suchen

Sie können die Campaign Manager-ID in der Cloud Storage-Konsole abrufen, um die Dateien im Cloud Storage-Bucket der Campaign Manager-Datenübertragung zu prüfen. Mit der Campaign Manager-ID werden im bereitgestellten Cloud Storage-Bucket die Dateien zugeordnet. Die ID ist in den Dateinamen und nicht in den Namen des Cloud Storage-Buckets eingebettet.

Beispiel:

  • In einer Datei mit dem Namen dcm_account123456_activity_* lautet die ID 123456.
  • In einer Datei mit dem Namen dcm_floodlight7890_activity_* lautet die ID 7890.
  • In einer Datei mit dem Namen dcm_advertiser567_activity_* lautet die ID 567.

Dateinamenpräfix suchen

In Ausnahmefällen können die Dateien in Ihrem Cloud Storage-Bucket benutzerdefinierte, nicht standardmäßige Dateinamen haben, die vom Serviceteam der Google Marketing Platform für Sie eingerichtet wurden.

Beispiel:

  • In einer Datei namens dcm_account123456custom_activity_* lautet das Präfix dcm_account123456custom – es entspricht also dem Teil vor _activity.

Wenn Sie Hilfe benötigen, wenden Sie sich an den Campaign Manager-Support.

Datenübertragung für Campaign Manager erstellen

Console

  1. Rufen Sie in der Google Cloud Console die Seite "BigQuery" auf.

    Zur Seite „BigQuery“

  2. Klicken Sie auf Übertragungen.

  3. Klicken Sie auf Create Transfer (Übertragung erstellen).

  4. Auf der Seite Übertragung erstellen:

    • Wählen Sie im Abschnitt Quelltyp für Quelle die Option Campaign Manager aus.

      Übertragungsquelle

    • Geben Sie im Abschnitt Transfer config name (Konfigurationsname für Übertragung) für Display name (Anzeigename) einen Namen wie My Transfer für die Übertragung ein. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung einfach identifizieren können, wenn Sie sie später ändern müssen.

      Name der Übertragung

    • Übernehmen Sie im Abschnitt Schedule options (Zeitplanoptionen) für Schedule (Zeitplan) den Standardwert (Start now) (Jetzt starten) oder klicken Sie auf Start at a set time (Zu einer festgelegten Zeit starten).

      • Wählen Sie für Repeats (Wiederholungen) eine Option aus, um festzulegen, wie oft die Übertragung ausgeführt werden soll.

        • Daily (Täglich) (Standardeinstellung)
        • Weekly (Wöchentlich)
        • Monthly (Monatlich)
        • Custom (Benutzerdefiniert)
        • On-demand (Bei Bedarf)

        Wenn Sie eine andere Option als "Daily" ("Täglich") auswählen, sind zusätzliche Optionen verfügbar. Wenn Sie beispielsweise "Weekly" (Wöchentlich) auswählen, wird eine Option zur Auswahl des Wochentags angezeigt.

      • Geben Sie für Start date and run time (Startdatum und Laufzeit) das Datum und die Uhrzeit für den Start der Übertragung ein. Wenn Sie Start now (Jetzt starten) auswählen, ist diese Option deaktiviert.

        Zeitplan für die Übertragung

    • Wählen Sie im Abschnitt Destination settings (Zieleinstellungen) für Destination dataset (Ziel-Dataset) das Dataset aus, das Sie zum Speichern Ihrer Daten erstellt haben.

      Dataset übertragen

    • Im Abschnitt Data source details (Details zur Datenquelle):

      • Geben Sie unter Cloud Storage-Bucket den Namen des Cloud Storage-Buckets ein, in dem die Dateien aus Data Transfer V 2.0 gespeichert sind, oder suchen Sie nach dem Bucket. Geben Sie den Bucket-Namen ohne gs:// ein.
      • Geben Sie für DoubleClick-ID die entsprechende Campaign Manager-ID ein.
      • (Optional) Wenn Ihre Dateien Standardnamen wie in diesen Beispielen haben, können Sie das Feld Dateinamenspräfix leer lassen. Geben Sie für Dateinamenspräfix nur dann einen Wert ein, wenn die Dateien in Ihrem Cloud Storage-Bucket benutzerdefinierte Dateinamen wie in diesem Beispiel haben.

        Details zur Campaign Manager-Quelle

    • (Optional) Im Abschnitt Notification options (Benachrichtigungsoptionen):

      • Klicken Sie auf die Umschaltfläche, um E-Mail-Benachrichtigungen zu aktivieren. Wenn Sie diese Option aktivieren, erhält der Übertragungsadministrator eine E-Mail-Benachrichtigung, wenn ein Übertragungsvorgang fehlschlägt.
      • Wählen Sie unter Pub/Sub-Thema auswählen Ihr Thema aus oder klicken Sie auf Thema erstellen. Mit dieser Option werden Pub/Sub-Ausführungsbenachrichtigungen für Ihre Übertragung konfiguriert.
  5. Klicken Sie auf Speichern.

bq

Geben Sie den Befehl bq mk ein und geben Sie das Flag --transfer_config für die Übertragungserstellung an. Die folgenden Flags sind ebenfalls erforderlich:

  • --data_source
  • --target_dataset
  • --display_name
  • --params
bq mk --transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source

Dabei gilt:

  • project_id ist die Projekt-ID.
  • dataset ist das Ziel-Dataset für die Übertragungskonfiguration.
  • name ist der angezeigte Name für die Übertragungskonfiguration. Der Name der Übertragung kann ein beliebiger Wert sein, mit dem Sie die Übertragung einfach identifizieren können, wenn Sie sie später ändern müssen.
  • parameters enthält die Parameter für die erstellte Übertragungskonfiguration im JSON-Format. Beispiel: --params='{"param":"param_value"}'. Für Campaign Manager müssen Sie die Parameter bucket und network_id angeben. bucket ist der Cloud Storage-Bucket, der Ihre Campaign Manager DTv2-Dateien enthält. network_id ist Ihre Netzwerk-, Floodlight- oder Werbetreibenden-ID.
  • data_source ist die Datenquelle: dcm_dt (Campaign Manager).

Sie können auch das Flag --project_id bereitstellen, um ein bestimmtes Projekt anzugeben. Wenn --project_id nicht angegeben ist, wird das Standardprojekt verwendet.

Mit dem folgenden Befehl wird beispielsweise eine Campaign Manager-Übertragung namens My Transfer mit der Campaign Manager-ID 123456, dem Cloud Storage-Bucket dcdt_-dcm_account123456 und dem Ziel-Dataset mydataset erstellt. Der Parameter file_name_prefix ist optional und wird nur für seltene, benutzerdefinierte Dateinamen verwendet.

Die Übertragung wird im Standardprojekt erstellt:

bq mk --transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"bucket": "dcdt_-dcm_account123456","network_id": "123456","file_name_prefix":"YYY"}' \
--data_source=dcm_dt

Nachdem Sie den Befehl ausgeführt haben, erhalten Sie eine Meldung wie die Folgende:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

Folgen Sie der Anleitung und fügen Sie den Authentifizierungscode in die Befehlszeile ein.

API

Verwenden Sie die Methode projects.locations.transferConfigs.create und geben Sie eine Instanz der Ressource TransferConfig an.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create campaign manager transfer config
public class CreateCampaignmanagerTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String bucket = "gs://cloud-sample-data";
    // the network_id only allows digits
    String networkId = "7878";
    String fileNamePrefix = "test_";
    Map<String, Value> params = new HashMap<>();
    params.put("bucket", Value.newBuilder().setStringValue(bucket).build());
    params.put("network_id", Value.newBuilder().setStringValue(networkId).build());
    params.put("file_name_prefix", Value.newBuilder().setStringValue(fileNamePrefix).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Campaignmanager Config Name")
            .setDataSourceId("dcm_dt")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createCampaignmanagerTransfer(projectId, transferConfig);
  }

  public static void createCampaignmanagerTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Campaignmanager transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Campaignmanager transfer was not created." + ex.toString());
    }
  }
}

Fehlerbehebung bei der Einrichtung von Campaign Manager-Übertragungen

Bei Problemen bei der Einrichtung von Übertragungen finden Sie weitere Informationen unter Fehlerbehebung bei Übertragungskonfigurationen im Abschnitt Übertragungsprobleme mit Campaign Manager.

Daten abfragen

Bei der Übertragung Ihrer Daten in BigQuery werden die Daten in zeitpartitionierte Tabellen geschrieben. Weitere Informationen finden Sie unter Einführung in partitionierte Tabellen.

Wenn Sie die Tabellen direkt abfragen, anstatt die automatisch generierten Ansichten zu verwenden, müssen Sie in der Abfrage die Pseudospalte _PARTITIONTIME verwenden. Weitere Informationen finden Sie unter Partitionierte Tabellen abfragen.

Campaign Manager-Beispielabfragen

Sie können die folgenden Campaign Manager-Beispielabfragen verwenden, um die übertragenen Daten zu analysieren. Sie können die Abfragen auch in einem Visualisierungstool wie Looker Studio aufrufen. Diese Abfragen werden zur Verfügung gestellt, um Ihnen den Einstieg in das Abfragen von Campaign Manager-Daten mit BigQuery zu erleichtern. Bei weiteren Fragen zur Nutzung dieser Berichte wenden Sie sich an einen technischen Mitarbeiter von Campaign Manager.

Ersetzen Sie in jeder der folgenden Abfragen Variablen wie dataset durch Ihre spezifischen Werte.

Letzte Kampagnen

Die folgende Beispielabfrage ruft die neuesten Kampagnen ab.

SELECT
  Campaign,
  Campaign_ID
FROM
  `dataset.match_table_campaigns_campaign_manager_id`
WHERE
  _DATA_DATE = _LATEST_DATE

Impressionen und unterschiedliche Nutzer nach Kampagne

In der folgenden SQL-Beispielabfrage wird die Anzahl von Impressionen und unterschiedlichen Nutzern pro Kampagne in den letzten 30 Tagen analysiert.

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.impression_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN start_date
    AND end_date
  GROUP BY
    Campaign_ID,
    Date

Neueste Kampagnen nach Kampagne und Datum sortiert

In der folgenden SQL-Beispielabfrage werden die neuesten Kampagnen in den letzten 30 Tagen analysiert und nach Kampagne und Datum sortiert.

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  Campaign,
  Campaign_ID,
  Date
FROM (
  SELECT
    Campaign,
    Campaign_ID
  FROM
    `dataset.match_table_campaigns_campaign_manager_id`
  WHERE
    _DATA_DATE = _LATEST_DATE ),
  (
  SELECT
    date AS Date
  FROM
    `bigquery-public-data.utility_us.date_greg`
  WHERE
    Date BETWEEN start_date
    AND end_date )
ORDER BY
  Campaign_ID,
  Date

Impressionen und unterschiedliche Nutzer nach Kampagne innerhalb eines Datumsbereichs

In der folgenden SQL-Beispielabfrage wird die Anzahl der Impressionen und unterschiedlichen Nutzer nach Kampagne zwischen start_date und end_date analysiert.

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  base.*,
  imp.count AS imp_count,
  imp.du AS imp_du
FROM (
  SELECT
    *
  FROM (
    SELECT
      Campaign,
      Campaign_ID
    FROM
      `dataset.match_table_campaigns_campaign_manager_id`
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      date AS Date
    FROM
      `bigquery-public-data.utility_us.date_greg`
    WHERE
      Date BETWEEN start_date
      AND end_date ) ) AS base
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.impression_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN start_date
    AND end_date
  GROUP BY
    Campaign_ID,
    Date ) AS imp
ON
  base.Campaign_ID = imp.Campaign_ID
  AND base.Date = imp.Date
WHERE
  base.Campaign_ID = imp.Campaign_ID
  AND base.Date = imp.Date
ORDER BY
  base.Campaign_ID,
  base.Date

Impressionen, Klicks, Aktivitäten und unterschiedliche Nutzer nach Kampagne

In der folgenden SQL-Beispielabfrage wird die Anzahl von Impressionen, Klicks, Aktivitäten und unterschiedlichen Nutzern nach Kampagne in den letzten 30 Tagen analysiert. Ersetzen Sie in dieser Abfrage Variablen wie campaign_list durch Ihre spezifischen Werte. Ersetzen Sie beispielsweise campaign_list durch eine durch Kommas getrennte Liste aller Campaign Manager-Kampagnen, die für die Abfrage relevant sind.

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  base.*,
  imp.count AS imp_count,
  imp.du AS imp_du,
  click.count AS click_count,
  click.du AS click_du,
  activity.count AS activity_count,
  activity.du AS activity_du
FROM (
  SELECT
    *
  FROM (
    SELECT
      Campaign,
      Campaign_ID
    FROM
      `dataset.match_table_campaigns_campaign_manager_id`
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      date AS Date
    FROM
      `bigquery-public-data.utility_us.date_greg`
    WHERE
      Date BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
      AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY) ) ) AS base
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.impression_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Date ) AS imp
ON
  base.Campaign_ID = imp.Campaign_ID
  AND base.Date = imp.Date
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.click_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Date ) AS click
ON
  base.Campaign_ID = click.Campaign_ID
  AND base.Date = click.Date
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.activity_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Date ) AS activity
ON
  base.Campaign_ID = activity.Campaign_ID
  AND base.Date = activity.Date
WHERE
  base.Campaign_ID IN campaign_list
  AND (base.Date = imp.Date
    OR base.Date = click.Date
    OR base.Date = activity.Date)
ORDER BY
  base.Campaign_ID,
  base.Date

Kampagnenaktivität

In der folgenden SQL-Beispielabfrage wird die Kampagnenaktivität der letzten 30 Tage analysiert. Ersetzen Sie in dieser Abfrage Variablen wie campaign_list durch Ihre spezifischen Werte. Ersetzen Sie beispielsweise campaign_list durch eine durch Kommas getrennte Liste aller Campaign Manager-Kampagnen, die für die Abfrage relevant sind.

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  base.*,
  activity.count AS activity_count,
  activity.du AS activity_du
FROM (
  SELECT
    *
  FROM (
    SELECT
      Campaign,
      Campaign_ID
    FROM
      `dataset.match_table_campaigns_campaign_manager_id`
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      mt_at.Activity_Group,
      mt_ac.Activity,
      mt_ac.Activity_Type,
      mt_ac.Activity_Sub_Type,
      mt_ac.Activity_ID,
      mt_ac.Activity_Group_ID
    FROM
      `dataset.match_table_activity_cats_campaign_manager_id` AS mt_ac
    JOIN (
      SELECT
        Activity_Group,
        Activity_Group_ID
      FROM
        `dataset.match_table_activity_types_campaign_manager_id`
      WHERE
        _DATA_DATE = _LATEST_DATE ) AS mt_at
    ON
      mt_at.Activity_Group_ID = mt_ac.Activity_Group_ID
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      date AS Date
    FROM
      `bigquery-public-data.utility_us.date_greg`
    WHERE
      Date BETWEEN start_date
      AND end_date ) ) AS base
LEFT JOIN (
  SELECT
    Campaign_ID,
    Activity_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.activity_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Activity_ID,
    Date ) AS activity
ON
  base.Campaign_ID = activity.Campaign_ID
  AND base.Activity_ID = activity.Activity_ID
  AND base.Date = activity.Date
WHERE
  base.Campaign_ID IN campaign_list
  AND base.Activity_ID = activity.Activity_ID
ORDER BY
  base.Campaign_ID,
  base.Activity_Group_ID,
  base.Activity_ID,
  base.Date