Skip to content
Back to skills

1371 Revenue Bot Subscription Analysis Eca8038f

ASecurity

分析2025年(自art_task第一条数据起)的收入构成、Bot收入贡献、订阅复购率和用户套餐分布。

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 11, 2026
developmentjavascriptgojavashellsql

Works with

  • mcp

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 1371-revenue-bot-subscription-analysis_eca8038f --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1371 Revenue Bot Subscription Analysis Eca8038f?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1371 Revenue Bot Subscription Analysis Eca8038f
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1371-revenue-bot-subscription-analysis-eca8038f/badge)](https://www.skillsdirectory.com/skills/tools-only-1371-revenue-bot-subscription-analysis-eca8038f)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# 2025年收入与订阅分析报告

## 目标

分析2025年(自art_task第一条数据起)的收入构成、Bot收入贡献、订阅复购率和用户套餐分布。

如果在 base44 运行,则 @base44_prompt_mcphub.md。

## 参数

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `start_date` | 开始日期 (YYYY-MM-DD) | 2025-10-15 |
| `end_date` | 结束日期 (YYYY-MM-DD) | 今天 |

**说明**: `start_date` 为 art_task 表第一条数据的日期(已查询确认为 2025-10-15)。

## 数据源

### 收入表
- `my_shell_prod.user_subscription_stripe_orders` - Stripe 订单
- `my_shell_prod.user_subscription_paypal_orders` - PayPal 订单
- `my_shell_prod.apple_used_transactions` - Apple IAP 订单
  - ⚠️ **数据起始时间**: 2025-12-17(仅有最近2周数据)
  - 2025-10-15 至 2025-12-16 期间的 Apple IAP 订单数据缺失

### 任务表
- `my_shell_prod.art_task` - 任务表,包含 bot 使用记录和成本数据

### 用户表
- `my_shell_prod.user` - 用户表,用于套餐分类

## 核心指标

1. **按月收入** = 每月总收入(Stripe + PayPal + Apple IAP)
2. **Bot收入归因** = 使用 Last-Touch 优化版归因模型分配收入到各个 bot
3. **订阅复购率** = 购买过2次及以上的用户数 / 总付费用户数 × 100%
4. **按月套餐销售统计**:
   - Basic 订单数:当月卖出的 Basic 套餐数量
   - Pro 订单数:当月卖出的 Pro/Developer 套餐数量
   - 复购订单数:用户在分析期间内有过历史订单,本月又购买的订单数
   - 升级订单数:套餐等级 > 分析期间内历史最高等级的订单数

---

## Step 1: 按月收入分析

### 查询1a: Stripe 按月收入

```sql
SELECT
  DATE_FORMAT(created_date, '%Y-%m') as revenue_month,
  SUM(amount) as stripe_revenue,
  COUNT(*) as stripe_order_count
FROM my_shell_prod.user_subscription_stripe_orders
WHERE status = 'ORDER_STATUS_SUCCESS'
  AND amount >= 0
  AND created_date >= '{start_date} 00:00:00'
  AND created_date <= '{end_date} 23:59:59'
GROUP BY DATE_FORMAT(created_date, '%Y-%m')
ORDER BY revenue_month;
```

### 查询1b: PayPal 按月收入

```sql
SELECT
  DATE_FORMAT(created_date, '%Y-%m') as revenue_month,
  SUM(
    CASE
      WHEN biz_type = 'ENERGY' AND paypal_price_id = '500' THEN 6.99
      WHEN biz_type = 'ENERGY' AND paypal_price_id = '2000' THEN 20.99
      ELSE amount
    END
  ) as paypal_revenue,
  COUNT(*) as paypal_order_count
FROM my_shell_prod.user_subscription_paypal_orders
WHERE status = 'ORDER_STATUS_SUCCESS'
  AND created_date >= '{start_date} 00:00:00'
  AND created_date <= '{end_date} 23:59:59'
GROUP BY DATE_FORMAT(created_date, '%Y-%m')
ORDER BY revenue_month;
```

### 查询1c: Apple IAP 按月收入

```sql
SELECT
  DATE_FORMAT(created_date, '%Y-%m') as revenue_month,
  SUM(
    CASE product_id
      WHEN 'PLAYER_MONTHLY' THEN 6.99
      WHEN 'PLAYER_YEARLY' THEN 58.99
      WHEN 'DEVELOPER_MONTHLY' THEN 59.99
      WHEN 'DEVELOPER_YEARLY' THEN 499.99
      WHEN '33OFF_DEVELOPER_MONTHLY' THEN 39.99
      WHEN 'energy_500' THEN 6.99
      WHEN 'energy_2000' THEN 20.99
      ELSE 0
    END
  ) as iap_revenue,
  COUNT(*) as iap_order_count
FROM my_shell_prod.apple_used_transactions
WHERE created_date >= '{start_date} 00:00:00'
  AND created_date <= '{end_date} 23:59:59'
GROUP BY DATE_FORMAT(created_date, '%Y-%m')
ORDER BY revenue_month;
```

**注意**:
- Apple IAP 收入按原价计算,**未计算折扣码优惠**
- ⚠️ **数据起始时间**: 2025-12-17,10月和11月的 Apple IAP 数据完全缺失
- 实际 IAP 收入可能高于统计值(折扣优惠 + 历史数据缺失)

### 数据合并

```javascript
// 伪代码:合并三个收入源
const monthlyRevenue = new Map();

for (const row of stripeData) {
  const month = row.revenue_month;
  if (!monthlyRevenue.has(month)) {
    monthlyRevenue.set(month, { stripe: 0, paypal: 0, iap: 0, total: 0 });
  }
  monthlyRevenue.get(month).stripe = parseFloat(row.stripe_revenue);
}

for (const row of paypalData) {
  const month = row.revenue_month;
  if (!monthlyRevenue.has(month)) {
    monthlyRevenue.set(month, { stripe: 0, paypal: 0, iap: 0, total: 0 });
  }
  monthlyRevenue.get(month).paypal = parseFloat(row.paypal_revenue);
}

for (const row of iapData) {
  const month = row.revenue_month;
  if (!monthlyRevenue.has(month)) {
    monthlyRevenue.set(month, { stripe: 0, paypal: 0, iap: 0, total: 0 });
  }
  monthlyRevenue.get(month).iap = parseFloat(row.iap_revenue);
}

// 计算每月总收入
for (const [month, data] of monthlyRevenue.entries()) {
  data.total = data.stripe + data.paypal + data.iap;
}
```

---

## Step 2: Bot收入归因(Last-Touch 优化版)

### 查询2: Bot收入归因(完整查询参考 bot-margin-analysis.md)

```sql
-- ====================================================================
-- Bot 收入归因查询(Last-Touch 优化版)
-- 参考: bot-margin-analysis.md Step 1
-- ====================================================================

WITH orders AS (
  -- Stripe 订单
  SELECT
    user_id,
    amount,
    created_date,
    'stripe' as source
  FROM my_shell_prod.user_subscription_stripe_orders
  WHERE status = 'ORDER_STATUS_SUCCESS'
    AND amount >= 0
    AND created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'

  UNION ALL

  -- PayPal 订单
  SELECT
    user_id,
    CASE
      WHEN biz_type = 'ENERGY' AND paypal_price_id = '500' THEN 6.99
      WHEN biz_type = 'ENERGY' AND paypal_price_id = '2000' THEN 20.99
      ELSE amount
    END as amount,
    created_date,
    'paypal' as source
  FROM my_shell_prod.user_subscription_paypal_orders
  WHERE status = 'ORDER_STATUS_SUCCESS'
    AND created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'

  UNION ALL

  -- Apple IAP 订单
  SELECT
    user_id,
    CASE product_id
      WHEN 'PLAYER_MONTHLY' THEN 6.99
      WHEN 'PLAYER_YEARLY' THEN 58.99
      WHEN 'DEVELOPER_MONTHLY' THEN 59.99
      WHEN 'DEVELOPER_YEARLY' THEN 499.99
      WHEN '33OFF_DEVELOPER_MONTHLY' THEN 39.99
      WHEN 'energy_500' THEN 6.99
      WHEN 'energy_2000' THEN 20.99
      ELSE 0
    END as amount,
    created_date,
    'apple' as source
  FROM my_shell_prod.apple_used_transactions
  WHERE created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'
),

-- 获取任务数据(扩展时间窗口 ±7天)
tasks AS (
  SELECT
    user_id,
    slug_id,
    created_date
  FROM my_shell_prod.art_task
  WHERE status = 'done'
    AND created_date >= DATE_SUB('{start_date}', INTERVAL 7 DAY)
    AND created_date <= DATE_ADD('{end_date}', INTERVAL 7 DAY)
),

-- Last-touch 归因(订单前最后一个任务)
last_touch_before AS (
  SELECT
    user_id,
    amount,
    order_date,
    source,
    attributed_bot,
    attribution_type
  FROM (
    SELECT
      o.user_id,
      o.amount,
      o.created_date as order_date,
      o.source,
      t.slug_id as attributed_bot,
      'before' as attribution_type,
      ROW_NUMBER() OVER (
        PARTITION BY o.user_id, o.created_date
        ORDER BY t.created_date DESC
      ) as rn
    FROM orders o
    INNER JOIN tasks t
      ON o.user_id = t.user_id
      AND t.created_date <= o.created_date
  ) ranked
  WHERE rn = 1
),

-- First-touch 归因(订单后第一个任务)
first_touch_after AS (
  SELECT
    user_id,
    amount,
    order_date,
    source,
    attributed_bot,
    attribution_type
  FROM (
    SELECT
      o.user_id,
      o.amount,
      o.created_date as order_date,
      o.source,
      t.slug_id as attributed_bot,
      'after' as attribution_type,
      ROW_NUMBER() OVER (
        PARTITION BY o.user_id, o.created_date
        ORDER BY t.created_date ASC
      ) as rn
    FROM orders o
    INNER JOIN tasks t
      ON o.user_id = t.user_id
      AND t.created_date > o.created_date
    WHERE NOT EXISTS (
      SELECT 1
      FROM tasks t2
      WHERE t2.user_id = o.user_id
        AND t2.created_date <= o.created_date
    )
  ) ranked
  WHERE rn = 1
),

-- 合并两种归因结果
attributed_orders AS (
  SELECT * FROM last_touch_before
  UNION ALL
  SELECT * FROM first_touch_after
)

-- 按 bot 汇总归因收入
SELECT
  attributed_bot as slug_id,
  SUM(amount) as attributed_revenue,
  COUNT(*) as attributed_order_count
FROM attributed_orders
GROUP BY attributed_bot
ORDER BY attributed_revenue DESC;
```

### 查询2b: 按月按Bot收入归因(扩展版)

在上面查询的基础上,增加按月分组:

```sql
-- 在 attributed_orders 之后,增加月份字段
SELECT
  DATE_FORMAT(order_date, '%Y-%m') as revenue_month,
  attributed_bot as slug_id,
  SUM(amount) as attributed_revenue,
  COUNT(*) as attributed_order_count
FROM attributed_orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m'), attributed_bot
ORDER BY revenue_month, attributed_revenue DESC;
```

---

## Step 3: 订阅复购率分析

### 查询3: 用户订单次数统计(整体)

```sql
WITH all_orders AS (
  -- Stripe 订单
  SELECT
    user_id,
    created_date,
    'stripe' as source
  FROM my_shell_prod.user_subscription_stripe_orders
  WHERE status = 'ORDER_STATUS_SUCCESS'
    AND amount >= 0
    AND created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'

  UNION ALL

  -- PayPal 订单
  SELECT
    user_id,
    created_date,
    'paypal' as source
  FROM my_shell_prod.user_subscription_paypal_orders
  WHERE status = 'ORDER_STATUS_SUCCESS'
    AND created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'

  UNION ALL

  -- Apple IAP 订单
  SELECT
    user_id,
    created_date,
    'apple' as source
  FROM my_shell_prod.apple_used_transactions
  WHERE created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'
),

user_purchase_counts AS (
  SELECT
    user_id,
    COUNT(*) as purchase_count
  FROM all_orders
  GROUP BY user_id
)

SELECT
  COUNT(DISTINCT user_id) as total_paying_users,
  COUNT(DISTINCT CASE WHEN purchase_count >= 2 THEN user_id END) as repeat_purchase_users,
  ROUND(
    COUNT(DISTINCT CASE WHEN purchase_count >= 2 THEN user_id END) * 100.0 /
    COUNT(DISTINCT user_id),
    2
  ) as repeat_purchase_rate
FROM user_purchase_counts;
```

### 查询3b: 购买次数分布

```sql
-- 继续使用上面的 user_purchase_counts CTE
SELECT
  purchase_count,
  COUNT(*) as user_count
FROM user_purchase_counts
GROUP BY purchase_count
ORDER BY purchase_count;
```

---

## Step 4: 按月套餐销售统计

### 套餐等级定义

| 套餐类型 | 等级 | 对应 product_id |
|---------|------|----------------|
| FREE | 0 | - |
| Basic/PLAYER | 1 | PLAYER_MONTHLY, PLAYER_YEARLY, energy_500, energy_2000 |
| Pro | 2 | - |
| Developer | 3 | DEVELOPER_MONTHLY, DEVELOPER_YEARLY, 33OFF_DEVELOPER_MONTHLY |

### 查询4: 按月套餐销售统计(含复购和升级)

```sql
-- ====================================================================
-- 按月套餐销售统计:Basic订单、Pro订单、复购订单、升级订单
-- ====================================================================

WITH all_orders AS (
  -- Stripe 订单(需要从 user 表 JOIN 获取套餐类型)
  SELECT
    o.user_id,
    o.created_date as order_date,
    u.user_membership_type,
    'stripe' as source,
    CASE
      WHEN u.user_membership_type = 'BASIC' THEN 1
      WHEN u.user_membership_type = 'PRO' THEN 2
      WHEN u.user_membership_type = 'DEVELOPER' THEN 3
      ELSE 0
    END as plan_level
  FROM my_shell_prod.user_subscription_stripe_orders o
  LEFT JOIN my_shell_prod.user u ON o.user_id = u.id
  WHERE o.status = 'ORDER_STATUS_SUCCESS'
    AND o.amount >= 0
    AND o.created_date >= '{start_date} 00:00:00'
    AND o.created_date <= '{end_date} 23:59:59'

  UNION ALL

  -- PayPal 订单(能量包归为 Basic,订阅需要从 user 表获取)
  SELECT
    o.user_id,
    o.created_date as order_date,
    CASE
      WHEN o.biz_type = 'ENERGY' THEN 'BASIC'
      ELSE u.user_membership_type
    END as user_membership_type,
    'paypal' as source,
    CASE
      WHEN o.biz_type = 'ENERGY' THEN 1
      WHEN u.user_membership_type = 'BASIC' THEN 1
      WHEN u.user_membership_type = 'PRO' THEN 2
      WHEN u.user_membership_type = 'DEVELOPER' THEN 3
      ELSE 0
    END as plan_level
  FROM my_shell_prod.user_subscription_paypal_orders o
  LEFT JOIN my_shell_prod.user u ON o.user_id = u.id
  WHERE o.status = 'ORDER_STATUS_SUCCESS'
    AND o.created_date >= '{start_date} 00:00:00'
    AND o.created_date <= '{end_date} 23:59:59'

  UNION ALL

  -- Apple IAP 订单(从 product_id 判断套餐类型)
  SELECT
    user_id,
    created_date as order_date,
    CASE product_id
      WHEN 'PLAYER_MONTHLY' THEN 'BASIC'
      WHEN 'PLAYER_YEARLY' THEN 'BASIC'
      WHEN 'energy_500' THEN 'BASIC'
      WHEN 'energy_2000' THEN 'BASIC'
      WHEN 'DEVELOPER_MONTHLY' THEN 'DEVELOPER'
      WHEN 'DEVELOPER_YEARLY' THEN 'DEVELOPER'
      WHEN '33OFF_DEVELOPER_MONTHLY' THEN 'DEVELOPER'
      ELSE 'UNKNOWN'
    END as user_membership_type,
    'apple' as source,
    CASE product_id
      WHEN 'PLAYER_MONTHLY' THEN 1
      WHEN 'PLAYER_YEARLY' THEN 1
      WHEN 'energy_500' THEN 1
      WHEN 'energy_2000' THEN 1
      WHEN 'DEVELOPER_MONTHLY' THEN 3
      WHEN 'DEVELOPER_YEARLY' THEN 3
      WHEN '33OFF_DEVELOPER_MONTHLY' THEN 3
      ELSE 0
    END as plan_level
  FROM my_shell_prod.apple_used_transactions
  WHERE created_date >= '{start_date} 00:00:00'
    AND created_date <= '{end_date} 23:59:59'
),

-- 为每个订单标记:是否复购、是否升级
order_with_flags AS (
  SELECT
    o.user_id,
    o.order_date,
    DATE_FORMAT(o.order_date, '%Y-%m') as order_month,
    o.user_membership_type,
    o.plan_level,
    o.source,
    -- 复购标记:这个订单之前有过历史订单(在分析时间范围内)
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM all_orders o2
        WHERE o2.user_id = o.user_id
          AND o2.order_date < o.order_date
      ) THEN 1
      ELSE 0
    END as is_repeat,
    -- 升级标记:本次套餐等级 > 历史最高等级(在分析时间范围内)
    CASE
      WHEN o.plan_level > COALESCE((
        SELECT MAX(o3.plan_level)
        FROM all_orders o3
        WHERE o3.user_id = o.user_id
          AND o3.order_date < o.order_date
      ), 0) THEN 1
      ELSE 0
    END as is_upgrade
  FROM all_orders o
)

-- 按月汇总统计
SELECT
  order_month,
  -- Basic 订单数
  COUNT(CASE WHEN user_membership_type = 'BASIC' THEN 1 END) as basic_orders,
  -- Pro 订单数(包含 Pro 和 Developer)
  COUNT(CASE WHEN user_membership_type IN ('PRO', 'DEVELOPER') THEN 1 END) as pro_orders,
  -- 复购订单数
  SUM(is_repeat) as repeat_orders,
  -- 升级订单数
  SUM(is_upgrade) as upgrade_orders,
  -- 总订单数
  COUNT(*) as total_orders
FROM order_with_flags
GROUP BY order_month
ORDER BY order_month;
```

**说明**:
- **复购判断**: 用户在分析时间范围内(2025-10-15之后),这笔订单之前有过订单
- **升级判断**: 本次购买的套餐等级 > 分析时间范围内历史最高套餐等级
- **套餐等级**: Basic=1, Pro=2, Developer=3
- **PayPal ENERGY 订单**: 归类为 Basic(能量包)
- **Apple IAP**: 从 product_id 判断套餐类型

---

## Step 5: 可视化

### 图表1: 按月收入趋势(堆叠面积图)

```json
{
  "title": "2025年按月收入趋势(按渠道堆叠)",
  "axisXTitle": "月份",
  "axisYTitle": "收入 (USD)",
  "stack": true,
  "data": [
    { "time": "2025-01", "value": 5000.00, "group": "Stripe" },
    { "time": "2025-01", "value": 3000.00, "group": "PayPal" },
    { "time": "2025-01", "value": 2000.00, "group": "Apple IAP(未计折扣)" },
    { "time": "2025-02", "value": 6000.00, "group": "Stripe" },
    { "time": "2025-02", "value": 3500.00, "group": "PayPal" },
    { "time": "2025-02", "value": 2500.00, "group": "Apple IAP(未计折扣)" }
  ],
  "style": {
    "palette": ["#3B82F6", "#10B981", "#F59E0B"]
  }
}
```

使用工具: `mcp__mcphub__mcp-server-chart-generate_area_chart`

### 图表2: Bot收入贡献(Top 10,柱状图)

```json
{
  "title": "Top 10 Bot收入贡献(Last-Touch优化版归因)",
  "axisXTitle": "收入 (USD)",
  "axisYTitle": "Bot",
  "data": [
    { "category": "ghibli-diffusion", "value": 15000.50 },
    { "category": "flux-dev", "value": 12000.30 },
    { "category": "sdxl-lightning", "value": 10000.00 },
    { "category": "anime-diffusion", "value": 8500.00 },
    { "category": "portrait-master", "value": 7200.00 }
  ],
  "style": {
    "palette": ["#8B5CF6"]
  }
}
```

使用工具: `mcp__mcphub__mcp-server-chart-generate_bar_chart`

### 图表3: 按月套餐销售统计(堆叠柱状图)

```json
{
  "title": "按月套餐销售统计",
  "axisXTitle": "订单数",
  "axisYTitle": "月份",
  "stack": true,
  "data": [
    { "category": "2025-10", "value": 150, "group": "Basic" },
    { "category": "2025-10", "value": 80, "group": "Pro/Developer" },
    { "category": "2025-11", "value": 200, "group": "Basic" },
    { "category": "2025-11", "value": 120, "group": "Pro/Developer" }
  ],
  "style": {
    "palette": ["#3B82F6", "#8B5CF6"]
  }
}
```

使用工具: `mcp__mcphub__mcp-server-chart-generate_bar_chart`

### 图表4: 按月复购和升级订单(折线图)

```json
{
  "title": "按月复购和升级订单趋势",
  "axisXTitle": "月份",
  "axisYTitle": "订单数",
  "data": [
    { "time": "2025-10", "value": 50, "group": "复购订单" },
    { "time": "2025-10", "value": 20, "group": "升级订单" },
    { "time": "2025-11", "value": 80, "group": "复购订单" },
    { "time": "2025-11", "value": 35, "group": "升级订单" }
  ],
  "style": {
    "palette": ["#10B981", "#F59E0B"]
  }
}
```

使用工具: `mcp__mcphub__mcp-server-chart-generate_line_chart`

---

## 输出格式

### 汇总报告

```
======================== 2025年收入分析报告 ========================
分析时间范围: {start_date} 至 {end_date}
分析周期: {days}天

======================== 收入汇总 ========================
总收入: ${total_revenue}
  - Stripe: ${total_stripe} ({stripe_pct}%)
  - PayPal: ${total_paypal} ({paypal_pct}%)
  - Apple IAP: ${total_iap} ({iap_pct}%) [未计折扣]

按月收入:
  - 2025-01: ${month_01_revenue}
  - 2025-02: ${month_02_revenue}
  - 2025-03: ${month_03_revenue}
  ...

月均收入: ${avg_monthly_revenue}
最高收入月份: {highest_month} (${highest_revenue})
最低收入月份: {lowest_month} (${lowest_revenue})

======================== Bot收入贡献(Top 10)========================
1. {bot_1_name} ({bot_1_slug}): ${bot_1_revenue} ({bot_1_pct}%)
2. {bot_2_name} ({bot_2_slug}): ${bot_2_revenue} ({bot_2_pct}%)
3. {bot_3_name} ({bot_3_slug}): ${bot_3_revenue} ({bot_3_pct}%)
...

归因说明: 使用 Last-Touch 优化版归因模型(±7天窗口)
归因覆盖率: {coverage_rate}%
未归因收入: ${unattributed_revenue} ({unattributed_pct}%)

======================== 订阅复购分析 ========================
总付费用户数: {total_paying_users}
复购用户数: {repeat_purchase_users}
订阅复购率: {repeat_purchase_rate}%

购买次数分布:
  - 1次: {count_1} 用户 ({pct_1}%)
  - 2次: {count_2} 用户 ({pct_2}%)
  - 3次: {count_3} 用户 ({pct_3}%)
  - 4次及以上: {count_4plus} 用户 ({pct_4plus}%)

======================== 按月套餐销售统计 ========================
{month} 月:
  - Basic 订单: {basic_orders}
  - Pro/Developer 订单: {pro_orders}
  - 复购订单: {repeat_orders} ({repeat_pct}%)
  - 升级订单: {upgrade_orders} ({upgrade_pct}%)
  - 总订单: {total_orders}

[重复显示每个月的数据...]

总计(全周期):
  - Basic 订单: {total_basic_orders}
  - Pro/Developer 订单: {total_pro_orders}
  - 复购订单: {total_repeat_orders} ({total_repeat_pct}%)
  - 升级订单: {total_upgrade_orders} ({total_upgrade_pct}%)

======================== 关键洞察 ========================
1. 收入增长趋势: [上升/平稳/下降]
2. 主力渠道: [Stripe/PayPal/Apple IAP]
3. Top 3 Bot贡献了 {top3_pct}% 的归因收入
4. 复购率 {repeat_rate}% [高于/低于]行业平均水平
5. [Basic/Pro] 套餐用户占比最高
```

### CSV 导出格式

#### 按月收入

```csv
月份,Stripe收入,PayPal收入,IAP收入,总收入
2025-10,5000.00,3000.00,2000.00,10000.00
2025-11,6000.00,3500.00,2500.00,12000.00
2025-12,7000.00,4000.00,3000.00,14000.00
```

#### Bot收入贡献

```csv
Bot Slug,Bot名称,归因收入,归因订单数,收入占比(%)
ghibli-diffusion,Ghibli Diffusion,15000.50,500,18.5
flux-dev,Flux Dev,12000.30,400,14.8
```

#### 按月套餐销售统计

```csv
月份,Basic订单,Pro订单,复购订单,升级订单,总订单
2025-10,150,80,50,20,230
2025-11,200,120,80,35,320
2025-12,250,150,100,45,400
```

---

## 关键注意事项

1. **时间范围**:
   - 起始日期为 2025-10-15(`art_task` 表第一条数据的日期)
   - 结束日期为今天
   - 确保所有查询使用一致的时间范围

2. **Apple IAP 收入**:
   - 按原价计算,**未计算折扣码优惠**
   - ⚠️ **数据完整性问题**: `apple_used_transactions` 表从 2025-12-17 开始有数据
   - **影响范围**: 2025-10 和 2025-11 月的 Apple IAP 收入为 0(数据缺失,非真实值)
   - 实际 IAP 收入可能高于统计值(折扣优惠 + 历史数据缺失)
   - 图表中应标注此说明

3. **Bot收入归因**:
   - 使用 Last-Touch 优化版归因模型
   - 任务窗口扩展 ±7天(订单前7天 + 订单后7天)
   - 预期归因覆盖率: 70-80%
   - 未归因订单为正常现象(20-30%)

4. **订阅复购率定义**:
   - 分析时间范围内(2025-10-15之后)购买过2次及以上的用户比例
   - 不区分续费 vs 追加购买
   - 包含所有渠道(Stripe + PayPal + Apple IAP)

5. **按月套餐销售统计**:
   - **Basic 订单**: 包含 PLAYER 套餐和能量包(energy_500, energy_2000)
   - **Pro 订单**: 包含 Pro 和 Developer 套餐
   - **复购判断**: 用户在分析时间范围内(2025-10-15之后),这笔订单之前有过订单
   - **升级判断**: 本次购买的套餐等级 > 分析时间范围内历史最高套餐等级
   - **套餐等级**: Basic=1, Pro=2, Developer=3

6. **套餐类型识别**:
   - Stripe 订单:从 `user.user_membership_type` 获取
   - PayPal 订单:`biz_type='ENERGY'` 为 Basic,其他从 `user.user_membership_type` 获取
   - Apple IAP 订单:从 `product_id` 判断(PLAYER/energy 为 Basic,DEVELOPER 为 Developer)

7. **数据质量**:
   - PayPal ENERGY 订单需特殊处理价格(500→$6.99, 2000→$20.99)
   - 排除测试订单和退款
   - 确认时区一致性(Asia/Shanghai)

8. **性能优化**:
   - Bot归因查询使用 SQL 层归因(参考 bot-margin-analysis.md)
   - 避免传输百万级任务数据
   - 预计查询时间: 15-45秒

---

## 相关文档

- **gross-margin-analysis.md**: 整体毛利率分析
- **bot-margin-analysis.md**: Bot 级别毛利率分析(包含归因模型详解)
- **cost-trend-chart.md**: 成本趋势分析

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.