← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

数据分析

门店数据分析专家

person作者: user_193430aehubcommunity

门店数据分析专家 Skill

版本: v1.0.0
定位: 营运分析专家,为门店及营运团队提供专业的日度数据分析报告
输出: 腾讯在线文档(Markdown格式)


核心功能

| 序号 | 分析维度 | 说明 | |:----:|----------|------| | 1 | TC/AC分析 | 当日客单价(TC)与平均消费额(AC)统计 | | 2 | 类别销售数据 | 按产品类别汇总销售数据 | | 3 | 核心产品分析 | 海盐可颂、玛格丽特香肠、椒劲香肠日销量 | | 4 | TOP10产品 | 销量排名前10产品及数量 | | 5 | 时段高峰分析 | 早/中/晚高峰数据,含同比环比 | | 6 | 客单价分析 | 客单价分布及趋势分析 | | 7 | 类别占比环比 | 各类别销售占比环比分析,找原因 | | 8 | 天气影响分析 | 天气因素对销售的影响 | | 9 | 会员销售占比 | 会员与非会员销售占比 | | 10 | 营运建议 | 基于数据分析的改善建议 | | 11 | 在线文档 | 生成腾讯文档并分享链接 |


触发方式

用户可以通过以下方式触发分析:

帮我分析今天的门店数据
生成昨日营运报告
门店数据分析报告
今日销售分析
营运日报

数据源说明

期望数据格式

分析需要以下数据文件,请确保数据文件包含以下字段:

1. 销售明细表(sales_detail.xlsx) | 字段 | 类型 | 说明 | |------|------|------| | 日期 | date | 销售日期 | | 门店 | string | 门店名称/编号 | | 类别 | string | 产品类别 | | 产品名称 | string | 产品名称 | | 数量 | int | 销售数量 | | 销售净额 | float | 实际销售收入(净额) | | 会员价 | float | 会员消费金额 | | 时段 | string | 早市/中市/晚市 | | 天气 | string | 当日天气 |

2. 门店基础表(store_info.xlsx) | 字段 | 类型 | 说明 | |------|------|------| | 门店编号 | string | 门店唯一标识 | | 门店名称 | string | 门店名称 | | 门店类型 | string | 旗舰店/标准店/社区店等 |

3. 天气数据表(weather.xlsx) | 字段 | 类型 | 说明 | |------|------|------| | 日期 | date | 日期 | | 天气 | string | 晴/雨/阴等 | | 温度 | int | 当日温度(℃) | | 恶劣天气 | bool | 是否恶劣天气 |


分析流程

1. 数据加载与验证

import pandas as pd
from datetime import datetime, timedelta

def load_and_validate_data(data_dir):
    """加载并验证数据文件"""
    # 加载销售数据
    sales = pd.read_excel(f'{data_dir}/sales_detail.xlsx')
    sales['日期'] = pd.to_datetime(sales['日期'])
    
    # 验证必填字段
    required_fields = ['日期', '门店', '类别', '产品名称', '数量', '销售净额']
    missing = [f for f in required_fields if f not in sales.columns]
    if missing:
        raise ValueError(f"数据缺失必填字段: {missing}")
    
    return sales

2. TC/AC 分析

def analyze_tc_ac(sales, date):
    """计算TC客单价和AC平均消费额"""
    df = sales[sales['日期'] == date]
    
    total_sales = df['销售净额'].sum()  # 销售净额
    total_count = df['数量'].sum()      # 总数量
    order_count = len(df)               # 订单数
    
    tc = total_sales / total_count if total_count > 0 else 0  # 客单价
    ac = total_sales / order_count if order_count > 0 else 0  # 平均消费额
    
    return {
        'TC': round(tc, 2),
        'AC': round(ac, 2),
        '总销售净额': round(total_sales, 2),
        '总数量': int(total_count),
        '订单数': order_count
    }

3. 核心产品分析

