简化Google Sheets的QUERY与FLATTEN公式,实现多平台Campaign数据汇总
Google Sheets Campaign数据汇总公式优化方案
需求说明
制作汇总表格,统计不同Campaign的标题、nsu、impression和clicks数据:
- 每个平台对应4列数据(标题、nsu、impression、clicks),共10余组这类列
- 左侧生成汇总表:对每个Campaign的所有对应数据求和,跨列存在的标题(如“Mainstream”)需汇总所有平台的数据,唯一标题也需纳入统计
原公式痛点
原公式需手动枚举所有对应列,新增平台列时要逐个添加,操作繁琐且易出错:
=QUERY({ FLATTEN({E2:E, I2:I, M2:M, Q2:Q, U2:U, Y2:Y, AC2:AC, AG2:AG, AK2:AK, AO2:AO, AS:AS, AW:AW, BA:BA}), FLATTEN({F2:F, J2:J, N2:N, R2:R, V2:V, Z2:Z, AD2:AD, AH2:AH, AL2:AL, AP2:AP, AT2:AT, AX2:AX, BB2:BB}), FLATTEN({G2:G, K2:K, O2:O, S2:S, W2:W, AA2:AA, AE2:AE, AI2:AI, AM2:AM, AQ2:AQ, AU2:AU, AY2:AY, BC2:BC}), FLATTEN({H2:H, L2:L, P2:P, T2:T, X2:X, AB2:AB, AF2:AF, AJ2:AJ, AN2:AN, AR2:AR, AV2:AV, AZ2:AZ, BD2:BD}) }, "SELECT Col1, SUM(Col2), SUM(Col3), SUM(Col4) WHERE Col1 IS NOT NULL GROUP BY Col1", 1)
优化方案
利用SEQUENCE自动生成列索引,替代手动枚举,公式扩展性更强:
=QUERY( BYCOL(SEQUENCE(4), LAMBDA(col, FLATTEN(INDEX(E2:BD, , SEQUENCE(1, ROUNDUP((COLUMNS(E2:BD))/4), col, 4))) )), "SELECT Col1, SUM(Col2), SUM(Col3), SUM(Col4) WHERE Col1 IS NOT NULL GROUP BY Col1 LABEL SUM(Col2)'nsu', SUM(Col3)'impression', SUM(Col4)'clicks'", 1 )
优化说明
- 自动识别列组:
SEQUENCE(1, ROUNDUP((COLUMNS(E2:BD))/4), col, 4)会根据总列数自动计算有多少组4列数据,无需手动添加列引用 - 动态提取列:
INDEX(E2:BD, , ...)按组提取对应列(第1列是标题,第2列nsu,以此类推) - FLATTEN合并数据:将多组列的数据合并为单列,供QUERY统计
- 自定义表头:通过
LABEL参数给汇总列添加明确的名称,可读性更强
若后续新增平台列(仍保持4列一组的结构),只需调整公式中的E2:BD范围为新的总列范围即可,无需修改其他部分。
内容的提问来源于stack exchange,提问作者Nicole Marie
相关产品推荐
相关产品推荐

