【发布时间】:2020-04-10 17:58:16
【问题描述】:
这几天我在这个问题上遇到了一些困难,我无法弄清楚。
(运行这是 Bigquery)
对于营销客户,我试图获取每个广告客户的展示次数和点击次数。
p_impressions 包含所有展示数据,包括 IDs Campaign_ID、Advertiser_ID p_click 拥有所有的点击数据,包括 IDs Campaign_ID, Advertiser_ID match_table_campaigns 有广告系列数据:Campaign_ID、广告系列名称
(基本上我的简单目标是获取展示次数和点击次数并将其与 Campaign 表相匹配,这样我就可以看到广告系列的名称而不仅仅是 ID。
当我使用 UNION all 对 Impression 和 Click 表运行查询时,仅使用 IDS,所有数字都与我的平台匹配,一切看起来都很好。
但是,当我插入一个 JOIN(我已经尝试了所有这些)以包含广告系列的名称时,展示次数和点击次数的所有指标似乎都在增加,而且我似乎无法再获得正确的数字了。
with combinedDeliveryData AS (
SELECT
FORMAT_DATETIME("%F",DATETIME(TIMESTAMP_MILLIS( CAST(SUBSTR(CAST( Event_Time AS String),0,LENGTH(CAST( Event_Time AS String)) - 3) AS INT64 )),"America/Toronto")) AS Date,
Impression_ID,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID,
FROM
CampaignManager.p_impression
UNION ALL
SELECT
FORMAT_DATETIME("%F",DATETIME(TIMESTAMP_MILLIS( CAST(SUBSTR(CAST( Event_Time AS String),0,LENGTH(CAST( Event_Time AS String)) - 3) AS INT64 )),"America/Toronto")) AS Date,
Impression_ID,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID,
FROM
CampaignManager.p_click)
SELECT cpg.Campaign_ID, cpg.Campaign,data.Date,COUNT(case data.Event_Type when 'VIEW' then 1 else null end) AS Impressions
FROM match_table_campaigns AS cpg
LEFT JOIN combinedDeliveryData AS data ON cpg.Campaign_ID = data.Campaign_ID
WHERE cpg.Advertiser_ID = "4739279"
GROUP BY 3,1,2
任何帮助将不胜感激。我不确定我错过了什么。
请注意,这是没有 JOIN 的情况
SELECT
Impression_ID,
Event_Time,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID
FROM
CampaignManager.p_impression
UNION ALL
SELECT
Impression_ID,
Event_Time,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID
FROM
CampaignManager.p_click)
SELECT FORMAT_DATETIME("%F",DATETIME(TIMESTAMP_MILLIS( CAST(SUBSTR(CAST( clicks.Event_Time AS String),0,LENGTH(CAST( clicks.Event_Time AS String)) - 3) AS INT64 )),"America/Toronto")) AS exposureDate,clicks.Campaign_ID,COUNT(case Event_Type when 'VIEW' then 1 else null end) AS Impressions,COUNT(case Event_Type when 'CLICK' then 1 else null end) AS Clicks
FROM
combinedDeliveryData AS clicks
WHERE clicks.Campaign_ID = "4739279"
GROUP BY 1,2
新问题: 我添加了以下代码,看起来很棒
this_is_deduplicated AS (
SELECT x.*
FROM (
SELECT Campaign_ID, ARRAY_AGG(a LIMIT 1)[OFFSET(0)] x
FROM combinedDeliveryData a
GROUP BY 1
)
)
LEFT JOIN this_is_deduplicated AS data ON cpg.Campaign_ID = data.Campaign_ID
得到我所有的价值观,它们是不准确的。我现在遇到了另一个问题,我必须加入决赛桌,但上面的解决方案不起作用。
新表中的值: 日期 广告系列_ID Activity_ID
我现在需要加入最后一个表,这样对于每个日期,我都会获得 Activity_ID 的 COUNT 作为 Conversiions。
我的决赛桌应该是:
广告商、广告系列、展示次数、点击次数、转化次数(如上)
【问题讨论】:
-
如果加入时数字增加,则表明
match_table_campaigns中存在多个具有相同Campaign_ID的记录。
标签: sql google-bigquery