合并重复行并设置值

Posted

技术标签:

【中文标题】合并重复行并设置值【英文标题】:Merge duplicate rows and set values 【发布时间】:2018-09-05 09:20:15 【问题描述】:

我对在谷歌表格中编写脚本很陌生,但我在这个论坛上搜索并找不到答案'。

通过谷歌广告脚本开发人员的脚本,我成功地创建了所有搜索词的导出,以激活我的谷歌广告。这些关键字正在与我帐户中当前的关键字进行比较。通过这种方式,我可以为我的帐户找到缺失的关键字,以及效果不佳的关键字。

此脚本将关键字输出到谷歌表格文档,但是如果关键字出现在多个广告系列和/或广告组中,则会为每个广告系列/广告组创建单独的一行关键字。

但是我真的很想将这些值合并到同一行,这样每个关键字只有一行,它们的唯一值合并为一个值。 This is the current output of script in google sheets

and this is how i would like to have the output

我真的不知道我将如何做到这一点,有人可以帮我解决这个问题吗?将不胜感激!

下面添加了我正在运行以获取导出的代码。

// Add your spreadsheet here
var SPREADSHEET_URL = 'Google sheets url';

// This is quereis minmum number of impressions.
var Impressions_Threshold = 50;

// If the CTR is below the threshold, it will be labeled as "Not excluded and low performing"
var CTR_Threshold = 1;

// If the number of conversions is above the threshold and the query is not added, it will be labeled as "Not added and has conversions"
var Conversions_Threshold = 0;

// Add your email here
var Notify_Me = "email"

function main() 

    var sheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL).getActiveSheet();
    var columns = [
        'CustomerDescriptiveName',
        'ExternalCustomerId',
        'Query',
        'CampaignName',
        'AdGroupName',
        'Impressions',
        'Clicks',
        'Cost',
        'Ctr',
        'Conversions'
    ];

    sheet.clearContents();
    sheet.appendRow(columns);
    sheet.getRange("K1").setValue("Added Or Not");

    // Get all the keywords in all the acccounts
    var allKeywords = [];
    var report = AdWordsApp.report(
        "SELECT AdGroupId, Criteria " +
        "FROM KEYWORDS_PERFORMANCE_REPORT " +
        "WHERE KeywordMatchType = EXACT " +
        "DURING TODAY");
    var rows = report.rows();
    while (rows.hasNext()) 
        var row = rows.next();
        var KeywordsLower = row['Criteria'].toLowerCase();
        allKeywords.push(KeywordsLower);
    

    // Get all the search queries in all the accounts
    var positiveKeywords = [];
    var columnsStr = columns.join(',') + " ";

    var SQRreport = AdWordsApp.report(
        'SELECT ' + columnsStr +
        ' FROM SEARCH_QUERY_PERFORMANCE_REPORT ' +
        ' WHERE ' +
        ' Impressions > ' + Impressions_Threshold +
        ' DURING 20120215,20180904'
    );

    var rows = SQRreport.rows();
    while (rows.hasNext()) 
        var row = rows.next();
        positiveKeywords.push(row['Query']);

        for (var i = 0; i < positiveKeywords.length; i++) 
            if ((allKeywords.indexOf(positiveKeywords[i]) === -1) && (row['Conversions'] > Conversions_Threshold)) 
                row.addedOrNot = 'Not Added and has Conversions';
             else if ((allKeywords.indexOf(positiveKeywords[i]) === -1) && (parseFloat(row['Ctr']) < CTR_Threshold)) 
                row.addedOrNot = 'Not excluded and low performing';

             else if (allKeywords.indexOf(positiveKeywords[i]) === -1) 
                row.addedOrNot = 'Not Added';
             else 
                row.addedOrNot = 'Added'
            
        
        sheet.appendRow([row['CustomerDescriptiveName'], row['ExternalCustomerId'], row['Query'], row['CampaignName'], row['AdGroupName'], row['Impressions'], row['Clicks'], row['Cost'], row['Ctr'], row['Conversions'], row['addedOrNot']]);
    

    MailApp.sendEmail(Notify_Me,
        'SQR Report',
        'Your SQR report for this month is ready, please visit ' + SPREADSHEET_URL + ' Thanks');


【问题讨论】:

【参考方案1】:

可以为此编写脚本,但从长远来看,最好让导出保持原样,而是让第二张工作表按您的意愿显示数据。我说这是因为细粒度的行数据可能更适合不同的分析。

在第二张表中,您可以使用 Google 电子表格公式 Query() 并通过关键字获得该组结果。如果您的演示文稿中需要所有相同的列,您将最清楚。

QUERY()

如果您了解任何类似 SQL 的数据库,则应该熟悉查询结构。如果不是,那么它非常简单,但您可以在此处阅读更多信息:

Query Language Reference

【讨论】:

嗨 Jonathon,我不知道查询函数可以对值进行分组,但是如何对多个值进行分组呢?工作表正在动态填充。从我所看到的情况来看,您必须告诉谷歌表格它必须寻找哪些值来对它们进行分组。由于工作表正在填充超过 30000 行,因此无法手动完成 哦,我知道了,谢谢!这确实更容易。非常感谢! 很乐意提供帮助 - 如果您接受这是正确答案,也很高兴。 ? 嗨 Jonathon(或其他任何人),我几乎让一切都按原样工作。只有一件事是我不能随时使用导出的数据。我必须通过几个公式将“Cost”、“CTR”和“Conversions”列转换为值才能完全工作。是否可以更改我在此处发布的脚本,以便将成本和转换列自动转换为值(用逗号代替点,Gsheets 将其视为值)并将点击率作为百分比?

以上是关于合并重复行并设置值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据一列是不是具有特定值来查找重复行并删除输出?

如何在bash中重复行并粘贴不同的列?

pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行并设置keep参数保留重复行中的最后一个数据行

按给定列表的顺序选择重复的熊猫数据框行并保留原始索引

在文件中查找重复行并计算每行重复了多少次?

如何删除唯一行并保持重复? SQL