如何在Google Sheets中实现按项目分组的递归式数据查询?
Google Sheets实现分组项目报表的方法
完全可以实现这种每个项目作为标题、下方展示对应记录的报表格式,用REDUCE结合FILTER就能搞定,以下是具体方案:
假设你的数据范围是A1:D(A列=Item,B列=Date,C列=Cost,D列=Notes,首行为表头),直接在空白单元格输入以下公式:
=REDUCE({"项目","日期","费用","备注"}, SORT(UNIQUE(A2:A)), LAMBDA(acc, item, VSTACK(acc, item, FILTER(B:D, A:A=item), {"","","",""} ) ))
公式说明:
SORT(UNIQUE(A2:A)):提取所有不重复的项目并按顺序排列,去掉SORT()可以保留原数据的项目出现顺序REDUCE:以初始表头为起点,逐个遍历每个项目,把内容堆叠起来VSTACK:将表头、项目标题、对应的数据记录、空行(用于分隔不同项目)依次拼接FILTER(B:D, A:A=item):筛选出当前项目对应的日期、费用、备注记录
进阶美化(可选)
如果需要给项目标题设置加粗、放大字体的格式,可以用RichTextValueBuilder构建富文本:
=REDUCE( RichTextValueBuilder().setText("项目").setFontWeight("bold").build()&{"","日期","费用","备注"}, SORT(UNIQUE(A2:A)), LAMBDA(acc, item, VSTACK(acc, RichTextValueBuilder().setText(item).setFontWeight("bold").setFontSize(14).build(), FILTER(B:D, A:A=item), {"","","",""} ) ) )
注意事项
- 你的数据规模(500+项目,总计1-1.5万条记录)会让公式运行需要几秒时间,属于正常范围
- 如果不需要项目间的空行分隔,删除公式里的
{"","","",""}即可
内容的提问来源于stack exchange,提问作者user22779659
相关产品推荐
相关产品推荐