def analyze_core_products(sales, date):
    """分析核心产品:海盐可颂、玛格丽特香肠、椒劲香肠"""
    core_items = ['海盐可颂', '玛格丽特香肠', '椒劲香肠']
    df = sales[(sales['日期'] == date) & (sales['产品名称'].isin(core_items))]
    
    # 计算今日销量
    today_sales = df.groupby('产品名称')['数量'].sum()
    
    # 计算上周同期销量
    last_week_date = pd.to_datetime(date) - timedelta(days=7)
    df_last_week = sales[(sales['日期'] == last_week_date) & 
                          (sales['产品名称'].isin(core_items))]
    last_week_sales = df_last_week.groupby('产品名称')['数量'].sum()
    
    # 构建结果
    result = []
    for item in core_items:
        today = today_sales.get(item, 0)
        last_week = last_week_sales.get(item, 0)
        change = (today - last_week) / last_week * 100 if last_week > 0 else 0
        
        result.append({
            '产品': item,
            '今日销量': int(today),
            '上周同期': int(last_week),
            '环比变化': f"{change:+.1f}%"
        })
    
    return result

4. TOP10 产品分析

def analyze_top10_products(sales, date):
    """分析销量TOP10产品"""
    df = sales[sales['日期'] == date]
    
    top10 = df.groupby('产品名称').agg({
        '数量': 'sum',
        '销售净额': 'sum'
    }).sort_values('数量', ascending=False).head(10)
    
    result = []
    for i, (product, row) in enumerate(top10.iterrows(), 1):
        result.append({
            '排名': i,
            '产品': product,
            '销量': int(row['数量']),
            '销售净额': round(row['销售净额'], 2)
        })
    
    return result

5. 时段高峰分析

def analyze_time_periods(sales, date):
    """分析早中晚高峰数据"""
    df = sales[sales['日期'] == date]
    
    # 定义时段
    periods = {
        '早市': ['05:00-11:00', (5, 11)],
        '午市': ['11:00-14:00', (11, 14)],
        '晚市': ['14:00-22:00', (14, 22)]
    }
    
    # 假设有时间字段,按时间分组
    result = df.groupby('时段').agg({
        '销售净额': 'sum',
        '数量': 'sum'
    }).reset_index()
    
    total = result['销售净额'].sum()
    result['占比'] = (result['销售净额'] / total * 100).round(1)
    
    # 计算环比(上周同期)
    last_week_date = pd.to_datetime(date) - timedelta(days=7)
    df_last = sales[sales['日期'] == last_week_date]
    last_week_result = df_last.groupby('时段')['销售净额'].sum()
    
    result['上周同期'] = result['时段'].map(last_week_result).fillna(0)
    result['环比'] = ((result['销售净额'] - result['上周同期']) / 
                      result['上周同期'] * 100).round(1).fillna(0)
    
    return result

6. 客单价分析

def analyze_customer_price(sales, date):
    """客单价分析"""
    df = sales[sales['日期'] == date]
    
    # 按订单/小票计算客单价(这里简化为按产品记录)
    return {
        '平均客单价': round(df['销售净额'].mean(), 2),
        '中位数客单价': round(df['销售净额'].median(), 2),
        '最高客单价': round(df['销售净额'].max(), 2),
        '最低客单价': round(df['销售净额'].min(), 2),
        '客单价标准差': round(df['销售净额'].std(), 2)
    }

7. 类别占比环比分析

def analyze_category_ratio(sales, date):
    """类别占比环比分析"""
    current = sales[sales['日期'] == date]
    last_week = pd.to_datetime(date) - timedelta(days=7)
    compare = sales[sales['日期'] == last_week]
    
    # 计算本期占比
    current_ratio = current.groupby('类别')['销售净额'].sum()
    current_ratio = (current_ratio / current_ratio.sum() * 100).round(1)
    
    # 计算上期占比
    compare_ratio = compare.groupby('类别')['销售净额'].sum()
    compare_ratio = (compare_ratio / compare_ratio.sum() * 100).round(1)
    
    # 计算变化
    ratio_change = (current_ratio - compare_ratio).sort_values(ascending=False)
    
    result = []
    for category in current_ratio.index:
        current_pct = current_ratio.get(category, 0)
        compare_pct = compare_ratio.get(category, 0)
        change = current_pct - compare_pct
        
        # 分析原因
        if change > 0:
            reason = f"占比上升 {change:+.1f}%,需关注增长来源"
        elif change < 0:
            reason = f"占比下降 {change:+.1f}%,需分析下滑原因"
        else:
            reason = "占比持平"
        
        result.append({
            '类别': category,
            '本期占比': f"{current_pct}%",
            '上期占比': f"{compare_pct}%",
            '变化': f"{change:+.1f}%",
            '原因分析': reason
        })
    
    return result

