טעינת נתונים של Campaign Manager לתוך BigQuery
אפשר לטעון נתונים מ-Campaign Manager ל-BigQuery באמצעות המחבר של שירות העברת נתונים ל-BigQuery ב-Campaign Manager. שירות העברת הנתונים ל-BigQuery מאפשר לתזמן משימות העברה חוזרות שמוסיפות את הנתונים העדכניים מ-Campaign Manager ל-BigQuery.
סקירה כללית של מחברים
שירות העברת הנתונים ל-BigQuery עבור המחבר של Campaign Manager תומך באפשרויות הבאות להעברת נתונים.
מידע על האופן שבו דוחות של Campaign Manager עוברים טרנספורמציה לטבלאות ולתצוגות ב-BigQuery זמין במאמר טרנספורמציות של דוחות Campaign Manager.
| אפשרויות להעברת נתונים | תמיכה |
|---|---|
| דוחות נתמכים | מחבר Campaign Manager תומך בהעברת נתונים מהדוחות הבאים: |
| תדירות החזרה | מחבר Campaign Manager תומך בהעברת נתונים כל 8 שעות. כברירת מחדל, העברות נתונים ב-Campaign Manager מתוזמנות לזמן שבו נוצרת העברת הנתונים. |
| רענון החלון | המחבר של Campaign Manager מאחזר נתונים מ-Campaign Manager עד יומיים לפני מועד הפעלת העברת הנתונים. אי אפשר להגדיר את חלון הרענון למחבר הזה.
מידע נוסף זמין במאמר בנושא חלונות רענון. |
| זמינות של נתונים להשלמת חוסר (data backfill) | מריצים השלמת חוסר בנתונים כדי לאחזר נתונים שלא נכללים בהעברת הנתונים המתוזמנת. אפשר לאחזר נתונים עד לתקופה שמוגדרת במדיניות שמירת הנתונים במקור הנתונים. מידע על מדיניות שמירת הנתונים ב-Display & Video 360 זמין במאמר אמצעי הבקרה למחיקה ולשמירה של נתונים. |
העברת נתונים מ-Campaign Manager
כשמעבירים נתונים מ-Campaign Manager ל-BigQuery, הנתונים נטענים לטבלאות BigQuery שמחולקות למחיצות לפי תאריך. מחיצת הטבלה שאליה נטען הנתון תואמת לתאריך ממקור הנתונים. אם מתזמנים כמה העברות לאותו תאריך, שירות העברת הנתונים ל-BigQuery מחליף את המחיצה של התאריך הספציפי הזה בנתונים העדכניים ביותר. העברות מרובות באותו יום או הרצות של מילוי חוסרים לא גורמות לשכפול נתונים, והמחיצות של תאריכים אחרים לא מושפעות.רענון חלונות
חלון הרענון הוא מספר הימים שבהם מתבצעת העברת נתונים, שבמהלכם מתבצעת אחזור נתונים. לדוגמה, אם חלון הרענון הוא שלושה ימים וההעברה מתבצעת מדי יום, שירות העברת הנתונים ל-BigQuery מאחזר את כל הנתונים מטבלת המקור מ-3 הימים האחרונים. בדוגמה הזו, כשמתבצעת העברה יומית, שירות העברת הנתונים ל-BigQuery יוצר מחיצה חדשה בטבלת היעד ב-BigQuery עם עותק של נתוני טבלת המקור מהיום הנוכחי, ואז מפעיל אוטומטית מילוי חוסרים כדי לעדכן את המחיצות בטבלת היעד ב-BigQuery עם נתוני טבלת המקור מיומיים קודמים. הפעלות של מילוי חוסרים שמופעלות אוטומטית יחליפו או יעודכנו באופן מצטבר את טבלת היעד ב-BigQuery, בהתאם לשאלה אם יש תמיכה בעדכונים מצטברים במחבר של שירות העברת הנתונים ל-BigQuery.
כשמריצים העברת נתונים בפעם הראשונה, העברת הנתונים מאחזרת את כל נתוני המקור שזמינים בחלון הרענון. לדוגמה, אם חלון הרענון הוא שלושה ימים ואתם מריצים את העברת הנתונים בפעם הראשונה, שירות העברת הנתונים ל-BigQuery מאחזר את כל נתוני המקור תוך שלושה ימים.
כדי לאחזר נתונים מחוץ לחלון העדכון, כמו נתונים היסטוריים, או כדי לשחזר נתונים מהפסקות זמניות בשירות או מפערים בהעברה, אפשר להתחיל או לתזמן השלמת חוסר בנתונים.
לפני שמתחילים
לפני שיוצרים העברת נתונים ב-Campaign Manager:
- מוודאים שביצעתם את כל הפעולות שנדרשות כדי להפעיל את שירות העברת נתונים ל-BigQuery.
- יוצרים מערך נתונים ב-BigQuery לאחסון הנתונים של Campaign Manager.
מוודאים שיש לארגון שלכם גישה לקבצים של העברת נתונים ב-Campaign Manager גרסה 2 (Campaign Manager DTv2). הקבצים האלה מועברים על ידי צוות Campaign Manager לקטגוריה של Cloud Storage. כדי לקבל גישה לקבצים של Campaign Manager DTv2, השלב הבא תלוי בשאלה אם יש לכם חוזה ישיר עם Campaign Manager. בשני המקרים, יכול להיות שיחולו חיובים נוספים.
- אם יש לכם חוזה עם Campaign Manager, אתם יכולים לפנות אל התמיכה של Campaign Manager כדי להגדיר קבצים של Campaign Manager DTv2.
- אם אין לכם חוזה עם Campaign Manager, יכול להיות שלסוכנות או למפיץ המשנה שלכם ב-Campaign Manager יש גישה לקבצים של Campaign Manager DTv2. כדי לקבל גישה לקבצים האלה, צריך לפנות לסוכנות או למפיץ.
אחרי שתשלימו את השלב הזה, תקבלו שם של קטגוריה ב-Cloud Storage, כמו בדוגמה הבאה:
dcdt_-dcm_account123456אם אתם רוצים להגדיר התראות על הפעלת העברה ב-Pub/Sub, אתם צריכים הרשאות
pubsub.topics.setIamPolicy. מידע נוסף זמין במאמר בנושא התראות על הפעלת שירות העברת נתונים ל-BigQuery.
ההרשאות הנדרשות
ודאו שהענקתם את ההרשאות הבאות.
התפקידים הנדרשים ב-BigQuery
כדי לקבל את ההרשאות שנדרשות ליצירת העברת נתונים באמצעות שירות העברת נתונים ל-BigQuery, צריך לבקש מהאדמין להקצות לכם את תפקיד BigQuery Admin (roles/bigquery.admin) ב-IAM בפרויקט.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה כולל את ההרשאות שנדרשות ליצירת העברת נתונים בשירות העברת נתונים ל-BigQuery. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור העברת נתונים באמצעות שירות העברת הנתונים ל-BigQuery, נדרשות ההרשאות הבאות:
-
הרשאות של שירות העברת נתונים ל-BigQuery:
-
bigquery.transfers.update -
bigquery.transfers.get
-
-
הרשאות ב-BigQuery:
-
bigquery.datasets.get -
bigquery.datasets.getIamPolicy -
bigquery.datasets.update -
bigquery.datasets.setIamPolicy -
bigquery.jobs.create
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
מידע נוסף מופיע במאמר בנושא מתן גישה ל-bigquery.admin.
התפקידים הנדרשים ב-Campaign Manager
נותנים הרשאת קריאה לקבצים של Campaign Manager DTv2 שמאוחסנים ב-Cloud Storage. הגישה מנוהלת על ידי הישות שממנה קיבלתם את הקטגוריה של Cloud Storage.
הגדרת העברה ב-Campaign Manager
כדי להגדיר העברת נתונים מ-Campaign Manager, צריך:
קטגוריה של Cloud Storage: ה-URI של הקטגוריה של Cloud Storage עבור קבצי Campaign Manager DTV2, כפי שמתואר במאמר לפני שמתחילים. שם הקטגוריה צריך להיראות כך:
dcdt_-dcm_account123456מזהה ב-Campaign Manager: מזהה הרשת, המפרסם או Floodlight ב-Campaign Manager. מזהה הרשת הוא ההורה בהיררכיה.
איך מוצאים את המזהה ב-Campaign Manager
כדי לאחזר את מזהה Campaign Manager, אפשר להשתמש במסוף Cloud Storage כדי לבדוק את הקבצים בדלי Cloud Storage של העברת הנתונים ב-Campaign Manager. המזהה של Campaign Manager משמש להתאמת קבצים בקטגוריה של Cloud Storage שצוינה. המזהה מוטמע בשם הקובץ, ולא בשם הקטגוריה של Cloud Storage.
לדוגמה:
- בקובץ בשם
dcm_account123456_activity_*, המזהה הוא 123456. - בקובץ בשם
dcm_floodlight7890_activity_*, המזהה הוא 7890. - בקובץ בשם
dcm_advertiser567_activity_*, המזהה הוא 567.
איך מוצאים את הקידומת של שם הקובץ
במקרים נדירים, יכול להיות שלקבצים בקטגוריה של Cloud Storage יש שמות קבצים מותאמים אישית ולא סטנדרטיים שהוגדרו בשבילכם על ידי צוות השירותים של Google Marketing Platform.
לדוגמה:
- בקובץ בשם
dcm_account123456custom_activity_*, הקידומת היא dcm_account123456custom – כל מה שלפני_activity.
אם אתם צריכים עזרה, אתם יכולים לפנות אל התמיכה של Campaign Manager.
יצירת העברת נתונים ל-Campaign Manager
המסוף
עוברים לדף 'העברות נתונים' במסוף Google Cloud .
לוחצים על Create transfer (יצירת העברה).
בדף Create Transfer:
בקטע Source type (סוג המקור), בשדה Source (מקור), בוחרים באפשרות Campaign Manager.
בקטע שם הגדרת ההעברה, בשדה שם מוצג, מזינים שם להעברת הנתונים, למשל
My Transfer. שם ההעברה יכול להיות כל ערך שיעזור לכם לזהות את ההעברה אם תצטרכו לשנות אותה בהמשך.
בקטע אפשרויות תזמון, משאירים את ערך ברירת המחדל (התחלה מיידית) בשדה תזמון או לוחצים על התחלה בשעה מוגדרת.
- בקטע חזרה, בוחרים את התדירות שבה רוצים להפעיל את ההעברה. אם בוחרים באפשרות אחרת מלבד יומי, מוצגות אפשרויות נוספות. לדוגמה, אם בוחרים באפשרות מדי שבוע, מופיעה אפשרות לבחירת היום בשבוע.
- בשדה תאריך התחלה ושעת הפעלה, מזינים את התאריך והשעה שבהם רוצים להתחיל את העברת הנתונים. אם בוחרים באפשרות Start now (אני רוצה להתחיל), האפשרות הזו מושבתת.
בקטע הגדרות יעד, בשדה מערך נתונים של היעד, בוחרים את מערך הנתונים שיצרתם לאחסון הנתונים.
בקטע פרטי מקור הנתונים:
- בשדה Cloud Storage bucket (קטגוריה של Cloud Storage), מזינים את השם של הקטגוריה של Cloud Storage שבה מאוחסנים הקבצים של העברת נתונים V2.0 או מחפשים אותה. כשמזינים את שם הקטגוריה, לא כוללים את
gs://. - בשדה מזהה DoubleClick, מזינים את המזהה המתאים ב-Campaign Manager.
- (אופציונלי) אם הקבצים שלכם כוללים שמות סטנדרטיים כמו בדוגמאות האלה, משאירים את השדה File name prefix (קידומת של שם הקובץ) ריק. מציינים תחילית של שם קובץ אם לקבצים בקטגוריה של Cloud Storage יש שמות קבצים מותאמים אישית.
- בשדה Cloud Storage bucket (קטגוריה של Cloud Storage), מזינים את השם של הקטגוריה של Cloud Storage שבה מאוחסנים הקבצים של העברת נתונים V2.0 או מחפשים אותה. כשמזינים את שם הקטגוריה, לא כוללים את
(אופציונלי) בקטע אפשרויות להתראות:
לוחצים על Save.
BQ
מזינים את הפקודה bq mk ומספקים את האפשרות ליצירת העברה –
--transfer_config. נדרשים גם הדגלים הבאים:
--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
כאשר:
- project_id הוא מזהה הפרויקט.
- dataset הוא מערך הנתונים של היעד להגדרת העברת הנתונים.
- name הוא השם המוצג של הגדרת העברת הנתונים. שם ההעברה יכול להיות כל ערך שיאפשר לכם לזהות את ההעברה אם תצטרכו לשנות אותה בהמשך.
- parameters מכיל את הפרמטרים של הגדרת העברת הנתונים שנוצרה בפורמט JSON. לדוגמה:
--params='{"param":"param_value"}'. ב-Campaign Manager, צריך לספק את הפרמטריםbucketו-network_id. bucketהיא קטגוריית Cloud Storage שמכילה את קובצי DTv2 של Campaign Manager. network_idהוא מזהה הרשת, מזהה ה-Floodlight או מזהה המפרסם. - data_source הוא מקור הנתונים –
dcm_dt(Campaign Manager).
אפשר גם להשתמש בדגל --project_id כדי לציין פרויקט מסוים. אם לא מציינים את --project_id, נעשה שימוש בפרויקט שמוגדר כברירת מחדל.
לדוגמה, הפקודה הבאה יוצרת העברת נתונים של Campaign Manager בשם My Transfer באמצעות מזהה Campaign Manager 123456, קטגוריית Cloud Storage dcdt_-dcm_account123456 ומערך נתונים של יעד mydataset. הפרמטר file_name_prefix הוא אופציונלי ומשמש רק לשמות קבצים מותאמים אישית נדירים.
העברת הנתונים נוצרת בפרויקט ברירת המחדל:
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
אחרי הרצת הפקודה, תקבלו הודעה כמו זו:
[URL omitted] Please copy and paste the above URL into your web browser and
follow the instructions to retrieve an authentication code.
פועלים לפי ההוראות ומדביקים את קוד האימות בשורת הפקודה.
API
משתמשים בשיטה projects.locations.transferConfigs.create ומספקים מופע של המשאב TransferConfig.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
פתרון בעיות בהגדרת העברה ב-Campaign Manager
אם נתקלתם בבעיות בהגדרת העברת הנתונים, כדאי לעיין במאמר פתרון בעיות בהגדרות העברה בקטע בעיות בהעברה מ-Campaign Manager.
שאילתות על הנתונים
כשמעבירים את הנתונים ל-BigQuery, הם נכתבים בטבלאות עם חלוקה למחיצות בזמן ההטמעה. מידע נוסף זמין במאמר מבוא לטבלאות עם מחיצות.
אם אתם שולחים שאילתות ישירות לטבלאות במקום להשתמש בתצוגות שנוצרו אוטומטית, אתם צריכים להשתמש בעמודה הווירטואלית _PARTITIONTIME בשאילתה. מידע נוסף זמין במאמר בנושא שליחת שאילתות לטבלאות מחולקות.
שאילתות לדוגמה ב-Campaign Manager
אפשר להשתמש בשאילתות לדוגמה הבאות ב-Campaign Manager כדי לנתח את הנתונים שהועברו. אפשר גם להשתמש בשאילתות בכלי להמחשה חזותית כמו Looker Studio. השאילתות האלה נועדו לעזור לכם להתחיל לשלוח שאילתות לגבי נתוני Campaign Manager באמצעות BigQuery. אם יש לכם שאלות נוספות לגבי הפעולות שאפשר לבצע באמצעות הדוחות האלה, פנו לנציג הטכני שלכם ב-Campaign Manager.
בכל אחת מהשאילתות הבאות, מחליפים את המשתנים כמו dataset בערכים שלכם.
קמפיינים אחרונים
שאילתת ה-SQL לדוגמה הבאה מאחזרת את הקמפיינים האחרונים.
SELECT Campaign, Campaign_ID FROM `dataset.match_table_campaigns_campaign_manager_id` WHERE _DATA_DATE = _LATEST_DATE
חשיפות ומשתמשים ייחודיים לפי קמפיין
שאילתת ה-SQL לדוגמה הבאה מנתחת את מספר החשיפות והמשתמשים הייחודיים לפי קמפיין ב-30 הימים האחרונים.
# 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
הקמפיינים האחרונים, מסודרים לפי קמפיין ותאריך
שאילתת ה-SQL לדוגמה הבאה מנתחת את הקמפיינים האחרונים ב-30 הימים האחרונים, לפי סדר הקמפיין והתאריך.
# 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
מספר החשיפות ומספר המשתמשים הייחודיים לפי קמפיין בטווח תאריכים
שאילתת ה-SQL לדוגמה הבאה מנתחת את מספר החשיפות והמשתמשים הייחודיים לפי קמפיין בין התאריכים start_date ל-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
חשיפות, קליקים, פעילויות ומשתמשים ייחודיים לפי קמפיין
שאילתת ה-SQL לדוגמה הבאה מנתחת את מספר החשיפות, הקליקים, הפעילויות והמשתמשים הייחודיים לפי קמפיין ב-30 הימים האחרונים. בשאילתה הזו, מחליפים את המשתנים כמו campaign_list בערכים שלכם. לדוגמה, מחליפים את campaign_list ברשימה של כל הקמפיינים הרלוונטיים ב-Campaign Manager, שמופרדים באמצעות פסיקים, במסגרת ההיקף של השאילתה.
# 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
פעילות בקמפיין
שאילתת ה-SQL לדוגמה הבאה מנתחת את פעילות הקמפיין ב-30 הימים האחרונים. בשאילתה הזו, מחליפים את המשתנים כמו campaign_list בערכים שלכם. לדוגמה, מחליפים את campaign_list ברשימה של כל הקמפיינים הרלוונטיים ב-Campaign Manager, שמופרדים באמצעות פסיקים, במסגרת ההיקף של השאילתה.
# 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