Google Sheets按PIN、Reason分组求和及时间范围筛选需求
Google Sheets 按PIN+Reason汇总并支持时间筛选的实现方案
核心方案:使用QUERY函数(适配6万行大数据量)
假设你的数据列对应关系为:
- A列:PIN
- B列:Reason
- C列:Net Adj
- D列:Cost Net
- E列:日期(用于时间筛选)
先设置两个单元格作为时间筛选入口(比如G1填开始日期,H1填结束日期),然后用以下公式生成带筛选的汇总表:
=QUERY(A2:E, "SELECT A, B, SUM(C), SUM(D) WHERE E >= date '"&TEXT(G1,"yyyy-mm-dd")&"' AND E <= date '"&TEXT(H1,"yyyy-mm-dd")&"' GROUP BY A, B LABEL SUM(C)'Net Adj 汇总', SUM(D)'Cost Net 汇总'", 1)
公式拆解:
SELECT A, B, SUM(C), SUM(D):指定要提取的维度(PIN、Reason)和需要汇总的数值列(Net Adj、Cost Net)WHERE E >= date ... AND E <= date ...:通过日期列筛选指定时间范围,TEXT(G1,"yyyy-mm-dd")是为了把单元格日期转换成QUERY函数识别的标准格式GROUP BY A, B:按PIN和Reason的组合进行分组汇总LABEL ...:给汇总后的数值列设置易读的表头名称- 最后参数
1表示原始数据的第一行是表头,QUERY会自动识别
补充场景:确保包含所有唯一PIN(即使无对应数据)
如果你已经通过=UNIQUE(A2:A)在F列生成了唯一PIN列表,想要确保所有PIN都出现在汇总表中(哪怕该PIN在筛选时间内没有数据),可以用以下数组公式实现左连接:
=ARRAYFORMULA( LET( unique_pins, F2:F, unique_reasons, UNIQUE(B2:B), query_result, QUERY(A2:E, "SELECT A&B, B, SUM(C), SUM(D) WHERE E >= date '"&TEXT(G1,"yyyy-mm-dd")&"' AND E <= date '"&TEXT(H1,"yyyy-mm-dd")&"' GROUP BY A, B", 0), combined_keys, unique_pins&"|"&TRANSPOSE(unique_reasons), lookup_result, IFNA(VLOOKUP(combined_keys, {INDEX(query_result,,1), query_result}, {2,3,4}, FALSE)), HSTACK(unique_pins, TRANSPOSE(unique_reasons), IFNA(lookup_result, 0)) ) )
这个公式会生成所有PIN+Reason的组合,无数据的汇总列显示0。
为什么不用SUMPRODUCT/INDEX+MATCH?
6万行数据量下,SUMPRODUCT会因重复计算导致性能卡顿,INDEX+MATCH很难实现多维度分组汇总,而QUERY是Google Sheets专门为大数据量聚合设计的函数,效率和易用性都更优。
内容的提问来源于stack exchange,提问作者Owen Clinch
相关产品推荐
相关产品推荐

