AI PLAY玩法更新持续收录
← 回到更新流

2026-10-05 · 原文发布日

采购KPI月度对标:自动算差距并给管理层写分析

采购管理者可用的n8n模板:每月定时从Google Sheets读取状态为Ready的KPI行,在定义表和外部基准表里查到对应目标值,计算差距百分比、绩效状态和严重度,然后把上下文交给Google Gemini生成差距小结、可能原因、改进建议和管理层评语。结果写回Sheets并标记已处理,低于基准的KPI会单独邮件提醒领导,月末再汇总一份HTML对标报告群发。需要先在四张表里维护好KPI定义和基准数据。

原文要点

该免费n8n模板(WeblineIndia发布于n8n模板库)按月定时运行:从Google Sheets拉取状态为Ready的采购KPI行,在KPI_Definitions和External_Benchmarks两张表里查活跃定义与外部基准,计算基准差距百分比、绩效状态和严重度,缺失定义的KPI路由到Review Required。随后把上下文交给Google Gemini生成差距小结、可能原因、改进建议和管理层评语,结果写回Benchmark_Results表并把源行标记Processed;低于基准的KPI用Gmail单独发领导提醒,月末汇总生成HTML对标报告群发。设置项包括near_benchmark_threshold_pct、KPI_Definitions中的warning/critical阈值和active标志,需配置Google Sheets、Gmail、Gemini(PaLM/AI Studio)三组凭据。

这次做成什么

在n8n里搭一条按月运行的采购KPI对标流水线:自动算差距百分比、分级严重度、让Gemini写管理层可读的分析,结果回写表格并按条件发邮件。原模板需在n8n模板页下载导入,本指南给出独立的练习方案,可先用手动触发器和本站合成数据跑通整条逻辑。

准备什么

  • 一个n8n实例(云端或自托管均可),并能导入模板或手动建节点
  • Google账号:能建Google Sheets、开通Gemini(AI Studio)API key、Gmail OAuth2凭据
  • 四张Sheet页:Procurement_KPIs、KPI_Definitions、External_Benchmarks、Benchmark_Results,且KPI行有status列
  • 每个待处理kpi_code在定义表和基准表都有active=true的行

具体怎么做

  1. 建四张表并灌入测试数据

    新建一个Google Sheets文档,建四个分页。Procurement_KPIs列:kpi_code、period、actual_value、status;KPI_Definitions列:kpi_code、kpi_name、unit、direction(higher_is_better或lower_is_better)、warning_pct、critical_pct、active;External_Benchmarks列:kpi_code、benchmark_value、source、active;Benchmark_Results列:kpi_code、period、actual、benchmark、gap_pct、status、severity、ai_summary、created_at。先按下方合成CSV各填3-4行,把KPI行的status设为Ready。

  2. 搭触发与读取

    练习阶段用Manual Trigger代替Monthly Schedule Trigger,跑通后再换回每月1号的定时器。接一个Google Sheets节点,Operation选Read,筛选条件status=Ready,读取Procurement_KPIs。再各接一个Google Sheets读节点,分别把KPI_Definitions和External_Benchmarks整表读入(active=true过滤)。

  3. 匹配定义与基准、算差距

    用Merge节点(按kpi_code内连接)把KPI行、定义、基准三份数据并到一起;连不上定义的走另一个分支,追加到Review Required结果。接一个Code节点计算:gap_pct = (actual - benchmark) / benchmark * 100,若direction为lower_is_better则取反,使正数始终代表好于基准;再按warning_pct/critical_pct阈值分出on_track、warning、critical三档severity。

  4. 接Gemini生成分析

    加一个Google Gemini(PaLM)Chat节点,凭据用AI Studio的API key。系统提示词用下方材料中的完整提示词,用户消息里拼接该KPI的kpi_name、actual、benchmark、gap_pct、severity等字段,要求返回固定JSON四字段:gap_summary、likely_causes、recommended_actions、management_comment。后用JSON解析节点拆字段。

  5. 回写结果并分支发邮件

    用Google Sheets Append节点把结果写入Benchmark_Results,再用Update节点把源KPI行status改为Processed。接If节点:severity不为on_track时走Gmail节点发领导提醒(收件人填leadership_email),主题含kpi_code和gap_pct。所有分支汇合后用汇总节点拼HTML表格,经Gmail发到monthly_report_email作为月末报告。

可直接复制的材料

四张表的合成测试数据(CSV片段)

本站独立编写的合成数据,仅用于练习;实际使用时替换为你的KPI口径与基准来源,基准值不要编造对外引用。

Procurement_KPIs.csv:
kpi_code,period,actual_value,status
COST_SAVINGS,2026-09,4.2,Ready
ON_TIME_DELIVERY,2026-09,88.5,Ready
SUPPLIER_DEFECT,2026-09,3.1,Ready

KPI_Definitions.csv:
kpi_code,kpi_name,unit,direction,warning_pct,critical_pct,active
COST_SAVINGS,采购成本节约率,percent,higher_is_better,5,15,true
ON_TIME_DELIVERY,供应商准时交付率,percent,higher_is_better,3,8,true
SUPPLIER_DEFECT,来料不良率,percent,lower_is_better,10,25,true

