在设计报表图表配置表时,为存储 同比、环比 这类分析指标,建议通过以下方式定义字段结构和命名:
一、字段设计方案
// 配置表示例结构
interface ChartConfig {id: string; // 唯一标识name: string; // 图表名称queryOptions: object; // 数据查询参数echartOptions: object; // ECharts 配置analysisMetrics: Metric[]; // 新增:分析指标配置(同比、环比等)
}
字段名称建议
字段名 | 类型 | 说明 |
---|---|---|
analysisMetrics | Metric[] | 推荐命名:明确表示“分析指标”,覆盖同比、环比等多种类型 |
comparisonMetrics | Metric[] | 备选命名:强调“对比”特性,但可能不涵盖非对比类指标(如累计值) |
二、指标项结构定义(Metric
)
interface Metric {type: "YoY" | "MoM" | "QoQ" | "custom"; // 指标类型(必填)displayName?: string; // 显示名称(如"同比增长率")enabled: boolean; // 是否启用该指标params?: { // 计算参数(可选)basePeriod?: string; // 对比基准周期(如"2023-01")precision?: number; // 小数精度(默认2)unit?: "%" | "x"; // 单位(默认百分比)};// 可扩展字段// style?: object; // 可视化样式(如颜色、图表类型)// formula?: string; // 自定义计算公式(高级场景)
}
三、配置示例
1. 简单场景(仅启用同比环比)
{id: "sales_chart_001",name: "销售额趋势",analysisMetrics: [{ type: "YoY", displayName: "同比增长率",enabled: true,params: { precision: 1 }},{ type: "MoM", displayName: "环比增长率",enabled: true}]
}
2. 高级场景(自定义基准周期)
{id: "user_growth_002",name: "用户增长分析",analysisMetrics: [{type: "custom",displayName: "较年初增长率",enabled: true,params: {basePeriod: "2024-01", // 指定对比基准为2024年1月unit: "%"}}]
}
四、关联数据处理
1. **与 queryOptions
的联动
通过 analysisMetrics
动态生成查询参数:
// 根据指标类型自动追加查询字段
if (analysisMetrics.some(m => m.type === "YoY")) {queryOptions.fields.push("last_year_value");
}
2. **与 echartOptions
的集成
在图表中渲染指标(如副Y轴或Tooltip):
// 自动生成副Y轴配置
if (analysisMetrics.length > 0) {echartOptions.yAxis.push({type: "value",name: "增长率",axisLabel: { formatter: "{value}%" }});
}// 在Tooltip中显示指标值
echartOptions.tooltip.formatter = (params) => {const metricsText = params.filter(p => p.seriesType === 'line') // 假设增长率为折线图.map(p => `${p.seriesName}: ${p.value}%`).join("<br/>");return `${params[0].name}<br/>${metricsText}`;
};
五、扩展性建议
-
类型扩展:
预留custom
类型,支持未来新增指标(如WoW
周环比、YTD
年初至今累计):type MetricType = "YoY" | "MoM" | "QoQ" | "WoW" | "YTD" | "custom";
-
计算逻辑分离:
在后端或数据层实现指标计算,避免在前端配置中嵌入复杂公式。 -
可视化控制:
可增加style
字段控制指标在图表中的呈现方式:interface Metric {// ...style?: {chartType?: "line" | "bar"; // 渲染为折线图或柱状图color?: string; // 颜色覆盖position?: "left" | "right"; // Y轴位置}; }
六、完整配置表示例
{id: "revenue_analysis_003",name: "营收多维分析",queryOptions: {dataset: "monthly_sales",filters: { year: 2024 },fields: ["month", "revenue"]},echartOptions: { /* 原始ECharts配置 */ },analysisMetrics: [{type: "YoY",displayName: "同比",enabled: true,params: { precision: 1 }},{type: "MoM",displayName: "环比",enabled: true,style: {chartType: "line",color: "#ff6b6b",position: "right"}}]
}
通过这种设计,您的配置表可以:
- 清晰区分不同分析指标类型
- 灵活控制指标的计算与展示
- 无缝衔接数据查询与图表渲染
- 轻松扩展新增指标类型