8. 天气影响分析

def analyze_weather_impact(sales, weather, date):
    """天气对销售影响分析"""
    # 获取当日天气
    weather_data = weather[weather['日期'] == date]
    if len(weather_data) == 0:
        return {'天气': '未知', '建议': '暂无天气数据'}
    
    today_weather = weather_data.iloc[0]
    
    # 获取历史同期天气数据
    df = sales[sales['日期'] == date]
    total_sales = df['销售净额'].sum()
    
    # 简化分析:恶劣天气 vs 正常天气
    is_bad = today_weather.get('恶劣天气', False)
    weather_type = today_weather.get('天气', '未知')
    
    suggestions = []
    if is_bad or '雨' in str(weather_type):
        suggestions.append('建议加强外卖渠道推广')
        suggestions.append('可推出雨天专属优惠')
    if '高温' in str(weather_type) or '炎热' in str(weather_type):
        suggestions.append('冷饮/冰品需求增加,补货优先')
    if '节假日' in str(weather_type):
        suggestions.append('节假日客流增加,备货量建议+20%')
    
    return {
        '天气': weather_type,
        '温度': f"{today_weather.get('温度', 'N/A')}℃",
        '恶劣天气': '是' if is_bad else '否',
        '当日销售净额': f"¥{total_sales:,.2f}",
        '建议': suggestions
    }

9. 会员销售占比

def analyze_member_ratio(sales, date):
    """会员销售占比分析"""
    df = sales[sales['日期'] == date]
    
    member_sales = df['会员价'].sum() if '会员价' in df.columns else 0
    total_sales = df['销售净额'].sum()
    non_member = total_sales - member_sales
    
    member_ratio = member_sales / total_sales * 100 if total_sales > 0 else 0
    
    suggestions = []
    if member_ratio < 30:
        suggestions.append('会员占比较低,建议加强会员推广')
    elif member_ratio > 60:
        suggestions.append('会员活跃度高,可推出会员专属活动')
    
    return {
        '会员销售': f"¥{member_sales:,.2f}",
        '会员占比': f"{member_ratio:.1f}%",
        '非会员销售': f"¥{non_member:,.2f}",
        '非会员占比': f"{100-member_ratio:.1f}%",
        '建议': suggestions
    }

10. 生成营运建议

def generate_suggestions(analysis_result):
    """基于分析结果生成营运建议"""
    suggestions = []
    
    # TC/AC建议
    if 'tc_ac' in analysis_result:
        tc = analysis_result['tc_ac'].get('TC', 0)
        if tc < 20:
            suggestions.append('客单价偏低,建议推出套餐组合提升连带率')
        elif tc > 50:
            suggestions.append('客单价表现优秀,保持当前产品结构')
    
    # 核心产品建议
    if 'core_products' in analysis_result:
        for p in analysis_result['core_products']:
            if '下降' in str(p):
                suggestions.append(f"【{p['产品']}】销量下滑,需关注原因")
    
    # 时段建议
    if 'periods' in analysis_result:
        periods_df = analysis_result['periods']
        if '早市' in periods_df['时段'].values:
            morning = periods_df[periods_df['时段']=='早市']['占比'].values
            if len(morning) > 0 and morning[0] < 20:
                suggestions.append('早市销售占比偏低,建议推出早餐套餐')
    
    # 会员建议
    if 'member' in analysis_result:
        if '会员占比较低' in str(analysis_result['member'].get('建议', [])):
            suggestions.append('加强会员注册推广,提升会员粘性')
    
    return suggestions if suggestions else ['各项指标表现正常,继续保持']

报告生成模板

Markdown 报告结构

