在数据处理的世界中,你是否曾经遇到过这样的问题:需要统计销售员的总业绩?想要计算每个地区的总收入?或者需要汇总一堆散乱的数据?这些工作在 Excel 中通常需要使用数据透视表来完成,但在 n8n 中,我们有一个强大的工具来解决这一切——Summarize 节点。
Summarize 节点就像 Excel 中的数据透视表功能,它能够将多条数据进行聚合、分组和统计。无论你是初学者还是有一定经验的用户,这篇教程都将帮助你快速掌握这个强大的数据转换工具。
Summarize 节点 是 n8n 中的一个数据转换工具,用于对输入数据进行聚合操作,类似于 Excel 的数据透视表或 SQL 中的 GROUP BY 语句。
| 场景 | 示例 |
|---|---|
| 销售分析 | 按销售员统计总业绩 |
| 地区统计 | 按地区统计总销售额 |
| 数据清理 | 计算数据中的唯一值个数 |
| 数据整理 | 合并相同类别的项目 |
| 报表生成 | 自动生成周期性数据报表 |
这是 Summarize 节点的核心,决定了如何对数据进行计算。n8n 提供了 8 种聚合方式:
① 计数 (Count)
② 求和 (Sum)
③ 平均值 (Average)
④ 最大值 (Max) / 最小值 (Min)
⑤ 连接 (Concatenate)
Include Empty Values(是否包含空值)⑥ 追加 (Append)
Include Empty Values(是否包含空值)⑦ 计数唯一值 (Count Unique)
用于定义如何对数据进行分组,类似于 Excel 数据透视表中的"行"字段或 SQL 的 GROUP BY 子句。
重要特性:
Sales Rep 或 Sales Rep, Region应用示例:
假设你有这样的数据:
{ name: "Alice", department: "Sales", bonus: 1000 }
{ name: "Alice", department: "Sales", bonus: 1500 }
{ name: "Bob", department: "Marketing", bonus: 800 }如果按 department 分组并对 bonus 求和,你会得到:
{ department: "Sales", sum_bonus: 2500 }
{ department: "Marketing", sum_bonus: 800 }这个选项决定了最终输出数据的结构方式:
选项 1:每个分组单独成一项 (Each Split in a Separate Item)
选项 2:所有分组在一项中 (All Splits in a Single Item)
| 选项 | 说明 | 默认值 |
|---|---|---|
| 继续(若字段未找到) | 字段不存在时是否继续执行 | 关闭 |
| 禁用点号记法 | 是否禁用嵌套字段访问(parent.child) | 关闭 |
| 忽略不含分组字段的项 | 跳过未包含分组字段的数据项 | 开启 |
Summarize 节点在 n8n 工作流编辑器中的配置界面包含:
场景:统计有多少条订单记录
输入数据:
[
{ "order_id": 1, "customer": "Alice" },
{ "order_id": 2, "customer": "Bob" },
{ "order_id": 3, "customer": "Alice" }
]Summarize 配置:
Countorder_id输出结果:
[
{ "count_order_id": 3 }
]场景:按客户统计他们的订单总数
输入数据:
[
{ "customer": "Alice", "amount": 100 },
{ "customer": "Alice", "amount": 200 },
{ "customer": "Bob", "amount": 150 }
]Summarize 配置:
Sumamountcustomer输出结果:
[
{ "customer": "Alice", "sum_amount": 300 },
{ "customer": "Bob", "sum_amount": 150 }
]场景:按区域统计销售数据(计数、求和、求平均)
输入数据:
[
{ "region": "North", "sales": 5000 },
{ "region": "North", "sales": 7000 },
{ "region": "South", "sales": 4000 },
{ "region": "South", "sales": 6000 }
]Summarize 配置:
Count 字段 salesSum 字段 salesAverage 字段 salesregion输出结果:
[
{ "region": "North", "count_sales": 2, "sum_sales": 12000, "average_sales": 6000 },
{ "region": "South", "count_sales": 2, "sum_sales": 10000, "average_sales": 5000 }
]场景:将同一类别下的所有标签合并为一行
输入数据:
[
{ "product": "Laptop", "tag": "Electronics" },
{ "product": "Laptop", "tag": "Premium" },
{ "product": "Mouse", "tag": "Electronics" },
{ "product": "Mouse", "tag": "Budget" }
]Summarize 配置:
Concatenatetag, (逗号+空格)product输出结果:
[
{ "product": "Laptop", "concatenate_tag": "Electronics, Premium" },
{ "product": "Mouse", "concatenate_tag": "Electronics, Budget" }
]现在让我们构建一个完整的实际应用工作流,展示如何使用 Summarize 节点来分析销售团队的业绩数据。
一个销售团队有多名销售员,每月完成多笔交易。我们需要:
将以下代码复制到 n8n 的工作流编辑器中:
{
"nodes": [
{
"parameters": {},
"id": "2a3ff9ba-c72d-4f65-ba8d-85e5c6e2d1a0",
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [
50,
50
]
},
{
"parameters": {
"functionCode": "// 模拟销售数据\nreturn [\n { json: { sales_rep: 'Alice', deal_amount: 5000, deal_date: '2024-01-15' } },\n { json: { sales_rep: 'Alice', deal_amount: 3000, deal_date: '2024-01-20' } },\n { json: { sales_rep: 'Alice', deal_amount: 7000, deal_date: '2024-01-28' } },\n { json: { sales_rep: 'Bob', deal_amount: 4500, deal_date: '2024-01-10' } },\n { json: { sales_rep: 'Bob', deal_amount: 6000, deal_date: '2024-01-22' } },\n { json: { sales_rep: 'Charlie', deal_amount: 8000, deal_date: '2024-01-05' } },\n { json: { sales_rep: 'Charlie', deal_amount: 2000, deal_date: '2024-01-25' } },\n { json: { sales_rep: 'Charlie', deal_amount: 5500, deal_date: '2024-01-29' } }\n];"
},
"id": "7c9e1b3a-4d2e-4f5b-9a1c-2e3f4a5b6c7d",
"name": "生成销售数据",
"type": "n8n-nodes-base.code",
"typeVersion": 1,
"position": [
250,
50
],
"connections": {}
},
{
"parameters": {
"fields": [
{
"aggregation": "count",
"field": "deal_amount"
},
{
"aggregation": "sum",
"field": "deal_amount"
},
{
"aggregation": "average",
"field": "deal_amount"
},
{
"aggregation": "max",
"field": "deal_amount"
},
{
"aggregation": "min",
"field": "deal_amount"
}
],
"splitBy": "sales_rep",
"options": {
"outputFormat": "eachSplitInASeparateItem"
}
},
"id": "9f8e7d6c-5b4a-3f2e-1a9c-8b7a6f5e4d3c",
"name": "销售业绩汇总",
"type": "n8n-nodes-base.summarize",
"typeVersion": 1,
"position": [
500,
50
],
"connections": {}
},
{
"parameters": {
"functionCode": "// 将输出格式优化为更易读的形式\nreturn items.map(item => {\n return {\n json: {\n \"销售员\": item.json.sales_rep,\n \"交易总数\": item.json.count_deal_amount,\n \"总销售额\": `¥${item.json.sum_deal_amount.toFixed(2)}`,\n \"平均交易额\": `¥${item.json.average_deal_amount.toFixed(2)}`,\n \"最高交易额\": `¥${item.json.max_deal_amount}`,\n \"最低交易额\": `¥${item.json.min_deal_amount}`\n }\n };\n});"
},
"id": "3a2b1c0d-9e8f-7a6b-5c4d-3e2f1a0b9c8d",
"name": "格式化输出",
"type": "n8n-nodes-base.code",
"typeVersion": 1,
"position": [
750,
50
],
"connections": {}
}
],
"connections": {
"Start": {
"main": [
[
{
"node": "生成销售数据",
"type": "main",
"index": 0
}
]
]
},
"生成销售数据": {
"main": [
[
{
"node": "销售业绩汇总",
"type": "main",
"index": 0
}
]
]
},
"销售业绩汇总": {
"main": [
[
{
"node": "格式化输出",
"type": "main",
"index": 0
}
]
]
}
}
}销售员: Alice
交易总数: 3
总销售额: ¥15,000.00
平均交易额: ¥5,000.00
最高交易额: ¥7,000
最低交易额: ¥3,000
销售员: Bob
交易总数: 2
总销售额: ¥10,500.00
平均交易额: ¥5,250.00
最高交易额: ¥6,000
最低交易额: ¥4,500
销售员: Charlie
交易总数: 3
总销售额: ¥15,500.00
平均交易额: ¥5,166.67
最高交易额: ¥8,000
最低交易额: ¥2,000原因:字段名称拼写错误或字段不存在
解决方案:
parent.child原因:输入数据结构不符合预期或聚合逻辑配置错误
解决方案:
原因:分组字段顺序或配置错误
解决方案:
field1, field2原因:数据不完整或包含 null 值
解决方案:
数据源 → SplitOut 节点 → Summarize 节点 → 最终输出SplitOut 节点先将数组展开成多条数据项,然后 Summarize 进行聚合。
在复杂场景中,你可以使用多个 Summarize 节点进行多层次的聚合:
原始数据 → 第一层 Summarize(按部门分组)
→ 第二层 Summarize(按公司分组)
→ 最终报表| 结合节点 | 应用场景 |
|---|---|
| HTTP Request | 从 API 获取数据,然后聚合 |
| Database | 从数据库查询后聚合统计 |
| Google Sheets | 从电子表格读取,聚合后写回 |
| If | 条件聚合(满足条件才聚合) |
| Code | 自定义聚合逻辑 |
通过本教程,你已经学会了:
✅ 理解 Summarize 节点的核心概念 - 数据聚合和分组
✅ 掌握 8 种聚合方法 - Count、Sum、Average、Max、Min、Concatenate、Append、Count Unique
✅ 灵活使用分组功能 - 按单个或多个字段分组
✅ 配置输出格式 - 选择合适的数据结构
✅ 实现完整的工作流 - 从数据输入到结果输出
✅ 解决常见问题 - 处理错误和优化性能
Summarize 节点是 n8n 中最强大的数据转换工具之一。熟练掌握它,你将能够构建高效的数据处理工作流,大幅提高自动化的能力!
[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.summarize/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#