SSRS矩阵中对比YellVA与ATP系列成绩值的实现方法求助
SSRS矩阵实现ATP成绩与YellVA基线对比方案
1. 数据集预处理(SQL层面)
先通过查询把每个ATP行对应的YellVA基线成绩关联出来,简化SSRS端计算。示例SQL:
SELECT 学生ID, 学生姓名, 科目ID, 科目名称, AspectShortName, AspectValue, -- 用窗口函数获取对应学生+科目的YellVA基线值 MAX(CASE WHEN AspectShortName = 'YellVA' THEN AspectValue END) OVER (PARTITION BY 学生ID, 科目ID) AS BaselineScore FROM 成绩表 WHERE AspectShortName IN ('YellVA', 'ATP1', 'ATP2', 'ATP3')
2. 矩阵布局设计
- 行组:依次添加「学生ID」「学生姓名」「科目名称」(按需调整层级,确保每个科目下的ATP数据归为一组)
- 列组:添加「AspectShortName」,并设置筛选器:
AspectShortName IN ("ATP1", "ATP2", "ATP3")(隐藏YellVA列,仅展示跟踪点) - 数据单元格:
- 显示ATP成绩:直接绑定
=Fields!AspectValue.Value - 显示对应基线成绩:通过行组上下文获取基线值,表达式为
=First(Fields!BaselineScore.Value, "科目名称组")(「科目名称组」需与设计器中行组的科目分组名称一致) - 可选:计算成绩差异,表达式为
=CDbl(Fields!AspectValue.Value) - CDbl(First(Fields!BaselineScore.Value, "科目名称组"))
- 显示ATP成绩:直接绑定
3. 优化与排错
- 数据类型转换:若AspectValue为字符串类型,必须用
CDbl()等函数转成数值后再计算,避免类型错误 - Lookup函数替代方案:若无法修改SQL查询,可在SSRS中用Lookup匹配唯一键获取基线值:
=Lookup(Fields!学生ID.Value & "|" & Fields!科目ID.Value & "|YellVA", Fields!学生ID.Value & "|" & Fields!科目ID.Value & "|" & Fields!AspectShortName.Value, Fields!AspectValue.Value, "数据集名称") - 条件格式:给差异值添加颜色标记,比如高于基线标绿色:
选中数据单元格 → 右键「字体」→ 颜色表达式:=IIF(CDbl(Fields!AspectValue.Value) > CDbl(First(Fields!BaselineScore.Value, "科目名称组")), "Green", "Red")
内容的提问来源于stack exchange,提问作者Kev Rodger
相关产品推荐
相关产品推荐

