AWQL(AdWords 查询语言)寻求多范围查询(各种)
AWQL (AdWords Query Language) Seeking Multiple Range Query (of sorts)
好的,这可能是 "what are you actually asking" 的问题,请耐心等待。通常,我是 .NET 和 SQL 开发人员。我正在使用 AWQL 尝试获取 adwords 脚本来制作量身定制的报告。
简短版本,我需要从不同的日期范围中提取数据,而且我在弄清楚 "compiler" 他们如何处理它或什至可能这样做时遇到了问题。简而言之,我需要将两个月的数据分别编译成一份报告。现在我在想语法错误,但不确定。
极客术语的最终目标是达到“WHERE(IMPRESSIONS_FROM_THIS_MONTH > IMPRESSIONS_FROM_LAST_MONTH) AND (IMPRESSIONS_FROM_LAST_MONTH > MONTH_BEFORE_THAT”的效果。理论上所有输出都相同(不要不在乎它是记录器还是直接到 google 文档。我确实有将其放入电子表格并通过电子邮件将 link) 发送给我的代码,但目前正在努力让它提取数据。并且挣扎我的意思是几天失败哈哈。
"SELECT KeywordText, ConversionValue, Id, QualityScore " +
"FROM KEYWORDS_PERFORMANCE_REPORT " +
"WHERE " +
"Id = " + kw +
" AND CampaignId = " + id +
" AND AdGroupId = " + gName +
" AND Impressions" +
" (DURING 20150101, 20150131) > IMPRESSIONS (DURING 20141201, 20141231)" );
(顺便说一句,像 gName 这样的变量在完整代码中存在,并且在我尝试复合逻辑之前一直在工作)我不确定最好的方法是一次全部查询,还是单独查询并以某种方式拼接结果合并到一份报告中。 AdWords 脚本似乎比我习惯的要严格得多,而且它的一些规则没有得到很好的记录或解释。
有任何与此相关的 link 或代码块吗?在此先感谢您的帮助!
这段代码应该有所帮助。根据您的目的替换所有变量。
var daterange1 ="Specify daterange here";
var dateRange2 ="Specify daterange here";
function main(){
var sheet = getSheet();
var AccountIterator = MccApp.accounts().forDateRange(dateRange).withIds(ACCOUNTS).get();
while(AccountIterator.hasNext()){
var Account = AccountIterator.next();
MccApp.select(Account);
getAccountDetails(sheet);
getAccountDetails2(sheet)
}
}
function getAccountDetails(sheet){
var query = "SELECT Device, CampaignName, ConversionValue, Cost, Conversions " +" FROM CAMPAIGN_PERFORMANCE_REPORT " +"WHERE Impressions > 0 " +" DURING "+dateRange;
Logger.log(query);
var report = AdWordsApp.report(query);
report.exportToSheet(sheet);
}
function getAccountDetails2(sheet){
var query = "SELECT Device, CampaignName, ConversionValue, Cost, Conversions " +" FROM CAMPAIGN_PERFORMANCE_REPORT " +"WHERE Impressions > 0 " +" DURING "+dateRange;
Logger.log(query);
var report = AdWordsApp.report(query);
report.exportToSheet(sheet);
}
function getSheet(){
var spreadsheet = SpreadsheetApp.openByUrl(url);
var sheet=spreadsheet.setActiveSheet(spreadsheet.getSheets()[0]);
return sheet;
}
我不是在优化它,因为你自己做它是一个很好的练习。但这会解决你的问题。
好的,这可能是 "what are you actually asking" 的问题,请耐心等待。通常,我是 .NET 和 SQL 开发人员。我正在使用 AWQL 尝试获取 adwords 脚本来制作量身定制的报告。 简短版本,我需要从不同的日期范围中提取数据,而且我在弄清楚 "compiler" 他们如何处理它或什至可能这样做时遇到了问题。简而言之,我需要将两个月的数据分别编译成一份报告。现在我在想语法错误,但不确定。 极客术语的最终目标是达到“WHERE(IMPRESSIONS_FROM_THIS_MONTH > IMPRESSIONS_FROM_LAST_MONTH) AND (IMPRESSIONS_FROM_LAST_MONTH > MONTH_BEFORE_THAT”的效果。理论上所有输出都相同(不要不在乎它是记录器还是直接到 google 文档。我确实有将其放入电子表格并通过电子邮件将 link) 发送给我的代码,但目前正在努力让它提取数据。并且挣扎我的意思是几天失败哈哈。
"SELECT KeywordText, ConversionValue, Id, QualityScore " +
"FROM KEYWORDS_PERFORMANCE_REPORT " +
"WHERE " +
"Id = " + kw +
" AND CampaignId = " + id +
" AND AdGroupId = " + gName +
" AND Impressions" +
" (DURING 20150101, 20150131) > IMPRESSIONS (DURING 20141201, 20141231)" );
(顺便说一句,像 gName 这样的变量在完整代码中存在,并且在我尝试复合逻辑之前一直在工作)我不确定最好的方法是一次全部查询,还是单独查询并以某种方式拼接结果合并到一份报告中。 AdWords 脚本似乎比我习惯的要严格得多,而且它的一些规则没有得到很好的记录或解释。 有任何与此相关的 link 或代码块吗?在此先感谢您的帮助!
这段代码应该有所帮助。根据您的目的替换所有变量。
var daterange1 ="Specify daterange here";
var dateRange2 ="Specify daterange here";
function main(){
var sheet = getSheet();
var AccountIterator = MccApp.accounts().forDateRange(dateRange).withIds(ACCOUNTS).get();
while(AccountIterator.hasNext()){
var Account = AccountIterator.next();
MccApp.select(Account);
getAccountDetails(sheet);
getAccountDetails2(sheet)
}
}
function getAccountDetails(sheet){
var query = "SELECT Device, CampaignName, ConversionValue, Cost, Conversions " +" FROM CAMPAIGN_PERFORMANCE_REPORT " +"WHERE Impressions > 0 " +" DURING "+dateRange;
Logger.log(query);
var report = AdWordsApp.report(query);
report.exportToSheet(sheet);
}
function getAccountDetails2(sheet){
var query = "SELECT Device, CampaignName, ConversionValue, Cost, Conversions " +" FROM CAMPAIGN_PERFORMANCE_REPORT " +"WHERE Impressions > 0 " +" DURING "+dateRange;
Logger.log(query);
var report = AdWordsApp.report(query);
report.exportToSheet(sheet);
}
function getSheet(){
var spreadsheet = SpreadsheetApp.openByUrl(url);
var sheet=spreadsheet.setActiveSheet(spreadsheet.getSheets()[0]);
return sheet;
}
我不是在优化它,因为你自己做它是一个很好的练习。但这会解决你的问题。