Campaign Manager-Übertragungen
Mit BigQuery Data Transfer Service für den Campaign Manager-Connector 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 die folgenden Berichtsoptionen:
- Dateien aus Data Transfer V2 (Campaign Manager DTv2)
- Match Tables aus Data Transfer V2 (Campaign Manager DTv2)
Informationen zur Umwandlung von Campaign Manager-Berichten in BigQuery-Tabellen und -Ansichten finden Sie unter Campaign Manager-Berichtsumwandlung.
Berichtsoption | Support |
---|---|
Wiederholungshäufigkeit | Alle acht Stunden, je nach Erstellungszeitpunkt Nicht konfigurierbar |
Aktualisierungsfenster | 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. |
Datenaufnahme aus Campaign Manager-Übertragungen
Wenn Sie Daten aus Campaign Manager in BigQuery übertragen, werden die Daten in BigQuery-Tabellen geladen, die nach Datum partitioniert sind. Die Tabellenpartition, in die die Daten geladen werden, entspricht dem Datum aus der Datenquelle. Wenn Sie mehrere Übertragungen für dasselbe Datum planen, überschreibt BigQuery Data Transfer Service die Partition für dieses Datum mit den neuesten Daten. Mehrere Übertragungen am selben Tag oder laufende Backfills führen nicht zu doppelten Daten; Partitionen für andere Daten sind nicht betroffen.Fenster aktualisieren
Ein Aktualisierungsfenster ist die Anzahl der Tage, an denen eine Datenübertragung Daten zu einer Datenübertragung abruft. Wenn das Aktualisierungsfenster beispielsweise drei Tage beträgt und eine tägliche Übertragung erfolgt, ruft der BigQuery Data Transfer Service alle Daten aus Ihrer Quelltabelle der letzten drei Tage ab. In diesem Beispiel erstellt der BigQuery Data Transfer Service bei einer täglichen Übertragung eine neue BigQuery-Zieltabellenpartition mit einer Kopie der Daten der Quelltabelle vom aktuellen Tag und löst dann automatisch Backfill-Ausführungen aus, um die BigQuery-Zieltabellenpartitionen mit den Daten der Quelltabelle aus den letzten zwei Tagen zu aktualisieren. Die automatisch ausgelösten Backfill-Ausführungen überschreiben oder aktualisieren Ihre BigQuery-Zieltabelle entweder schrittweise oder aktualisieren sie, je nachdem, ob inkrementelle Aktualisierungen im BigQuery Data Transfer Service-Connector unterstützt werden oder nicht.
Wenn Sie eine Datenübertragung zum ersten Mal ausführen, werden alle Quelldaten abgerufen, die innerhalb des Aktualisierungszeitraums verfügbar sind. Wenn das Aktualisierungsfenster beispielsweise drei Tage beträgt und Sie die Datenübertragung zum ersten Mal ausführen, ruft der BigQuery Data Transfer Service alle Quelldaten innerhalb von drei Tagen ab.
Aktualisierungsfenster sind dem API-Feld TransferConfig.data_refresh_window_days
zugeordnet.
Wenn Sie Daten außerhalb des Aktualisierungszeitraums abrufen möchten, z. B. Verlaufsdaten, oder Daten nach Übertragungsausfällen oder -lücken wiederherstellen möchten, können Sie einen Backfill-Vorgang initiieren oder planen.
Hinweise
Diese Schritte sind erforderlich, bevor Sie eine Campaign Manager-Datenü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 Datenübertragung erstellt, die folgenden Berechtigungen in BigQuery hat:
bigquery.transfers.update
-Berechtigungen zum Erstellen der Datenübertragung- Die Berechtigungen
bigquery.datasets.get
undbigquery.datasets.update
für das Ziel-Dataset
Die vordefinierte IAM-Rolle
bigquery.admin
enthält die Berechtigungenbigquery.transfers.update
,bigquery.datasets.update
undbigquery.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 Datenü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
Rufen Sie in der Google Cloud Console die Seite Datenübertragungen auf.
Klicken Sie auf
Übertragung erstellen.Auf der Seite Übertragung erstellen:
Wählen Sie im Abschnitt Quelltyp für Quelle die Option Campaign Manager aus.
Geben Sie im Abschnitt Transfer config name (Konfigurationsname für Übertragung) für Display name (Anzeigename) einen Namen wie
My Transfer
für die Datenübertragung ein. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung identifizieren können, wenn Sie sie später ändern müssen.Ü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.
- Täglich (Standardeinstellung)
- Wöchentlich
- Monatlich
- Benutzerdefiniert
- On demand
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 Startdatum und Laufzeit das Datum und die Uhrzeit für den Start der Datenübertragung ein. Wenn Sie Start now (Jetzt starten) auswählen, ist diese Option deaktiviert.
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.
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 ein Dateinamenspräfix an, wenn die Dateien in Ihrem Cloud Storage-Bucket benutzerdefinierte Dateinamen haben.
- 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
(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.
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 Datenübertragungskonfiguration.
- name ist der Anzeigename für die Datenübertragungskonfiguration. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung identifizieren können, wenn Sie sie später ändern müssen.
- parameters enthält die Parameter für die erstellte Datenübertragungskonfiguration im JSON-Format. Beispiel:
--params='{"param":"param_value"}'
. Für Campaign Manager müssen Sie die Parameterbucket
undnetwork_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-Datenübertragung mit dem Namen My Transfer
erstellt. Dabei werden die Campaign Manager-ID 123456
, der Cloud Storage-Bucket dcdt_-dcm_account123456
und das Ziel-Dataset mydataset
verwendet. Der Parameter file_name_prefix
ist optional und wird nur für seltene, benutzerdefinierte Dateinamen verwendet.
Die Datenü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.
Fehlerbehebung bei der Einrichtung von Campaign Manager-Übertragungen
Bei Problemen bei der Einrichtung von Datenü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