指标管理系统
**本文档引用的文件** - [[README.md]](../../file/bi-analysis/readme.md) - [[go.mod]](../../file/bi-analysis/go.mod) - [[metric.proto]](../../file/bi-proto/metric/v1/metric.proto) - [[query.go]](../../file/bi-analysis/internal/biz/query.go) - [[query.go]](../../file/bi-analysis/internal/data/query.go) - [[query.go]](../../file/bi-analysis/internal/service/query.go) - [[field.go]](../../file/bi-analysis/internal/biz/field.go) - [[field.go]](../../file/bi-analysis/internal/data/field.go) - [[field.go]](../../file/bi-analysis/internal/service/field.go) - [[auth.proto]](../../file/bi-common/api/auth/v1/auth.proto) - [[指标实现情况.md]](../../file/bi-analysis/docs/.md)
目录
简介
指标管理系统是一个基于Kratos框架构建的BI分析服务,专门用于管理和查询各类业务指标。该系统提供了完整的指标生命周期管理,包括指标定义、分类、计算公式、取数路径、权限控制等功能。
系统采用微服务架构,集成了bi-common模块,提供统一的响应格式、OpenAPI文档生成、Nacos配置中心等特性。通过ProtoBuf定义API接口,支持gRPC和HTTP协议,实现了前后端分离的现代化架构。
项目结构
图表来源
章节来源
核心组件
指标模型设计
系统采用分层架构设计,核心数据模型包括:
图表来源
指标分类机制
系统支持多种指标类型,每种类型都有特定的配置和计算方式:
| 指标类型 | 分组标识 | 描述 | 特殊属性 |
|---|---|---|---|
| 基础指标 | basic | 系统内置的基础业务指标 | 无 |
| 衍生指标 | derived | 基于历史数据计算的指标 | 时间范围配置 |
| 订单指标 | order | 基于订单表的指标 | 过滤条件配置 |
| 公式指标 | formula | 自定义计算公式的指标 | 表达式配置 |
| 自定义指标 | diy | 用户自定义的业务指标 | 表字段映射 |
章节来源
架构概览
图表来源
详细组件分析
查询引擎组件
查询引擎是系统的核心组件,负责处理各种类型的指标查询请求:
图表来源
查询流程详解
- 请求解析阶段:解析查询参数,包括行维度、列维度、查询指标等
- 配置加载阶段:根据字段标识加载对应的字段配置和维度配置
- 依赖解析阶段:对于公式指标,递归解析其依赖的其他指标
- SQL构建阶段:根据指标类型和配置生成相应的SQL语句
- 执行查询阶段:执行SQL并获取查询结果
- 结果格式化阶段:将查询结果转换为统一的响应格式
章节来源
字段配置组件
字段配置组件负责管理各类指标的配置信息:
图表来源
字段保存流程
字段保存操作根据字段类型有不同的处理逻辑:
- 自定义指标保存:生成唯一的字段标识,向关联的自定义表添加对应字段列
- 订单指标保存:验证表字段的有效性和过滤条件的合法性
- 公式指标保存:解析公式表达式,支持JSON格式的复杂计算
- 衍生指标保存:配置时间范围和计算函数,支持历史数据汇总
章节来源
指标API接口
系统通过ProtoBuf定义了完整的指标管理API接口:
图表来源
章节来源
依赖关系分析
技术栈依赖
系统采用现代化的技术栈,各组件之间的依赖关系如下:
图表来源
组件耦合度分析
系统采用了良好的分层设计,降低了组件间的耦合度:
| 层级 | 组件 | 耦合度 | 说明 |
|---|---|---|---|
| 表现层 | service层 | 低 | 仅依赖biz层接口 |
| 业务层 | biz层 | 中等 | 依赖data层和外部服务 |
| 数据层 | data层 | 低 | 通过接口抽象,易于替换 |
| 基础设施 | bi-common | 低 | 提供通用能力,无业务侵入 |
章节来源
性能考虑
缓存策略
系统实现了多层次的缓存策略来提升查询性能:
- 表存在性缓存:使用Redis缓存表存在性检查结果,采用永不过期策略
- 查询结果缓存:对于频繁访问的指标查询结果可以考虑缓存
- 配置信息缓存:字段配置和维度配置定期缓存,减少数据库查询
性能优化建议
- 索引优化:为常用的查询字段建立合适的数据库索引
- SQL优化:避免N+1查询问题,批量加载相关配置
- 连接池管理:合理配置数据库连接池大小
- 异步处理:对于耗时的指标计算可以采用异步处理
故障排除指南
常见问题及解决方案
1. 指标查询失败
问题现象:查询接口返回错误,提示"暂不支持查询基础指标"
可能原因:
- 请求中包含不支持的基础指标类型
- 字段配置缺失或不正确
解决步骤:
- 检查请求中的指标类型,确保使用自定义指标而非基础指标
- 验证字段配置是否完整
- 查看系统文档确认支持的指标类型
2. 字段保存失败
问题现象:保存自定义指标时报错
可能原因:
- 关联的自定义表不存在
- 字段标识重复
- 表字段列添加失败
解决步骤:
- 确认自定义表已经创建
- 检查字段标识的唯一性
- 验证表字段列的DDL权限
3. 权限验证失败
问题现象:API调用返回权限不足
可能原因:
- Token无效或过期
- 用户权限不足
- 租户ID不匹配
解决步骤:
- 检查Token的有效期和格式
- 验证用户的权限列表
- 确认租户ID的正确性
章节来源
结论
指标管理系统通过清晰的分层架构和完善的组件设计,实现了指标的全生命周期管理。系统支持多种指标类型,提供了灵活的查询能力和强大的扩展性。
主要优势包括:
- 模块化设计:良好的分层架构便于维护和扩展
- 类型安全:通过ProtoBuf定义API,确保接口一致性
- 性能优化:多层缓存策略和SQL优化
- 权限控制:完善的鉴权机制保障数据安全
- 文档完善:详细的实现文档和最佳实践指导
未来可以进一步完善的功能包括:
- 增加更多指标类型的实现
- 优化查询性能和缓存策略
- 增强指标版本管理和变更追踪
- 扩展更多数据源的接入能力
附录
指标实现状态概览
根据系统文档,当前指标实现情况如下:
| 指标分类 | 已实现 | 未实现 | 实现率 |
|---|---|---|---|
| 财务指标 | 27 | 0 | 100% |
| 退款指标(发生时间) | 12 | 0 | 100% |
| 自定义公式 | 70 | 0 | 100% |
| 自定义指标 | 20 | 0 | 100% |
| 衍生指标 | 20 | 0 | 100% |
| 订单指标 | 15 | 0 | 100% |
| 其他指标 | 10 | 2 | 83% |
| 总计 | 174 | 166 | 51% |
章节来源