如何在SSRS图表中设置19/20、21/22两个独立年度为系列组?
解决方案
1. 调整SQL查询生成透视数据集
通过CTE先按月份和目标年度组统计出勤数,再用PIVOT将年度组转为列,正好匹配你需要的输出结构:
WITH MonthlyAttendance AS ( SELECT -- 提取月份编号和名称,用于后续排序和展示 MONTH(C.YearMonth) AS MonthNumber, DATENAME(MONTH, C.YearMonth) AS MonthName, -- 标记目标年度组,跳过20/21年度 CASE -- 根据你的年度定义调整条件,这里假设19/20是2019-2020自然年,21/22是2021-2022自然年 WHEN YEAR(C.YearMonth) IN (2019, 2020) THEN '19/20' WHEN YEAR(C.YearMonth) IN (2021, 2022) THEN '21/22' ELSE NULL -- 过滤掉20/21年度数据 END AS FiscalYearGroup, COUNT(1) AS AttendanceCount FROM xxx LEFT JOIN Calendar AS C ON xxx = xxx -- 替换为实际关联字段 WHERE -- 限定时间范围,排除20/21年度(如果是财政年度,需调整日期区间) C.YearMonth BETWEEN '20190101' AND '20221231' -- 若20/21是财政年度(如2020年7月-2021年6月),替换为下面的条件: -- AND NOT (C.YearMonth BETWEEN '20200701' AND '20210630') GROUP BY MONTH(C.YearMonth), DATENAME(MONTH, C.YearMonth), YEAR(C.YearMonth) ) -- 透视转换为列 SELECT MonthName, MonthNumber, ISNULL([19/20], 0) AS [19/20年度出勤数], ISNULL([21/22], 0) AS [21/22年度出勤数] FROM MonthlyAttendance PIVOT ( SUM(AttendanceCount) FOR FiscalYearGroup IN ([19/20], [21/22]) ) AS PivotedResult ORDER BY MonthNumber;
关键说明:
- 用
ISNULL确保无数据的月份显示0,避免图表出现断点 - 若你的年度是财政年度(如跨自然年),修改
CASE和WHERE中的日期区间即可适配
2. SSRS图表配置
拿到上述数据集后,按以下步骤配置折线图:
- 新建折线图,将
MonthName拖到类别组(可在组属性中用MonthNumber排序,保证月份顺序正确) - 将
19/20年度出勤数和21/22年度出勤数拖到值区域,SSRS会自动将这两列识别为独立的系列组 - 若需手动配置系列组:右键图表→系列组→添加组→系列组,选择对应的年度出勤字段即可
这样就能生成两个独立的折线系列,完全跳过20/21年度数据。
内容的提问来源于stack exchange,提问作者SeanLearningSQL
相关产品推荐
相关产品推荐

