Files
training-system/training/workspace/specs/V2-StatisticsCenter.md
2026-05-12 12:24:11 +08:00

555 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# V2 统计报表中心 - 产品需求文档
> 版本V2.0.0-draft
> 作者Product Agent
> 日期2026-02-04
> 状态:待评审
---
## 一、功能概述
### 1.1 背景与目标
**背景**V1 版本完成了培训系统的基础功能,但管理层无法量化培训效果,讲师无法追踪学员学习情况,缺乏数据支撑决策。
**目标**:构建统计报表中心,让培训效果可量化、可追踪、可对比。
### 1.2 目标用户
| 角色 | 核心诉求 |
|------|----------|
| **管理员** | 全局数据概览,跨部门对比,发现问题部门 |
| **讲师** | 本部门数据,学员学习进度,考试成绩分布 |
| **学员** | 个人学习记录,成绩趋势,与平均水平对比 |
### 1.3 功能边界
| 范围 | 说明 |
|------|------|
| **包含** | 数据看板、培训统计、考试统计、学员统计、数据导出 |
| **不包含** | 实时监控、预测分析、自定义报表设计器 |
---
## 二、功能清单
### 2.1 模块总览
```
统计报表中心
├── 2.1 数据概览看板
│ ├── 关键指标卡片
│ ├── 趋势图表
│ └── 快捷入口
├── 2.2 培训统计
│ ├── 培训计划完成率
│ ├── 知识学习统计
│ └── 部门培训排名
├── 2.3 考试统计
│ ├── 考试通过率
│ ├── 成绩分布
│ └── 题目正确率分析
├── 2.4 学员统计
│ ├── 学员学习排行
│ ├── 个人学习报告
│ └── 学习时长统计
└── 2.5 数据导出
├── Excel 导出
└── 定期报表
```
---
## 三、详细需求
### 3.1 数据概览看板
#### 3.1.1 功能描述
为不同角色提供个性化的数据概览首页,一目了然掌握关键指标。
#### 3.1.2 管理员看板
**关键指标卡片4个**
| 指标 | 计算方式 | 对比 |
|------|----------|------|
| 总学员数 | 状态=启用的学员数量 | 较上月增减 |
| 本月培训完成率 | 本月已完成培训人次 / 本月应完成培训人次 | 较上月变化 |
| 本月考试通过率 | 本月通过考试人次 / 本月参考人次 | 较上月变化 |
| 活跃学员数 | 本月有学习行为的学员数 | 较上月增减 |
**趋势图表**
- 近6个月培训完成率趋势折线图
- 近6个月考试通过率趋势折线图
- 部门培训完成率排名横向柱状图TOP 8
**快捷入口**
- 查看详细培训报表
- 查看详细考试报表
- 导出月度汇总
#### 3.1.3 讲师看板
**关键指标卡片4个**
| 指标 | 范围 |
|------|------|
| 本部门学员数 | 本部门 |
| 本部门培训完成率 | 本部门本月 |
| 本部门考试通过率 | 本部门本月 |
| 待批阅数 | 如有主观题V2暂无 |
**趋势图表**
- 本部门近6个月培训完成率趋势
- 本部门学员学习进度分布(饼图:已完成/进行中/未开始)
#### 3.1.4 学员看板
**关键指标卡片4个**
| 指标 | 说明 |
|------|------|
| 我的培训进度 | 已完成/总计划数 |
| 我的考试成绩 | 最近一次考试分数 |
| 学习排名 | 在本部门的排名 |
| 累计学习时长 | 总学习时长 |
**图表**
- 我的成绩趋势近5次考试
- 与部门平均分对比
#### 3.1.5 验收标准
```gherkin
Feature: 数据概览看板
Scenario: 管理员查看全局看板
Given 我是管理员角色
When 我进入统计报表中心
Then 我应该看到4个关键指标卡片
And 我应该看到培训完成率趋势图
And 我应该看到部门排名图表
And 所有数据应反映全平台数据
Scenario: 讲师查看部门看板
Given 我是讲师角色
When 我进入统计报表中心
Then 所有数据应仅包含本部门数据
And 我不应该看到其他部门的数据
Scenario: 指标卡片显示环比变化
Given 当前月份培训完成率为 80%
And 上月培训完成率为 75%
When 我查看培训完成率卡片
Then 应显示 "+5%" 的环比增长标记
And 增长应显示为绿色
```
---
### 3.2 培训统计
#### 3.2.1 培训计划完成率
**筛选条件**
- 时间范围:本月/本季度/本年度/自定义
- 部门:全部/指定部门(管理员可选)
- 培训计划:全部/指定计划
**统计维度**
| 维度 | 指标 |
|------|------|
| 按计划 | 计划名称、应参加人数、实际完成人数、完成率 |
| 按部门 | 部门名称、计划数、完成率、排名 |
| 按时间 | 月度完成率趋势 |
**列表展示**
| 培训计划 | 部门 | 应参加 | 已完成 | 完成率 | 状态 |
|----------|------|--------|--------|--------|------|
| 2026Q1安全培训 | 救援一部 | 50 | 45 | 90% | 进行中 |
| 新员工入职培训 | 救援二部 | 20 | 20 | 100% | 已结束 |
#### 3.2.2 知识学习统计
**统计内容**
- 知识总数、已发布数
- 学习总人次
- 热门知识 TOP 10按学习人次
- 最少学习知识(提醒优化或下架)
#### 3.2.3 验收标准
```gherkin
Feature: 培训统计
Scenario: 按部门查看培训完成率
Given 我是管理员
When 我选择按部门维度查看
Then 应显示所有部门的培训完成率列表
And 列表应按完成率降序排列
And 应显示部门排名
Scenario: 筛选指定时间范围
Given 我在培训统计页面
When 我选择时间范围为 "2026年1月"
Then 所有数据应仅包含该月份的培训数据
Scenario: 导出培训报表
Given 我在培训统计页面
When 我点击导出按钮
Then 应下载 Excel 文件
And 文件应包含当前筛选条件下的所有数据
```
---
### 3.3 考试统计
#### 3.3.1 考试通过率
**筛选条件**
- 时间范围:本月/本季度/本年度/自定义
- 部门:全部/指定部门
- 考试:全部/指定考试
**统计指标**
| 指标 | 说明 |
|------|------|
| 参考人数 | 实际参加考试的人数 |
| 通过人数 | 分数 >= 及格线的人数 |
| 通过率 | 通过人数 / 参考人数 |
| 平均分 | 所有考生的平均分数 |
| 最高分 / 最低分 | 分数极值 |
#### 3.3.2 成绩分布
**图表展示**
- 分数段分布柱状图0-59 / 60-69 / 70-79 / 80-89 / 90-100
- 各部门平均分对比(横向柱状图)
**列表展示**
| 考试名称 | 参考人数 | 通过率 | 平均分 | 最高分 | 最低分 |
|----------|----------|--------|--------|--------|--------|
| 安全规范考核 | 120 | 85% | 78.5 | 98 | 42 |
| 月度技能测试 | 95 | 72% | 71.2 | 100 | 35 |
#### 3.3.3 题目正确率分析
**功能描述**:分析每道题的正确率,发现难题和易错题。
**统计内容**
| 字段 | 说明 |
|------|------|
| 题目内容 | 题干摘要前50字 |
| 题型 | 单选/多选/判断 |
| 作答人次 | 该题被作答的总次数 |
| 正确率 | 正确人次 / 作答人次 |
| 错误选项分布 | 各错误选项的选择占比 |
**排序**
- 默认按正确率升序(易错题优先)
- 可切换按作答人次排序
**用途**
- 正确率 < 30% 的题目可能题目有问题或知识点难度大
- 正确率 > 95% 的题目:可能过于简单
#### 3.3.4 验收标准
```gherkin
Feature: 考试统计
Scenario: 查看考试成绩分布
Given 我在考试统计页面
When 我选择某场考试
Then 应显示分数段分布柱状图
And 应显示通过率、平均分等指标
Scenario: 查看题目正确率
Given 我在考试统计页面
When 我点击 "题目分析"
And 选择某场考试
Then 应显示该考试所有题目的正确率
And 默认按正确率升序排列
And 可以查看每道题的错误选项分布
Scenario: 识别易错题
Given 某道题的正确率为 25%
When 我查看题目分析列表
Then 该题应标记为 "易错题"
And 应显示主要错误选项
```
---
### 3.4 学员统计
#### 3.4.1 学员学习排行
**排行维度**
- 学习时长排行(本月/本季度)
- 考试成绩排行(平均分/最高分)
- 培训完成数排行
**展示内容**
| 排名 | 学员 | 部门 | 学习时长 | 完成培训数 | 平均分 |
|------|------|------|----------|------------|--------|
| 1 | 张三 | 救援一部 | 45h | 8 | 92 |
| 2 | 李四 | 救援二部 | 42h | 7 | 88 |
**范围控制**
- 管理员:可查看全平台排行
- 讲师:仅可查看本部门排行
- 学员:可查看本部门排行,自己会高亮显示
#### 3.4.2 个人学习报告
**入口**
- 讲师点击学员姓名进入
- 学员点击"我的学习报告"进入
**报告内容**
| 模块 | 内容 |
|------|------|
| 基本信息 | 姓名、部门、入职时间、角色 |
| 学习概览 | 累计学习时长、完成培训数、参加考试数 |
| 培训记录 | 参加的培训计划列表,包含进度和状态 |
| 考试记录 | 参加的考试列表,包含成绩和是否通过 |
| 成绩趋势 | 近10次考试成绩折线图 |
| 能力雷达图 | 按知识分类的掌握程度(基于考试正确率) |
#### 3.4.3 学习时长统计
**统计规则**
- 知识学习:从打开到关闭/切换的时长上限30分钟/次)
- 视频学习:实际播放时长
- 考试时长:从开始到交卷的时长
**展示**
- 个人:日/周/月学习时长统计
- 部门:部门平均学习时长、学习时长分布
#### 3.4.4 验收标准
```gherkin
Feature: 学员统计
Scenario: 查看学习排行榜
Given 我是讲师
When 我进入学员排行榜页面
Then 应显示本部门学员排行
And 不应显示其他部门学员
Scenario: 查看个人学习报告
Given 我是讲师
When 我点击某学员的姓名
Then 应进入该学员的学习报告页面
And 应显示该学员的培训记录
And 应显示该学员的考试记录
And 应显示成绩趋势图
Scenario: 学员查看自己的报告
Given 我是学员
When 我点击 "我的学习报告"
Then 应显示我的学习报告
And 应显示我在部门中的排名
```
---
### 3.5 数据导出
#### 3.5.1 Excel 导出
**支持导出的报表**
| 报表 | 内容 | 权限 |
|------|------|------|
| 培训完成率报表 | 按计划/部门的完成率明细 | 管理员、讲师 |
| 考试成绩报表 | 学员成绩明细 | 管理员、讲师 |
| 学员学习报表 | 学员学习时长和完成情况 | 管理员、讲师 |
| 题目分析报表 | 题目正确率明细 | 管理员、讲师 |
**导出规则**
- 导出当前筛选条件下的数据
- 文件名格式:`报表类型_日期_导出人.xlsx`
- 单次导出上限10000 条记录
#### 3.5.2 验收标准
```gherkin
Feature: 数据导出
Scenario: 导出考试成绩报表
Given 我在考试统计页面
And 当前筛选条件为 "2026年1月"
When 我点击导出按钮
Then 应下载 Excel 文件
And 文件名应为 "考试成绩报表_20260204_张三.xlsx"
And 数据应仅包含20261月的考试成绩
Scenario: 导出数据量限制
Given 当前筛选条件下有 15000 条记录
When 我点击导出按钮
Then 应提示 "数据量超过限制,请缩小筛选范围"
```
---
## 四、数据模型(建议)
### 4.1 新增统计表(可选,用于性能优化)
#### 日统计汇总表 (stat_daily_summary)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| stat_date | Date | 统计日期 |
| department_id | Long | 部门ID0=全平台) |
| total_users | Integer | 学员总数 |
| active_users | Integer | 活跃学员数 |
| training_complete_count | Integer | 培训完成人次 |
| exam_pass_count | Integer | 考试通过人次 |
| exam_total_count | Integer | 考试参与人次 |
| total_learning_minutes | Long | 总学习时长(分钟) |
#### 学习时长记录表 (stat_learning_log)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| user_id | Long | 用户ID |
| knowledge_id | Long | 知识ID |
| start_time | DateTime | 开始时间 |
| end_time | DateTime | 结束时间 |
| duration_seconds | Integer | 学习时长(秒) |
| create_time | DateTime | 创建时间 |
---
## 五、页面原型
### 5.1 管理员数据看板
```
┌────────────────────────────────────────────────────────────────────────────┐
│ 统计报表中心 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 总学员数 │ │ 培训完成率 │ │ 考试通过率 │ │ 活跃学员数 │ │
│ │ 486 │ │ 82% │ │ 78% │ │ 312 │ │
│ │ +12 ↑ │ │ +5% ↑ │ │ -2% ↓ │ │ +28 ↑ │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ │
│ │ 培训完成率趋势 │ │ 部门培训完成率排名 │ │
│ │ │ │ │ │
│ │ 100%│ │ │ 救援一部 ████████████ 92% │ │
│ │ 80%│ ╭──╮ ╭──╮ │ │ 救援三部 ██████████ 85% │ │
│ │ 60%│╭──╯ ╰──╮╭╯ ╰── │ │ 救援二部 █████████ 80% │ │
│ │ 40%│ ╰ │ │ 救援四部 ███████ 72% │ │
│ │ └───────────────── │ │ 综合部 ██████ 65% │ │
│ │ 9 10 11 12 1 2 │ │ │ │
│ └─────────────────────────────────┘ └─────────────────────────────────┘ │
│ │
│ [查看培训详情] [查看考试详情] [导出月度报表] │
│ │
└────────────────────────────────────────────────────────────────────────────┘
```
### 5.2 考试统计页面
```
┌────────────────────────────────────────────────────────────────────────────┐
│ 统计报表中心 > 考试统计 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ 时间范围: [本月 ▼] 部门: [全部 ▼] 考试: [全部 ▼] [查询] [导出] │
│ │
│ ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ │
│ │ 成绩分布 │ │ 汇总指标 │ │
│ │ │ │ │ │
│ │ ┌───┐ │ │ 参考人数: 320 │ │
│ │ │ │ ┌───┐ │ │ 通过人数: 256 │ │
│ │ ┌───┐│ │ │ │ ┌───┐ │ │ 通过率: 80% │ │
│ │ │ ││ │ │ │ │ │ ┌───┐ │ │ 平均分: 76.5 │ │
│ │ │ ││ │ │ │ │ │ │ │ │ │ 最高分: 100 │ │
│ │ └───┘└───┘ └───┘ └───┘ └───┘ │ │ 最低分: 32 │ │
│ │ 0-59 60-69 70-79 80-89 90-100 │ │ │ │
│ └─────────────────────────────────┘ └─────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 考试名称 参考人数 通过率 平均分 最高分 操作 │ │
│ ├──────────────────────────────────────────────────────────────────────┤ │
│ │ 安全规范考核 120 85% 78.5 98 [详情][分析] │ │
│ │ 月度技能测试 95 72% 71.2 100 [详情][分析] │ │
│ │ 新员工入职考试 45 91% 82.3 96 [详情][分析] │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ < 1 2 3 > │
└────────────────────────────────────────────────────────────────────────────┘
```
---
## 六、非功能需求
| 类型 | 要求 |
|------|------|
| **性能** | 看板页面加载时间 < 2秒 |
| **性能** | 报表查询响应时间 < 3秒万级数据 |
| **兼容性** | 支持 ChromeEdgeFirefox 最新版本 |
| **数据安全** | 严格按角色和部门隔离数据 |
| **导出** | Excel 导出支持 .xlsx 格式 |
---
## 七、不做什么Out of Scope
| 排除项 | 原因 |
|--------|------|
| 实时数据监控 | V2 不需要实时性T+1 统计即可 |
| 自定义报表设计器 | 复杂度高用户需求不明确 |
| 数据预测/AI分析 | 数据量不足价值有限 |
| 打印报表 | 使用 Excel 导出替代 |
---
## 八、里程碑建议
| 阶段 | 内容 | 建议周期 |
|------|------|----------|
| M1 | 数据看板管理员+讲师+学员 | - |
| M2 | 培训统计 + 考试统计 | - |
| M3 | 学员统计 + 数据导出 | - |
| M4 | 测试 + 优化 | - |
---
## 九、开放问题
| 问题 | 待确认 |
|------|--------|
| 学习时长统计是否需要精确到秒级 | 建议分钟级即可 |
| 是否需要支持定时自动发送报表邮件 | 建议 V3 考虑 |
| 能力雷达图的维度如何定义 | 建议按知识分类一级目录 |
---
**文档状态:待评审**