【n8n教程】:Summarize 节点,掌握数据聚合的魔法武器

在数据处理的世界中,你是否曾经遇到过这样的问题:需要统计销售员的总业绩?想要计算每个地区的总收入?或者需要汇总一堆散乱的数据?这些工作在 Excel 中通常需要使用数据透视表来完成,但在 n8n 中,我们有一个强大的工具来解决这一切——Summarize 节点

Summarize 节点就像 Excel 中的数据透视表功能,它能够将多条数据进行聚合、分组和统计。无论你是初学者还是有一定经验的用户,这篇教程都将帮助你快速掌握这个强大的数据转换工具。


🎯 什么是 Summarize 节点?

Summarize 节点 是 n8n 中的一个数据转换工具,用于对输入数据进行聚合操作,类似于 Excel 的数据透视表或 SQL 中的 GROUP BY 语句。

核心功能:

实际应用场景:

场景示例
销售分析按销售员统计总业绩
地区统计按地区统计总销售额
数据清理计算数据中的唯一值个数
数据整理合并相同类别的项目
报表生成自动生成周期性数据报表

🔧 Summarize 节点的关键参数

1. 字段聚合方法 (Fields to Summarize)

这是 Summarize 节点的核心,决定了如何对数据进行计算。n8n 提供了 8 种聚合方式:

📊 常用聚合方法详解:

① 计数 (Count)

② 求和 (Sum)

③ 平均值 (Average)

④ 最大值 (Max) / 最小值 (Min)

⑤ 连接 (Concatenate)

⑥ 追加 (Append)

⑦ 计数唯一值 (Count Unique)


2. 分组字段 (Fields to Split By)

用于定义如何对数据进行分组,类似于 Excel 数据透视表中的"行"字段或 SQL 的 GROUP BY 子句。

重要特性:

应用示例:

假设你有这样的数据:


    
    
    
  { 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 }

3. 节点选项 (Node Options)

🔄 输出格式 (Output Format)

这个选项决定了最终输出数据的结构方式:

选项 1:每个分组单独成一项 (Each Split in a Separate Item)

选项 2:所有分组在一项中 (All Splits in a Single Item)

⚠️ 其他关键选项:

选项说明默认值
继续(若字段未找到)字段不存在时是否继续执行关闭
禁用点号记法是否禁用嵌套字段访问(parent.child)关闭
忽略不含分组字段的项跳过未包含分组字段的数据项开启

📸 节点界面详解

Summarize 节点在 n8n 工作流编辑器中的配置界面包含:

  1. 1. 上方:字段聚合区域 - 添加和配置你要聚合的字段
  2. 2. 中间:分组字段区域 - 定义数据分组的依据
  3. 3. 下方:节点选项 - 调整输出格式和错误处理

💡 快速入门示例

示例 1:简单计数

场景:统计有多少条订单记录

输入数据


    
    
    
  [
  {
 "order_id": 1, "customer": "Alice" },
  {
 "order_id": 2, "customer": "Bob" },
  {
 "order_id": 3, "customer": "Alice" }
]

Summarize 配置

输出结果


    
    
    
  [
  {
 "count_order_id": 3 }
]

示例 2:按分类分组统计

场景:按客户统计他们的订单总数

输入数据


    
    
    
  [
  {
 "customer": "Alice", "amount": 100 },
  {
 "customer": "Alice", "amount": 200 },
  {
 "customer": "Bob", "amount": 150 }
]

Summarize 配置

输出结果


    
    
    
  [
  {
 "customer": "Alice", "sum_amount": 300 },
  {
 "customer": "Bob", "sum_amount": 150 }
]

示例 3:多个聚合操作

场景:按区域统计销售数据(计数、求和、求平均)

输入数据


    
    
    
  [
  {
 "region": "North", "sales": 5000 },
  {
 "region": "North", "sales": 7000 },
  {
 "region": "South", "sales": 4000 },
  {
 "region": "South", "sales": 6000 }
]

Summarize 配置

输出结果


    
    
    
  [
  {
 "region": "North", "count_sales": 2, "sum_sales": 12000, "average_sales": 6000 },
  {
 "region": "South", "count_sales": 2, "sum_sales": 10000, "average_sales": 5000 }
]

示例 4:连接文本值

场景:将同一类别下的所有标签合并为一行

输入数据


    
    
    
  [
  {
 "product": "Laptop", "tag": "Electronics" },
  {
 "product": "Laptop", "tag": "Premium" },
  {
 "product": "Mouse", "tag": "Electronics" },
  {
 "product": "Mouse", "tag": "Budget" }
]

Summarize 配置

输出结果


    
    
    
  [
  {
 "product": "Laptop", "concatenate_tag": "Electronics, Premium" },
  {
 "product": "Mouse", "concatenate_tag": "Electronics, Budget" }
]

🚀 实战工作流案例:销售团队业绩分析

现在让我们构建一个完整的实际应用工作流,展示如何使用 Summarize 节点来分析销售团队的业绩数据。

工作流场景

一个销售团队有多名销售员,每月完成多笔交易。我们需要:

  1. 1. ✅ 统计每个销售员的交易总数
  2. 2. ✅ 计算每个销售员的总销售额
  3. 3. ✅ 计算每个销售员的平均交易金额
  4. 4. ✅ 找出最高和最低交易额

完整工作流代码

将以下代码复制到 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
          }

        ]

      ]

    }

  }

}

工作流执行步骤

  1. 1. 第一步:启动工作流 → 从"Start"节点开始
  2. 2. 第二步:生成销售数据 → "生成销售数据"节点创建样本数据,包含:
    • • 销售员名字(Alice、Bob、Charlie)
    • • 交易金额
    • • 交易日期
  3. 3. 第三步:数据聚合 → "销售业绩汇总"节点执行以下操作:
    • • 按销售员名字分组
    • • 对每个销售员统计:交易总数、总销售额、平均交易额、最高额、最低额
  4. 4. 第四步:格式化输出 → "格式化输出"节点美化展示格式

预期输出结果


    
    
    
  销售员: 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

⚡ 常见问题与解决方案

❓ 问题 1:Summarize 节点找不到我指定的字段

原因:字段名称拼写错误或字段不存在

解决方案


❓ 问题 2:聚合结果为空或不正确

原因:输入数据结构不符合预期或聚合逻辑配置错误

解决方案


❓ 问题 3:多字段分组时结果不对

原因:分组字段顺序或配置错误

解决方案


❓ 问题 4:如何处理包含空值或缺失值的数据?

原因:数据不完整或包含 null 值

解决方案


🎓 进阶技巧

💎 技巧 1:结合 SplitOut 处理嵌套数据


    
    
    
  数据源 → SplitOut 节点 → Summarize 节点 → 最终输出

SplitOut 节点先将数组展开成多条数据项,然后 Summarize 进行聚合。


💎 技巧 2:链式聚合操作

在复杂场景中,你可以使用多个 Summarize 节点进行多层次的聚合:


    
    
    
  原始数据 → 第一层 Summarize(按部门分组)
         → 第二层 Summarize(按公司分组)
         → 最终报表

💎 技巧 3:与其他节点结合

结合节点应用场景
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#