数据看板指标计算说明
约 6441 字大约 21 分钟
2026-02-03
📋 目录
一、KPI概览指标
指标汇总表(11个)
| 序号 | 指标名称 | 计算公式 | 统计时间字段 | 业务语义 | 状态过滤 | 修复状态 |
|---|---|---|---|---|---|---|
| 1 | 下单总额 | SUM(price) | add_time | 用户下单的商品总金额(含取消订单) | 全部状态 | 无需修复 |
| 2 | 成交总额(折扣前) | SUM(price) | add_time | 有效订单的商品总金额(折扣前原价) | status IN [2,3,4] | 无需修复 |
| 3 | 成交总额(折扣后) | SUM(total_price) | add_time | 有效订单的实际成交金额 | status IN [2,3,4] | 无需修复 |
| 4 | 运费/加价总计 | SUM(increase_price) | add_time | 订单的运费、加价等额外费用总额 | status IN [2,3,4] | 无需修复 |
| 5 | 有效订单数 | COUNT(*) | add_time | 当前时间段创建的有效订单数量 | status IN [2,3,4] | 无需修复 |
| 6 | 取消订单数 | COUNT(*) | cancel_time | 当前时间段实际取消的订单数量 | status = 5 | 已修复 |
| 7 | 访问UV | '--' | - | 访问店铺的独立访客数 | - | 待实现 |
| 8 | 签收订单数 | COUNT(*) | collect_time | 当前时间段实际签收的订单数量 | status = 4 | 已修复 |
| 9 | 拒收订单数 | COUNT(*) | upd_time | 当前时间段被拒收的订单数量 | status IN [7,8] | 已修复 |
| 10 | 退款总额 | SUM(price) | audit_time | 当前时间段完成的售后退款总金额 | status = 3(售后表) | 已修复 |
| 11 | 退款订单数 | COUNT(DISTINCT order_id) | audit_time | 当前时间段完成售后的订单数量 | status = 3(售后表) | 已修复 |
详细说明
1. 下单总额
代码位置: StatsTemplate2Service.php:122-129(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
SUM(price)业务语义:
- 用户下单的商品总金额(使用订单的
price字段) - 包含取消订单,反映用户下单意愿的总量
字段说明:
price- 订单商品总价(折扣前原价)
2. 成交总额(折扣前)
代码位置: StatsTemplate2Service.php:151-154(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [2, 3, 4]
SUM(price)业务语义:
- 有效订单的商品总金额(折扣前原价)
- 用于计算折扣率和佣金率
3. 成交总额(折扣后)
代码位置: StatsTemplate2Service.php:139-149(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [2, 3, 4]
SUM(total_price)业务语义:
- 有效订单的实际成交金额(用户实付金额)
- 排除取消订单,反映实际销售收入
字段说明:
total_price- 订单实付金额(折扣后)
4. 运费/加价总计
代码位置: StatsTemplate2Service.php:156-159(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [2, 3, 4]
SUM(increase_price)业务语义:
- 订单的运费、加价等额外费用总额
- 用于评估物流成本
5. 有效订单数
代码位置: StatsTemplate2Service.php:161-164(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [2, 3, 4]
COUNT(*)业务语义:
- 当前时间段创建的有效订单数量(订单笔数)
- 状态包括:待发货(2)、待收货(3)、已完成(4)
6. 取消订单数
代码位置: StatsTemplate2Service.php:166-180(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND cancel_time >= $start -- 修复:按取消时间统计
AND cancel_time <= $end
AND cancel_time > 0
AND status = 5
COUNT(*)业务语义:
- 当前时间段实际取消的订单数量
- 按订单取消时间(
cancel_time)统计,而非创建时间
修复说明:
- 修复前: 按
add_time(订单创建时间)统计 - 修复后: 按
cancel_time(取消时间)统计 - 修复原因: 数据看板应反映"运营行为发生时间"
7. 访问UV
代码位置: StatsTemplate2Service.php:183-187(在新窗口打开)
当前状态: 待实现
计划实现:
- 需要接入访问日志表或第三方统计(如百度统计、Google Analytics)
- 统计独立访客数(UV)
8. 签收订单数
代码位置: StatsTemplate2Service.php:189-203(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND collect_time >= $start -- 修复:按签收时间统计
AND collect_time <= $end
AND collect_time > 0
AND status = 4
COUNT(*)业务语义:
- 当前时间段实际签收的订单数量
- 按用户签收时间统计
修复说明:
- 修复前: 按
add_time(订单创建时间)统计 - 修复后: 按
collect_time(签收时间)统计
9. 拒收订单数
代码位置: StatsTemplate2Service.php:205-218(在新窗口打开)
计算公式:
WHERE is_delete_time = 0
AND upd_time >= $start -- 修复:按拒收时间统计(使用 upd_time 近似)
AND upd_time <= $end
AND status IN [7, 8]
COUNT(*)业务语义:
- 当前时间段被拒收的订单数量
- 包括:退件中(7)、已退件(8)
修复说明:
- 修复前: 按
add_time(订单创建时间)统计 - 修复后: 按
upd_time(拒收时间)统计 - 注意事项: 订单表无专门的拒收时间字段,使用
upd_time作为近似值
10. 退款总额
代码位置: StatsTemplate2Service.php:221-239(在新窗口打开)
计算公式:
FROM sxo_order_aftersale -- 修复:从售后表统计
WHERE status = 3 -- 已完成
AND audit_time >= $start -- 修复:按审核完成时间统计
AND audit_time <= $end
AND audit_time > 0
SUM(price)业务语义:
- 当前时间段完成的售后退款总金额
- 从售后表(
OrderAftersale)统计
修复说明:
- 修复前: 从订单表统计,按
add_time - 修复后: 从售后表统计,按
audit_time(审核完成时间)
11. 退款订单数
代码位置: StatsTemplate2Service.php:241-260(在新窗口打开)
计算公式:
FROM sxo_order_aftersale
WHERE status = 3 -- 已完成
AND audit_time >= $start -- 修复:按审核完成时间统计
AND audit_time <= $end
AND audit_time > 0
COUNT(DISTINCT order_id)业务语义:
- 当前时间段完成售后的订单数量
- 去重订单ID(一个订单可能有多个商品)
二、侧栏指标
指标汇总表(7个)
| 序号 | 指标名称 | 计算公式 | 统计时间字段 | 业务语义 |
|---|---|---|---|---|
| 1 | 订单均价 (AOV) | SUM(total_price) / COUNT(*) | add_time | 平均每笔订单的金额 |
| 2 | COD复购率 | (复购用户数 / 购买用户数) × 100% | add_time + 24h时效过滤 | 货到付款订单的复购率 |
| 3 | 平均折扣率 | SUM(优惠金额) / SUM(原价) × 100% | add_time | 订单的平均折扣比例 |
| 4 | 平均佣金率 | '--' | - | 订单的平均佣金比例 |
| 5 | 平均连带率 | SUM(购买商品总数) / COUNT(订单数) | add_time | 平均每笔订单购买的商品件数 |
| 6 | 整体取消率 | (取消订单数 / 总订单数) × 100% | 分子:cancel_time 分母: add_time | 当前时间段创建的订单中,最终被取消的比例 |
| 7 | 核心拒收率 | (拒收订单数 / 已发货订单数) × 100% | 分子:upd_time 分母: delivery_time | 当前时间段发货的订单中,被拒收的比例 |
详细说明
1. 订单均价 (AOV - Average Order Value)
代码位置: StatsTemplate2Service.php:431-448(在新窗口打开)
计算公式:
AOV = SUM(total_price) / COUNT(*)
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [2, 3, 4]业务语义:
- 平均每笔订单的金额(客单价)
- 衡量订单价值的重要指标
2. COD复购率
代码位置: StatsTemplate2Service.php:478-488(在新窗口打开)
计算公式:
复购率 = (复购用户数 / 购买用户数) × 100%
WHERE payment_id = COD支付方式ID
AND (status != 5 OR upd_time < cutoff_time) -- 排除24小时内取消的订单特殊逻辑:
- 仅统计货到付款(COD)订单
- 考虑24小时取消时效(
upd_time < cutoff_time) - 复购用户:下单次数 ≥ 2 的用户
业务语义:
- 货到付款订单的复购率
- 反映用户的重复购买意愿
3. 平均折扣率
代码位置: StatsTemplate2Service.php:450-476(在新窗口打开)
计算公式:
折扣率 = SUM(preferential_price) / SUM(price_before_discount) × 100%
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [2, 3, 4]业务语义:
- 订单的平均折扣比例
- 优惠金额占商品原价的比例
4. 平均佣金率
当前状态: 待实现
计划实现:
- 需要明确的佣金数据来源
- 可能需要从订单表或佣金表计算
5. 平均连带率
代码位置: StatsTemplate2Service.php:490-510(在新窗口打开)
计算公式:
连带率 = SUM(购买商品总数) / COUNT(订单数)
购买商品总数 = SUM(buy_number)
FROM sxo_order_detail
WHERE order_id IN (当前时间段的有效订单ID列表)业务语义:
- 平均每笔订单购买的商品件数
- 衡量关联销售能力
6. 整体取消率
代码位置: StatsTemplate2Service.php:512-546(在新窗口打开)
计算公式:
整体取消率 = (取消订单数 / 总订单数) × 100%
-- 分母:当前时间段创建的订单总数
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
COUNT(*) AS total_orders
-- 分子:当前时间段取消的订单数( 按取消时间统计)
WHERE is_delete_time = 0
AND cancel_time >= $start -- 修复:按取消时间
AND cancel_time <= $end
AND cancel_time > 0
AND status = 5
COUNT(*) AS cancel_orders业务语义:
- 当前时间段创建的订单中,最终被取消的比例
- 分子:当前时间段取消的订单(按取消时间)
- 分母:当前时间段创建的订单(按创建时间)
修复说明:
- 修复前: 分子分母都按
add_time统计 - 修复后: 分子按
cancel_time统计,分母仍按add_time - 逻辑说明: 衡量"当前创建的订单有多少被取消"
7. 核心拒收率
代码位置: StatsTemplate2Service.php:548-597(在新窗口打开)
计算公式:
核心拒收率 = (拒收订单数 / 已发货订单数) × 100%
-- 分子:当前时间段拒收的订单数( 按拒收时间统计)
WHERE is_delete_time = 0
AND upd_time >= $start -- 修复:按拒收时间
AND upd_time <= $end
AND status IN [7, 8]
COUNT(*) AS refuse_orders
-- 分母:当前时间段发货的订单数( 按发货时间统计)
WHERE is_delete_time = 0
AND delivery_time >= $start -- 修复:按发货时间
AND delivery_time <= $end
AND delivery_time > 0
AND status IN [3, 4, 7, 8]
COUNT(*) AS shipped_orders业务语义:
- 当前时间段发货的订单中,被拒收的比例
- 反映物流和商品质量情况
修复说明:
- 修复前: 分子分母都按
add_time统计 - 修复后: 分子按
upd_time(拒收时间),分母按delivery_time(发货时间) - 逻辑统一: 分子分母都按行为时间统计
状态说明:
3= 已发货/待收货4= 已完成7= 退件中(已发货后被拒收)8= 已退件(已发货后被拒收)
三、转化漏斗指标
漏斗阶段表(5个阶段)
| 序号 | 阶段名称 | 统计维度 | 统计时间字段 | 计算公式 | 业务语义 |
|---|---|---|---|---|---|
| 1 | 访问商店 | 用户数(UV) | add_time(浏览/加购/下单时间) | COUNT(DISTINCT 浏览/加购/下单用户) | 访问店铺的独立用户数 |
| 2 | 加入购物车 | 用户数(UV) | add_time(加购时间) | COUNT(DISTINCT user_id) | 加入购物车的独立用户数 |
| 3 | 发起结账 | 用户数(UV) | add_time(填写地址时间) | COUNT(DISTINCT user_id) | 进入结账流程的独立用户数 |
| 4 | 填写收货地址 | 用户数(UV) | add_time(填写地址时间) | COUNT(DISTINCT user_id) | 填写收货地址的独立用户数 |
| 5 | 下单用户数 | 用户数(UV) | add_time(下单时间) | COUNT(DISTINCT user_id) | 完成下单的独立用户数 |
代码位置: StatsTemplate2Service.php:304-407(在新窗口打开)
转化率计算
阶段转化率:
阶段转化率 = (当前阶段用户数 / 上一阶段用户数) × 100%全店最终转化率:
最终转化率 = (下单用户数 / 访问商店用户数) × 100%详细说明
1. 访问商店
数据来源: 商品浏览、加购、下单的用户去重
计算公式:
-- 合并浏览、加购、下单用户并去重
UNION (
SELECT user_id FROM sxo_goods_browse WHERE add_time BETWEEN $start AND $end,
SELECT user_id FROM sxo_cart WHERE add_time BETWEEN $start AND $end,
SELECT user_id FROM sxo_order WHERE add_time BETWEEN $start AND $end
)
COUNT(DISTINCT user_id)业务语义:
- 访问店铺的独立用户数(近似值)
- TODO: 更精确的做法是用 UV(页面访问统计)
2. 加入购物车
计算公式:
FROM sxo_cart
WHERE add_time >= $start
AND add_time <= $end
GROUP BY user_id
COUNT(DISTINCT user_id)业务语义:
- 加入购物车的独立用户数
3. 发起结账
计算公式:
FROM sxo_order_address
WHERE add_time >= $start
AND add_time <= $end
COUNT(DISTINCT user_id)业务语义:
- 填写收货地址的用户数(进入结账流程)
- TODO: 更精确的做法需要结账页面访问记录
4. 填写收货地址
计算公式:
FROM sxo_order o
JOIN sxo_order_address oa ON o.id = oa.order_id
WHERE o.is_delete_time = 0
AND oa.add_time >= $start
AND oa.add_time <= $end
GROUP BY o.user_id
COUNT(DISTINCT o.user_id)业务语义:
- 填写收货地址的独立用户数
5. 下单用户数
计算公式:
FROM sxo_order
WHERE is_delete_time = 0
AND add_time >= $start
AND add_time <= $end
AND status IN [1, 2, 3, 4]
GROUP BY user_id
COUNT(DISTINCT user_id)业务语义:
- 完成下单的独立用户数
- 包括:待付款(1)、待发货(2)、待收货(3)、已完成(4)
四、排行榜指标
指标汇总表(3个)
| 序号 | 指标名称 | 排序依据 | 统计时间字段 | 业务语义 |
|---|---|---|---|---|
| 1 | 热卖商品排行 | 销量降序 | add_time(订单创建时间) | 按商品销量排序,前10名 |
| 2 | 商品加购排行 | 加购人数降序 | add_time(加购时间) | 按加购用户数排序,前10名 |
| 3 | 地区购买排行 | 下单人数降序 | add_time(下单时间) | 按地区下单用户数排序,前10名 |
详细说明
1. 热卖商品排行
代码位置: StatsTemplate2Service.php:613-659(在新窗口打开)
计算公式:
SELECT
goods_id,
title,
SUM(buy_number) AS sales_count,
SUM(total_price) AS sales_amount
FROM sxo_order_detail
WHERE order_id IN (
SELECT id FROM sxo_order
WHERE status <= 4
AND add_time >= $start
AND add_time <= $end
)
GROUP BY goods_id
ORDER BY sales_count DESC
LIMIT 10业务语义:
- 热卖商品排行(按销量)
- 显示商品名称、销量、销售额
2. 商品加购排行
代码位置: StatsTemplate2Service.php:667-712(在新窗口打开)
计算公式:
SELECT
goods_id,
title,
COUNT(DISTINCT user_id) AS add_count
FROM sxo_cart
WHERE add_time >= $start
AND add_time <= $end
GROUP BY goods_id
ORDER BY add_count DESC
LIMIT 10业务语义:
- 商品加购排行(按独立用户数)
- 显示商品名称、加购人数、加购率
3. 地区购买排行
代码位置: StatsTemplate2Service.php:719-758(在新窗口打开)
计算公式:
SELECT
province_name,
COUNT(DISTINCT user_id) AS buyer_count,
SUM(total_price) AS total_amount,
COUNT(id) AS order_count
FROM sxo_order o
JOIN sxo_order_address oa ON o.id = oa.order_id
WHERE o.is_delete_time = 0
AND o.status IN [2, 3, 4]
AND o.add_time >= $start
AND o.add_time <= $end
GROUP BY province_name
ORDER BY buyer_count DESC
LIMIT 10业务语义:
- 地区购买排行(按下单用户数)
- 显示地区名称、下单人数、客单价
五、订单状态说明
状态码表
| 状态码 | 状态名称 | 英文标识 | 说明 | 是否计入"有效订单" |
|---|---|---|---|---|
| 0 | 待确认 | Pending | 等待商家确认订单 | ❌ |
| 1 | 待付款 | Unpaid | 等待用户付款 | ❌ |
| 2 | 待发货 | Paid | 用户已付款,等待发货 | |
| 3 | 待收货 | Shipped | 已发货,等待用户签收 | |
| 4 | 已完成 | Completed | 订单完成(已签收) | |
| 5 | 已取消 | Cancelled | 订单已取消 | ❌ |
| 6 | 已关闭 | Closed | 订单关闭(超时等) | ❌ |
| 7 | 退件中 | Refunding | 退货/拒收流程中 | ❌ |
| 8 | 已退件 | Refunded | 已完成退货/拒收 | ❌ |
状态流转图
待确认(0)
↓
待付款(1) ←─────┐
↓ │
待发货(2) │ 取消/关闭
↓ │
待收货(3) ──────┘
↓ │ 拒收
已完成(4) ──────┤
↓
退件中(7)
↓
已退件(8)六、时间字段说明
订单表(sxo_order)时间字段
| 字段名 | 字段含义 | 对应业务行为 | 类型 | 说明 |
|---|---|---|---|---|
add_time | 订单创建时间 | 用户下单 | int(10) | 订单生成时间 |
pay_time | 支付时间 | 用户完成支付 | int(10) | 支付成功时间 |
confirm_time | 确认时间 | 商家确认订单 | int(10) | 商家确认时间 |
delivery_time | 发货时间 | 商家发货 | int(10) | 用于统计发货订单数 |
cancel_time | 取消时间 | 订单被取消 | int(10) | 用于统计取消订单数 |
collect_time | 签收时间 | 用户签收商品 | int(10) | 用于统计签收订单数 |
express_collect_time | 快递签收时间 | 快递公司签收 | int(10) | 物流签收时间 |
close_time | 关闭时间 | 订单关闭 | int(10) | 订单关闭时间 |
comments_time | 评论时间 | 用户评论 | int(10) | 用户评价时间 |
upd_time | 更新时间 | 任何状态更新 | int(11) | 用于统计拒收订单数 (近似值) |
is_delete_time | 删除时间 | 订单被删除 | int(10) | 0=未删除,>0=删除时间 |
售后表(sxo_order_aftersale)时间字段
| 字段名 | 字段含义 | 对应业务行为 | 类型 | 说明 |
|---|---|---|---|---|
add_time | 添加时间 | 用户发起售后 | int(10) | 售后申请创建时间 |
apply_time | 申请时间 | 用户申请售后 | int(10) | 售后申请时间 |
confirm_time | 确认时间 | 商家确认售后 | int(10) | 售后确认时间 |
delivery_time | 退货时间 | 用户退货 | int(10) | 退货发货时间 |
audit_time | 审核时间 | 售后审核通过 | int(10) | 用于统计退款完成 |
cancel_time | 取消时间 | 售后取消 | int(10) | 售后取消时间 |
upd_time | 更新时间 | 任何状态更新 | int(10) | 最后更新时间 |
七、售后状态说明
状态码表
| 状态码 | 状态名称 | 说明 |
|---|---|---|
| 0 | 待确认 | 等待商家确认售后申请 |
| 1 | 待退货 | 商家已确认,等待用户退货 |
| 2 | 待审核 | 用户已退货,等待商家审核 |
| 3 | 已完成 | 售后完成(退款已到账) |
| 4 | 已拒绝 | 商家拒绝售后申请 |
| 5 | 已取消 | 用户取消售后申请 |
售后类型
| 类型码 | 类型名称 | 说明 |
|---|---|---|
| 0 | 仅退款 | 不需要退货,直接退款 |
| 1 | 退货退款 | 需要退货后退款 |
八、已修复指标汇总
修复清单表(7项)
| 序号 | 指标名称 | 修复位置 | 修复内容 | 修复时间字段 | 修复原因 |
|---|---|---|---|---|---|
| 1 | 取消订单数 | StatsTemplate2Service.php:166-174(在新窗口打开) | add_time → cancel_time | cancel_time | 统计"实际取消时间" |
| 2 | 整体取消率 | StatsTemplate2Service.php:512-546(在新窗口打开) | 分子:add_time → cancel_time | cancel_time | 分子应统计当前时间段取消的订单 |
| 3 | 签收订单数 | StatsTemplate2Service.php:189-197(在新窗口打开) | add_time → collect_time | collect_time | 统计"实际签收时间" |
| 4 | 拒收订单数 | StatsTemplate2Service.php:205-212(在新窗口打开) | add_time → upd_time | upd_time | 统计"实际拒收时间"(无专用字段) |
| 5 | 退款总额 | StatsTemplate2Service.php:221-239(在新窗口打开) | 订单表 add_time → 售后表 audit_time | audit_time | 统计"售后完成时间" |
| 6 | 退款订单数 | StatsTemplate2Service.php:241-260(在新窗口打开) | 售后表 add_time → audit_time | audit_time | 统计"售后完成时间" |
| 7 | 核心拒收率分母 | StatsTemplate2Service.php:558-567(在新窗口打开) | add_time → delivery_time | delivery_time | 统计"实际发货时间" |
修复原则
统一原则:所有行为类指标都按"行为发生时间"统计
修复前 vs 修复后对比
| 指标类型 | 修复前 | 修复后 | 业务意义 |
|---|---|---|---|
| 创建类 | 按 add_time 统计 | 按 add_time 统计 | 反映用户下单行为 |
| 行为类 | 按 add_time 统计 | 按行为时间统计 | 反映实际运营结果 |
示例:
场景:用户选择日期范围 "2026-01-15"
修复前:
- 取消订单数 = 2026-01-15 创建的订单中被取消的数量
- ❌ 问题:包括当天创建但后来才取消的订单
修复后:
- 取消订单数 = 2026-01-15 实际取消的订单数量
- 正确:反映当天的实际取消行为九、数据完整性要求
必填时间字段
修复后的指标要求以下时间字段必须有值:
| 字段名 | 适用指标 | 要求 | 说明 |
|---|---|---|---|
cancel_time | 取消订单数、整体取消率 | 必须 > 0 | 取消订单必须有取消时间 |
collect_time | 签收订单数 | 必须 > 0 | 签收订单必须有签收时间 |
delivery_time | 核心拒收率(分母) | 必须 > 0 | 已发货订单必须有发货时间 |
audit_time | 退款总额、退款订单数 | 必须 > 0 | 完成的售后必须有审核时间 |
数据验证SQL
检查取消订单时间完整性
-- 检查取消订单的 cancel_time 是否为空
SELECT COUNT(*) AS empty_cancel_time_count
FROM sxo_order
WHERE status = 5
AND (cancel_time IS NULL OR cancel_time = 0);检查签收订单时间完整性
-- 检查已完成订单的 collect_time 是否为空
SELECT COUNT(*) AS empty_collect_time_count
FROM sxo_order
WHERE status = 4
AND (collect_time IS NULL OR collect_time = 0);检查发货订单时间完整性
-- 检查已发货订单的 delivery_time 是否为空
SELECT COUNT(*) AS empty_delivery_time_count
FROM sxo_order
WHERE status IN [3, 4, 7, 8]
AND (delivery_time IS NULL OR delivery_time = 0);检查售后审核时间完整性
-- 检查已完成售后的 audit_time 是否为空
SELECT COUNT(*) AS empty_audit_time_count
FROM sxo_order_aftersale
WHERE status = 3
AND (audit_time IS NULL OR audit_time = 0);十、常见问题FAQ
Q1: 为什么"有效订单数"不按行为时间统计?
A: "有效订单数"反映的是用户在当前时间段创建的订单量,属于"下单行为"指标,应该按 add_time 统计。
这类指标包括:
- 下单总额
- 成交总额
- 有效订单数
- 订单均价(AOV)
而"取消订单数"、"签收订单数"等反映的是运营结果,应该按实际行为时间统计。
Q2: 整体取消率的分母为什么仍按 add_time?
A: 整体取消率的业务含义是:
整体取消率 = 当前时间段取消的订单数 / 当前时间段创建的订单总数- 分子: 按取消时间统计(当前时间段取消的订单)
- 分母: 按创建时间统计(当前时间段创建的订单)
这样计算的是:当前创建的订单中有多少最终被取消,符合业务语义。
Q3: 拒收订单数为什么使用 upd_time 而不是专门的拒收时间字段?
A: 订单表(sxo_order)没有专门的拒收时间字段。使用 upd_time 作为近似值:
- 优点: 可以近似反映拒收时间
- ⚠️ 缺点: 任何状态更新都会修改
upd_time,精度不够
建议: 如果需要更精确的拒收统计,考虑添加 refuse_time 字段。
Q4: 为什么退款指标从售后表统计而不是订单表?
A: 订单表的 refund_price 字段只记录退款金额,无法准确反映退款完成时间。
售后表(sxo_order_aftersale)的优势:
- 有明确的售后状态(
status = 3表示已完成) - 有准确的审核完成时间(
audit_time) - 可以精确统计退款完成时间
Q5: 转化漏斗为什么统计用户数而不是订单数?
A: 转化漏斗的核心目的是分析用户行为转化路径,应该按用户维度统计:
- 用户数维度: 反映真实转化情况
- ❌ 订单数维度: 一个用户可能下多笔订单,会重复计算
示例:
用户A 下单 3 笔
用户B 下单 2 笔
按订单数:下单阶段 = 5 笔
按用户数:下单阶段 = 2 人 正确Q6: COD复购率为什么有24小时时效过滤?
A: COD(货到付款)订单的特殊性:
- ⏰ 支付时效长: 从下单到收货才支付,可能72小时+
- ❌ 取消率高: 收货前都可能取消
- 24小时规则: 排除刚下单还未稳定的订单
// 有效订单条件:
// - 未取消订单(status != 5)
// - 或取消时间早于截止时间的订单(upd_time < cutoff_time)Q7: 历史数据的时间字段不完整怎么办?
A: 有以下解决方案:
补充历史数据(推荐)
-- 示例:根据订单状态更新 cancel_time UPDATE sxo_order SET cancel_time = upd_time WHERE status = 5 AND (cancel_time IS NULL OR cancel_time = 0);数据迁移脚本:根据
upd_time和status推算行为时间从修复日起生效:只统计修复后的数据,历史数据保持原逻辑
Q8: 如何验证修复后的数据是否正确?
A: 测试验证步骤:
单日验证
选择某一天的数据,手动统计: - 取消订单数 = 查询当天 cancel_time 在该天的订单 - 签收订单数 = 查询当天 collect_time 在该天的订单 - 对比数据看板显示的数据跨日验证
订单场景: - 01-15 23:00 创建订单 - 01-16 10:00 取消订单 选择日期:01-16 - 修复前:会计入(因为创建时间是01-15 23:00) - 修复后:应该计入(因为取消时间是01-16 10:00)环比验证
检查上期对比数据是否正确 - 确认时间范围计算正确 - 确认趋势计算正确
附录A:代码位置索引
KPI概览
- 下单总额(在新窗口打开)
- 成交总额(折扣后)(在新窗口打开)
- 成交总额(折扣前)(在新窗口打开)
- 运费/加价总计(在新窗口打开)
- 有效订单数(在新窗口打开)
- 取消订单数(在新窗口打开)
- 签收订单数(在新窗口打开)
- 拒收订单数(在新窗口打开)
- 退款总额(在新窗口打开)
- 退款订单数(在新窗口打开)
侧栏指标
转化漏斗
排行榜
附录B:术语表
| 术语 | 英文 | 解释 |
|---|---|---|
| UV | Unique Visitor | 独立访客数 |
| AOV | Average Order Value | 订单均价(客单价) |
| COD | Cash On Delivery | 货到付款 |
| KPI | Key Performance Indicator | 关键绩效指标 |
附录C:更新日志
| 版本 | 日期 | 更新内容 | 更新人 |
|---|---|---|---|
| v1.0 | 2026-01-28 | 初始版本,包含完整的指标计算说明和7项修复 | AI Assistant |
文档结束
如有疑问,请联系开发团队或查阅相关代码。
