雷达图固定分类数据处理
雷达图固定分类数据处理
应用场景
当需要展示固定维度(如12个月)的雷达图对比时,即使某些月份没有数据,也要保持图表维度的完整性。

核心思路
通过创建包含所有固定分类的临时表,然后使用 LEFT JOIN 关联实际数据,确保所有分类都能在雷达图中显示。
实现方案
1. 创建固定分类临时表
WITH t1 AS (
SELECT '1' AS month UNION ALL
SELECT '2' UNION ALL
SELECT '3' UNION ALL
SELECT '4' UNION ALL
SELECT '5' UNION ALL
SELECT '6' UNION ALL
SELECT '7' UNION ALL
SELECT '8' UNION ALL
SELECT '9' UNION ALL
SELECT '10' UNION ALL
SELECT '11' UNION ALL
SELECT '12'
)
2. 处理实际数据
t2 AS (
SELECT
RIGHT(rq, 2) * 1 AS month,
value
FROM tablename
WHERE rq >= LEFT('${MONTH}', 4) * 100
)
3. 完整查询语句
WITH t1 AS (
SELECT '1' AS month UNION ALL
SELECT '2' UNION ALL
SELECT '3' UNION ALL
SELECT '4' UNION ALL
SELECT '5' UNION ALL
SELECT '6' UNION ALL
SELECT '7' UNION ALL
SELECT '8' UNION ALL
SELECT '9' UNION ALL
SELECT '10' UNION ALL
SELECT '11' UNION ALL
SELECT '12'
),
t2 AS (
SELECT
RIGHT(rq, 2) * 1 AS month,
value
FROM tablename
WHERE rq >= LEFT('${MONTH}', 4) * 100
)
SELECT
t1.month,
COALESCE(t2.value, 0) AS value
FROM t1
LEFT JOIN t2 ON t1.month = t2.month
ORDER BY t1.month * 1;
雷达图配置
- 分类维度:
month字段 - 数值系列:
value字段 - 缺失值处理:使用
COALESCE将 NULL 值替换为 0
优化建议
更简洁的月份生成方式
-- 使用递归CTE生成月份(MySQL 8.0+)
WITH RECURSIVE months AS (
SELECT 1 AS month
UNION ALL
SELECT month + 1
FROM months
WHERE month < 12
)
通用分类表方案
-- 创建永久的月份维度表
CREATE TABLE dim_months (
month_num INT PRIMARY KEY,
month_name VARCHAR(10)
);
INSERT INTO dim_months VALUES
(1, '1月'), (2, '2月'), ..., (12, '12月');
总结
这种方案的核心优势:
- 数据完整性:确保雷达图所有维度都有数据点
- 视觉一致性:避免因缺失数据导致的图形变形
- 扩展性强:可应用于其他固定分类场景(季度、周等)


浙公网安备 33010602011771号