Transfer Campaign Manager

Konektor BigQuery Data Transfer Service untuk Campaign Manager memungkinkan Anda menjadwalkan dan mengelola tugas pemuatan berulang secara otomatis untuk data pelaporan Campaign Manager.

Laporan yang Didukung

BigQuery Data Transfer Service untuk Campaign Manager (sebelumnya dikenal sebagai DoubleClick Campaign Manager) mendukung opsi pelaporan berikut:

Untuk mengetahui informasi tentang transformasi laporan Campaign Manager menjadi tabel dan tampilan BigQuery, lihat Transformasi laporan Campaign Manager.

Opsi pelaporan Dukungan
Frekuensi pengulangan

Setiap 8 jam, berdasarkan waktu pembuatan.

Tidak dapat dikonfigurasi

Jendela refresh

2 hari terakhir

Tidak dapat dikonfigurasi

Durasi pengisian ulang maksimum

60 hari terakhir

Campaign Manager menyimpan file Transfer Data hingga 60 hari. File yang sudah lebih dari 60 hari akan dihapus oleh Campaign Manager.

Penyerapan data dari transfer Campaign Manager

Saat Anda mentransfer data dari Campaign Manager ke BigQuery, data tersebut akan dimuat ke dalam tabel BigQuery yang dipartisi berdasarkan tanggal. Partisi tabel tempat data dimuat sesuai dengan tanggal dari sumber data. Jika Anda menjadwalkan beberapa transfer untuk tanggal yang sama, BigQuery Data Transfer Service akan menimpa partisi untuk tanggal tertentu tersebut dengan data terbaru. Beberapa transfer dalam satu hari atau menjalankan pengisian ulang tidak akan menghasilkan data duplikat, dan partisi untuk tanggal lain tidak akan terpengaruh.

Memuat ulang jendela

Periode refresh adalah jumlah hari yang diperlukan transfer data untuk mengambil data saat transfer data terjadi. Misalnya, jika periode pembaruan adalah tiga hari dan transfer harian terjadi, BigQuery Data Transfer Service akan mengambil semua data dari tabel sumber Anda selama tiga hari terakhir. Dalam contoh ini, saat transfer harian terjadi, BigQuery Data Transfer Service akan membuat partisi tabel tujuan BigQuery baru dengan salinan data tabel sumber Anda dari hari ini, lalu otomatis memicu pengisian ulang untuk memperbarui partisi tabel tujuan BigQuery dengan data tabel sumber Anda dari dua hari terakhir. Proses pengisian ulang yang dipicu secara otomatis akan menimpa atau memperbarui tabel tujuan BigQuery secara inkremental, bergantung pada apakah update inkremental didukung di konektor BigQuery Data Transfer Service atau tidak.

Saat Anda menjalankan transfer data untuk pertama kalinya, transfer data akan mengambil semua data sumber yang tersedia dalam periode refresh. Misalnya, jika periode pembaruan adalah tiga hari dan Anda menjalankan transfer data untuk pertama kalinya, BigQuery Data Transfer Service akan mengambil semua data sumber dalam tiga hari.

Periode refresh dipetakan ke kolom API TransferConfig.data_refresh_window_days.

Untuk mengambil data di luar periode pembaruan, seperti data historis, atau untuk memulihkan data dari gangguan atau kesenjangan transfer, Anda dapat memulai atau menjadwalkan operasi pengisian ulang.

Sebelum memulai

Sebelum membuat transfer data Campaign Manager:

  • Pastikan Anda telah menyelesaikan semua tindakan yang diperlukan untuk mengaktifkan BigQuery Data Transfer Service.
  • Buat set data BigQuery untuk menyimpan data Campaign Manager.
  • Pastikan organisasi Anda memiliki akses ke file Transfer Data Campaign Manager v2 (Campaign Manager DTv2). File ini dikirimkan oleh tim Campaign Manager ke bucket Cloud Storage. Untuk mendapatkan akses ke file Campaign Manager DTv2, langkah Anda berikutnya bergantung pada apakah Anda memiliki kontrak langsung dengan Campaign Manager. Dalam kedua kasus tersebut, biaya tambahan mungkin berlaku.

    • Jika Anda memiliki kontrak dengan Campaign Manager, hubungi dukungan Campaign Manager untuk menyiapkan file Campaign Manager DTv2.
    • Jika Anda tidak memiliki kontrak dengan Campaign Manager, agensi iklan atau reseller Campaign Manager Anda mungkin memiliki akses ke file Campaign Manager DTv2. Hubungi agensi atau reseller Anda untuk mendapatkan akses ke file tersebut.

    Setelah menyelesaikan langkah ini, Anda akan menerima nama bucket Cloud Storage yang mirip dengan berikut ini:

    dcdt_-dcm_account123456

  • Jika ingin menyiapkan notifikasi operasi transfer untuk Pub/Sub, Anda harus memiliki izin pubsub.topics.setIamPolicy. Untuk mengetahui informasi selengkapnya, lihat Notifikasi operasi BigQuery Data Transfer Service.