External_Benchmarks.csv:
kpi_code,benchmark_value,source,active
COST_SAVINGS,5.0,行业采购基准库2026Q3,true
ON_TIME_DELIVERY,92.0,行业采购基准库2026Q3,true
SUPPLIER_DEFECT,2.5,行业采购基准库2026Q3,true

Gemini分析提示词(本站独立撰写)

本站为练习独立撰写的提示词,与原模板内部提示词无关;模型调用按Gemini API计费,费用以Google官方价格为准。

你是采购绩效管理分析师。根据下面给出的单个KPI对标数据,用简体中文输出严格的JSON,不要输出任何JSON以外的文字。

输出schema(四个键都必须存在):
{"gap_summary":"一句话说明本月实际值与外部基准的差距及方向","likely_causes":["2到3条可能原因,每条不超过40字"],"recommended_actions":["2到3条可执行的改进建议,每条不超过40字"],"management_comment":"一段给管理层看的60字以内评语,直接说明是否需要关注和下一步"}

规则:只能基于输入数据推断,不得编造未提供的具体供应商名、金额或事件;若gap_pct为正表示优于基准,为负表示落后基准;severity为critical时management_comment必须明确请求管理层介入。

Code节点差距计算逻辑(本站示例)

本站独立编写的示例逻辑,字段名需与你Sheet列名对齐;warning_pct与critical_pct统一填正数幅度,代码用shortfall(落后幅度)比较,direction只影响gap_pct正负号。

// n8n Code节点:输入为合并后的KPI+定义+基准行
const rows = $input.all();
const out = [];
for (const { json } of rows) {
  const actual = Number(json.actual_value);
  const bench = Number(json.benchmark_value);
  if (!isFinite(actual) || !isFinite(bench) || bench === 0) {
    out.push({ json: { ...json, route: 'review_required', reason: 'non_numeric_or_zero_benchmark' } });
    continue;
  }
  let gap = ((actual - bench) / bench) * 100;
  if (json.direction === 'lower_is_better') gap = -gap;
  // gap正数=优于基准;shortfall正数=落后基准的幅度,与正数阈值比较
  const shortfall = -gap;
  let severity = 'on_track';
  if (shortfall >= Number(json.critical_pct)) severity = 'critical';
  else if (shortfall >= Number(json.warning_pct)) severity = 'warning';
  out.push({ json: { ...json, gap_pct: Number(gap.toFixed(2)), severity, route: 'ok' } });
}
return out;

输入与输出示例

本站虚构演示,未实际调用Gemini;真实返回文字会因模型和提示词不同而变化。

输入

KPI行:kpi_code=SUPPLIER_DEFECT,period=2026-09,actual_value=3.1,status=Ready;定义:direction=lower_is_better,warning_pct=10,critical_pct=25;基准:benchmark_value=2.5。

对应输出

计算结果:gap=((3.1-2.5)/2.5)*100=24,因direction=lower_is_better取反后gap_pct=-24.00;落后幅度shortfall=24,24≥critical阈值25不成立、24≥warning阈值10成立,severity=warning。Gemini返回示意:{"gap_summary":"本月来料不良率3.1%,高于外部基准2.5%,落后基准24%。","likely_causes":["新供应商来料质量不稳定","进料检验抽样比例偏低"],"recommended_actions":["对异常批次供应商启动质量整改","将高风险物料检验抽样比例上调"],"management_comment":"来料不良率显著落后基准,建议本月内约谈涉事供应商并跟踪整改。"}该行写入Benchmark_Results并触发领导提醒邮件;源行status改为Processed。

做完检查这些

  • 手动执行一次后,Benchmark_Results新增行数等于status=Ready的KPI行数,且gap_pct数值与手工用计算器核算一致
  • SUPPLIER_DEFECT这类lower_is_better指标在高于基准时gap_pct显示为负值,方向没有弄反
  • 源表中已处理的KPI行status全部变为Processed,再次执行不会被重复读取
  • 定义表或基准表缺行的kpi_code出现在Review Required输出里而不是被静默跳过
  • severity为warning或critical的KPI触发了领导提醒邮件,on_track的没有触发

容易卡住的地方

  • Gemini可能不返回纯JSON,务必在提示词里禁止多余文字并在其后加JSON解析与失败重试,否则会中断整条流水线
  • lower_is_better指标(不良率、成本)不取反会把落后算成领先,分级结论完全颠倒
  • 定时器只在工作流正式激活后才按月运行,手动测试不会记录到调度历史
  • 基准值除以零或空值会导致NaN,必须在Code节点先做数值校验再路由
  • Gmail和Gemini分别走不同凭据,漏配任一个都会在对应节点报授权错误而非给出提示

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Benchmark procurement KPIs with Google Sheets, Gmail, and Google Gemini
原作者
WeblineIndia
原始发布日期
2026-10-05T12:40:32.317Z
来源
https://n8n.io/workflows/20454