SSRS 2005柱形图:数据计数为零时显示缺少系列标签

时间:2013-05-07 18:28:44

标签: tsql reporting-services charts reporting reportingservices-2005

我有一个非常简单的图表,可能存在常见问题。我已经在互联网上搜索了几个小时,但到目前为止只能找到类似的情况。

我所拉动的基础知识包含created_by,person_id和风险评分 风险评分可以是:

1非常低 2低 3中等稳定 4中等风险 5 HIGH 6非常高

我希望获得每个风险评分的人数,并显示风险计数,即使该风险评分的计数为0,但SSRS 2005喜欢抑制零计数。

我在点标签上试过这个 = IIF(IsNothing(计数(字段!person_id.value)),0,计数(字段!person_id.value))

例如:我缺少“1 LOW”的值,因为创作者没有任何“1 LOW”,他们已经为其分配了风险评分。

*here's a screenshot of what I get but I'd like to have a column even for a count when it still doesn't exist in the returned results.

@Nathan

示例场景:

select professor.name, grades.score, student.person_id from student
inner join grades on student.person_id = grades.person_id
inner join professor on student.professor_id = professor.professor_id
where student.professor_id = @professor

并非所有学生都必须在成绩表中。

我有一个= Count(Fields!person_id.Value)用于我的数据点&系列分组于= Fields!score.Value

如果有一堆A,B,D等级但没有C& F我将如何显示可能不存在的计数标签

2 个答案:

答案 0 :(得分:0)

SELECT RS.RiskScoreId, RS.Description, SUM(DT.RiskCount) AS RiskCount
FROM (
    SELECT RiskScoreId, 1 AS RiskCount
    FROM People
    UNION ALL
    SELECT RiskScoreId, 0 AS RiskCount
    FROM RiskScores
) DT
INNER JOIN RiskScores RS ON RS.RiskScoreId = DT.RiskScoreId
GROUP BY RS.RiskScoreId, RS.Description
ORDER BY RS.RiskScoreId

答案 1 :(得分:0)

在您的示例中,问题是没有为没有链接到任何学生的成绩返回任何结果。为了理想地解决这个问题,您的源系统中会有一个表格列出了所有可能的“得分”值(例如A - F),您可以将其加入到查询中,以便为每个可能的值返回至少一行。

如果此类表不存在且可能的分数值已知并且是静态的,那么您可以在查询中手动创建它们的列表。在下面的示例中,我创建了一个子查询,它返回所有教授和所有可能分数(A - F)的组合,然后将其连接到成绩和学生表(左连接意味着教授/分数行将返回,即使没有学生在“成绩”表中有这些分数。)

SELECT 
    professor.name
  , professorgrades.score 
  , student.person_id
FROM
(
  SELECT professor_id, score
  FROM professor
  CROSS JOIN
   ( 
     SELECT 'A' AS score
     UNION
     SELECT 'B'
     UNION
     SELECT 'C'
     UNION
     SELECT 'D'
     UNION
     SELECT 'E'
     UNION
     SELECT 'F'
   ) availablegrades
 ) professorgrades
INNER JOIN professor ON professorgrades.professor_id = professor.professor_id
LEFT JOIN grades ON  professorgrades.score = grades.score
LEFT JOIN student ON grades.person_id = student.person_id AND 
              professorgrades.professor_id = student.professor_id

WHERE professorgrades.professor_id = 1

在此处查看有关其工作原理的实例:SQLFIDDLE