Izin yang diperlukan

  • BigQuery: Pastikan orang yang membuat transfer data memiliki izin berikut di BigQuery:

    • Izin bigquery.transfers.update untuk membuat transfer data
    • Izin bigquery.datasets.get dan bigquery.datasets.update pada set data target

    Peran IAM bigquery.admin yang telah ditetapkan mencakup izin bigquery.transfers.update, bigquery.datasets.update, dan bigquery.datasets.get. Untuk mengetahui informasi lebih lanjut tentang peran IAM dalam BigQuery Data Transfer Service, lihat Kontrol akses.

  • Campaign Manager: Akses baca ke file DTv2 Campaign Manager yang disimpan di Cloud Storage. Akses dikelola oleh entity tempat Anda menerima bucket Cloud Storage.

Menyiapkan transfer Campaign Manager

Penyiapan transfer data Campaign Manager memerlukan:

  • Bucket Cloud Storage: URI bucket Cloud Storage untuk file DTv2 Campaign Manager Anda seperti yang dijelaskan di bagian Sebelum memulai. Nama bucket akan terlihat seperti berikut:

    dcdt_-dcm_account123456

  • ID Campaign Manager: ID Jaringan Campaign Manager, Pengiklan, atau Floodlight Anda. ID jaringan adalah induk dalam hierarki.

Menemukan ID Campaign Manager

Untuk mengambil ID Campaign Manager, Anda dapat menggunakan konsol Cloud Storage untuk memeriksa file di bucket Cloud Storage Transfer Data Campaign Manager. ID Campaign Manager digunakan untuk mencocokkan file di bucket Cloud Storage yang disediakan. ID disematkan dalam nama file, bukan nama bucket Cloud Storage.

Contoh:

  • Dalam file bernama dcm_account123456_activity_*, ID-nya adalah 123456.
  • Dalam file bernama dcm_floodlight7890_activity_*, ID-nya adalah 7890.
  • Dalam file bernama dcm_advertiser567_activity_*, ID-nya adalah 567.

Menemukan awalan nama file Anda

Dalam kasus yang jarang terjadi, file di bucket Cloud Storage Anda mungkin memiliki nama file kustom nonstandar yang disiapkan oleh tim layanan Google Marketing Platform untuk Anda.

Contoh:

  • Dalam file bernama dcm_account123456custom_activity_*, awalannya adalah dcm_account123456custom — semuanya sebelum _activity.

Hubungi dukungan Campaign Manager jika Anda memerlukan bantuan.

Membuat transfer data untuk Campaign Manager

Konsol

  1. Buka halaman Data transfers di konsol Google Cloud.

    Buka Data transfers

  2. Klik Create transfer.

  3. Di halaman Create Transfer:

    • Di bagian Source type, untuk Source, pilih Campaign Manager.

      Sumber transfer

    • Di bagian Transfer config name, untuk Display name, masukkan nama untuk transfer data, seperti My Transfer. Nama transfer dapat berupa nilai apa pun yang memungkinkan Anda mengidentifikasi transfer jika perlu mengubahnya nanti.

      Nama transfer

    • Di bagian Schedule options, untuk Schedule, biarkan nilai defaultnya (Start now) atau klik Start at a set time.

      • Untuk Repeats, pilih opsi seberapa sering transfer dijalankan.

        • Harian (default)
        • Mingguan
        • Bulanan
        • Khusus
        • Sesuai permintaan

        Jika Anda memilih opsi selain Harian, opsi tambahan tersedia. Misalnya, jika Anda memilih Mingguan, sebuah opsi akan muncul untuk memilih hari.

      • Untuk Tanggal mulai dan waktu proses, masukkan tanggal dan waktu untuk memulai transfer data. Jika Anda memilih Start now, opsi ini akan dinonaktifkan.

        Jadwal transfer

    • Di bagian Destination settings, untuk Destination dataset, pilih set data yang Anda buat untuk menyimpan data.

      Mentransfer set data

    • Di bagian Data source details:

      • Untuk Cloud Storage bucket, masukkan atau cari nama bucket Cloud Storage yang menyimpan file Transfer Data V2.0 Anda. Saat Anda memasukkan nama bucket, jangan sertakan gs://.
      • Untuk DoubleClick ID, masukkan ID Campaign Manager yang sesuai.
      • (Opsional) Jika file Anda memiliki nama standar seperti contoh ini, kosongkan kolom File name prefix. Tentukan awalan nama file jika file di bucket Cloud Storage memiliki nama file kustom.

        Detail sumber Campaign Manager

    • (Opsional) Di bagian Notification options:

      • Klik tombol untuk mengaktifkan notifikasi email. Saat Anda mengaktifkan opsi ini, administrator transfer akan menerima notifikasi email saat proses transfer gagal.
      • Untuk Select a Pub/Sub topic, pilih nama topik atau klik Create a topic. Opsi ini mengonfigurasi notifikasi operasi Pub/Sub untuk transfer Anda.
  4. Klik Simpan.