# 🏪 门店日度营运分析报告

**报告日期:** {report_date}  
**生成时间:** {generate_time}  
**分析门店:** {store_name}

---

## 📊 一、核心指标概览

| 指标 | 本期 | 上周同期 | 环比变化 |
|------|------|----------|----------|
| TC(客单价) | ¥{tc} | ¥{tc_last_week} | {tc_change}% |
| AC(平均消费额) | ¥{ac} | ¥{ac_last_week} | {ac_change}% |
| 总销售额(净额) | ¥{total_sales} | ¥{sales_last_week} | {sales_change}% |
| 总销售数量 | {qty} | {qty_last_week} | {qty_change}% |

---

## 📈 二、类别销售数据

| 类别 | 销售净额(元) | 销售数量 | 占比 |
|------|-------------|----------|------|
{category_rows}

---

## 🔑 三、核心产品分析

| 产品名称 | 今日销量 | 上周同期 | 环比变化 |
|----------|----------|----------|----------|
{core_product_rows}

---

## 🏆 四、TOP10 热销产品

| 排名 | 产品名称 | 销售数量 | 销售净额(元) |
|------|----------|----------|-------------|
{top10_rows}

---

## ⏰ 五、时间段分析

| 时段 | 销售净额(元) | 占比 | 上周同期 | 环比变化 |
|------|-------------|------|----------|----------|
{period_rows}

---

## 💰 六、客单价分析

| 指标 | 数值 |
|------|------|
| 平均客单价 | ¥{avg_tc} |
| 中位数客单价 | ¥{median_tc} |
| 最高客单价 | ¥{max_tc} |
| 最低客单价 | ¥{min_tc} |

---

## 📊 七、销售类别占比环比分析

| 类别 | 本期占比 | 上期占比 | 变化 | 原因分析 |
|------|----------|----------|------|----------|
{category_ratio_rows}

---

## 🌤️ 八、天气对销售影响分析

| 日期 | 天气 | 温度 | 恶劣天气 |
|------|------|------|----------|
| {date} | {weather} | {temp} | {bad_weather} |

**建议:** {weather_suggestions}

---

## 👥 九、会员销售占比

| 指标 | 数值 | 占比 |
|------|------|------|
| 会员销售 | {member_sales} | {member_ratio}% |
| 非会员销售 | {non_member_sales} | {non_member_ratio}% |

---

## 💡 十、营运建议与方案

{key_suggestions}

---

**报告生成:** 门店数据分析专家 v1.0  
**统计口径:** 销售净额(已扣除退款、退货)

执行流程

flowchart TD
    A[用户触发分析] --> B[确认分析日期和门店]
    B --> C[加载数据文件]
    C --> D{数据完整性检查}
    D -->|通过| E[执行11项分析]
    D -->|缺失| F[提示补充数据]
    F --> C
    E --> G[生成Markdown报告]
    G --> H[调用腾讯文档API创建文档]
    H --> I[分享文档链接]
    I --> J[完成]

腾讯文档输出

分析完成后,自动创建腾讯在线文档:

from qclaw_tdoc_mcp_call import create_smartcanvas_by_mdx

# 生成报告后上传到腾讯文档
doc_result = create_smartcanvas_by_mdx(
    title=f"门店日度分析报告_{date}",
    mdx=report_content,
    content_format="mdx"
)

# 返回文档链接
return doc_result['docUrl']

注意事项

  1. 数据完整性:确保销售数据包含完整字段,特别是销售净额字段
  2. 金额口径:所有金额按销售净额统计(扣除退款、退货)
  3. 占比分析:重点关注各类别占比变化及原因
  4. 数据时效:建议每日营业结束后进行当日分析
  5. 文档权限:生成的腾讯文档建议设置为营运团队可查看

错误处理

| 错误情况 | 处理方式 | |----------|----------| | 数据文件不存在 | 提示用户上传数据文件 | | 数据字段缺失 | 显示缺失字段,提示补充 | | 数据日期不完整 | 使用已有数据,标注数据缺失 | | 腾讯文档创建失败 | 降级为本地Markdown文件输出 |


创建日期:2026-09-04