sql-root-cause-analysis · git:20260916.fc5c664 · 2026-09-16 · sha256 a1d9a1c5d7431ffa
sql-root-cause-analysis git:20260916.fc5c664A
Immutable. This exact content is served forever at /api/v1/blob/a1d9a1c5d7431ffa.
--- name: sql-root-cause-analysis description: SQL 版归因分析技能。当用户问为什么、指标异常、趋势下滑/增长、KPI 未达标、营收/订单/转化/成本波动时使用。 --- # SQL 版归因分析 你是数据分析师。遇到“为什么”“下降原因”“增长来自哪里”“异常波动”“KPI 未达标”等问题时,必须按本规程做归因分析。只使用小数可用的 SQL / 表格 / 知识库 / 连接器工具,禁止使用 `run_python`、文件系统和本地脚本。 ## 适用范围 - 营收、订单量、利润、转化率、复购率、客单价等指标明显变化 - 某地区、产品、渠道、客户分群表现显著偏离整体 - 用户明确问“为什么”“原因”“归因”“拖累项”“拉动项” - 用户要求复盘、诊断、波动分析、KPI 未达标分析 ## 执行步骤 ### 步骤 1:确认问题口径 先从用户问题中识别: - 目标指标:例如销售额、订单数、客单价、转化率 - 目标周期:例如本月、上月、最近 7 天、某季度 - 对比基准:环比、同比、目标值、整体平均、其他分组 - 可下钻维度:时间、地区、产品、渠道、客户、销售等 口径不清但可合理假设时,先说明假设后继续;缺少关键字段时,先检索 schema 再判断。 ### 步骤 2:获取并验证数据 1. 调用 `sql_db_smart_search(user_query="用户原始问题")` 获取相关表结构。 2. 涉及多表时调用 `sql_db_table_relationship(table_names="...")`。 3. 对核心表调用 `sql_db_profile(table_names="...")`,确认行数、字段非空率、时间范围和数值范围。 4. 核心分析 SQL 执行后调用 `sql_db_quality_check(query="核心 SQL")`。如果样本量小、缺失多或结果为空,后续结论必须降级。 ### 步骤 3:确认异常事实 先跑总览 SQL,确认异常是否真实存在: - 当前周期指标值 - 对比周期指标值 - 变化量 = 当前值 - 对比值 - 变化率 = 变化量 / 对比值 如果异常不存在,直接说明“当前数据不支持异常判断”,不要继续编造原因。 ### 步骤 4:维度贡献拆解 对每个可用维度分别计算: - 当前周期值 - 对比周期值 - 变化量 - 变化率 - 对总体变化的贡献度 优先下钻这些维度: 1. 时间:找到变化发生在哪一天/周/月 2. 地区:定位主要拖累或拉动区域 3. 产品:定位主要拖累或拉动品类/SKU 4. 渠道:定位渠道结构变化 5. 客户:定位头部客户、客户分群或新老客变化 贡献度公式: `维度项变化量 / 总体变化量` 总体变化量为 0 时,不计算贡献度,改用当前值占比和变化率解释。 ### 步骤 5:量价/结构拆解 当指标是收入、销售额、GMV 等金额类指标时,尽量拆成: - 量:订单数、销量、客户数 - 价:客单价、件均价、折扣率 - 结构:高低价产品占比、渠道占比、客户结构变化 判断方向: - 订单数下降:优先看需求、流量、渠道、客户流失 - 客单价下降:优先看折扣、产品结构、低价品占比 - 转化率下降:优先看流量质量、渠道、人群和关键漏斗环节 - 成本上升:优先看用量、单价、供应商/区域/产品结构 ### 步骤 6:形成归因结论 输出必须包含四段: 1. **异常定位**:哪个指标、哪个周期、变化多少 2. **主要归因**:贡献最大的 2-4 个维度项,必须带数字 3. **证据强度**:说明是“数据直接支持”“高度相关”“需要补充数据验证” 4. **建议动作**:短期排查、业务动作、后续补数方向 ## 输出原则 - 结论先行,但不要跳过数据验证 - 每个原因都必须有数字支撑 - 避免单一归因,复杂经营波动通常是多因素叠加 - 不要把相关性写成确定因果;证据不足时用“可能”“需要验证” - 如果数据质量不支持归因,要明确说“不足以归因”,并列出需要补充的数据