bq

Masukkan perintah bq mk dan berikan flag pembuatan transfer — --transfer_config. Flag berikut juga diperlukan:

  • --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

Dengan keterangan:

  • project_id adalah project ID Anda.
  • dataset adalah set data target untuk konfigurasi transfer data.
  • name adalah nama tampilan untuk konfigurasi transfer data. Nama transfer dapat berupa nilai apa pun yang memungkinkan Anda mengidentifikasi transfer jika perlu mengubahnya nanti.
  • parameters berisi parameter untuk konfigurasi transfer data yang dibuat dalam format JSON. Contoh: --params='{"param":"param_value"}'. Untuk Campaign Manager, Anda harus menyediakan parameter bucket dan network_id. bucket adalah bucket Cloud Storage yang berisi file DTv2 Campaign Manager Anda. network_id adalah jaringan, Floodlight, atau ID pengiklan Anda.
  • data_source adalah sumber data — dcm_dt (Campaign Manager).

Anda juga dapat memberikan flag --project_id untuk menentukan project tertentu. Jika --project_id tidak ditentukan, project default akan digunakan.

Misalnya, perintah berikut akan membuat transfer data Campaign Manager bernama My Transfer menggunakan ID Campaign Manager 123456, bucket Cloud Storage dcdt_-dcm_account123456, dan set data target mydataset. Parameter file_name_prefix bersifat opsional dan hanya digunakan untuk nama file kustom yang langka.

Transfer data dibuat di project default:

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

Setelah menjalankan perintah, Anda akan menerima pesan seperti berikut:

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

Ikuti petunjuknya, lalu tempel kode autentikasi di command line.

API

Gunakan metode projects.locations.transferConfigs.create dan berikan instance resource TransferConfig.

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Memecahkan masalah penyiapan transfer Campaign Manager

Jika Anda mengalami masalah saat menyiapkan transfer data, lihat Masalah transfer Campaign Manager di bagian Memecahkan masalah konfigurasi transfer.

Membuat kueri data Anda

Saat data Anda ditransfer ke BigQuery, data tersebut akan ditulis ke tabel berpartisi berdasarkan waktu penyerapan. Untuk informasi selengkapnya, lihat Pengantar tabel berpartisi.

Jika membuat kueri tabel secara langsung, bukan menggunakan tabel virtual yang dihasilkan secara otomatis, Anda harus menggunakan kolom semu _PARTITIONTIME dalam kueri. Untuk mengetahui informasi selengkapnya, lihat Membuat kueri tabel berpartisi.

Contoh kueri Campaign Manager

Anda dapat menggunakan contoh kueri Campaign Manager berikut untuk menganalisis data yang ditransfer. Anda juga dapat menggunakan kueri dalam alat visualisasi seperti Looker Studio. Kueri ini disediakan untuk membantu Anda mulai membuat kueri data Campaign Manager dengan BigQuery. Untuk pertanyaan tambahan mengenai apa yang dapat Anda lakukan dengan laporan ini, hubungi perwakilan teknis Campaign Manager Anda.

Di setiap kueri berikut, ganti variabel seperti dataset dengan nilai Anda.

Kampanye terbaru

Contoh kueri SQL berikut mengambil kampanye terbaru.

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

Tayangan dan pengguna berbeda menurut kampanye

Contoh kueri SQL berikut menganalisis jumlah tayangan dan pengguna yang berbeda berdasarkan kampanye selama 30 hari terakhir.

# 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

Kampanye terbaru yang diurutkan berdasarkan kampanye dan tanggal

Contoh kueri SQL berikut menganalisis kampanye terbaru dalam 30 hari terakhir, yang diurutkan berdasarkan kampanye dan tanggal.

# 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

Tayangan dan pengguna yang berbeda menurut kampanye dalam rentang tanggal

Contoh kueri SQL berikut menganalisis jumlah tayangan dan pengguna yang berbeda menurut kampanye antara start_date dan end_date.

# 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

Tayangan, klik, aktivitas, dan pengguna berbeda menurut kampanye

Contoh kueri SQL berikut menganalisis jumlah tayangan, klik, aktivitas, dan pengguna berbeda berdasarkan kampanye selama 30 hari terakhir. Di kueri ini, ganti variabel seperti campaign_list dengan nilai Anda. Misalnya, ganti campaign_list dengan daftar yang dipisahkan koma dari semua kampanye Campaign Manager yang diinginkan dalam cakupan kueri.

# 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

Aktivitas kampanye

Contoh kueri SQL berikut menganalisis aktivitas kampanye selama 30 hari terakhir. Dalam kueri ini, ganti variabel seperti campaign_list dengan nilai Anda. Misalnya, ganti campaign_list dengan daftar yang dipisahkan koma dari semua kampanye Campaign Manager yang diinginkan dalam cakupan kueri.

# 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