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

Tsql SSRS 2005柱状图:当数据计数为零时显示缺少系列标签,tsql,reporting-services,charts,reporting,reportingservices-2005,Tsql,Reporting Services,Charts,Reporting,Reportingservices 2005,我有一个非常简单的图表,其中可能有一个共同的问题。我在互联网上搜索了几个小时,但到目前为止才发现类似的情况 我所做的基本工作包括创建人、人员id和风险分数 风险评分可以是: 1非常低 2低 3中度稳定 4中等风险 5高 6非常高 我希望获得每个风险分数的人员总数,并显示风险计数,即使该风险分数的计数为0,但SSRS 2005喜欢抑制零计数 我在点标签上试过这个 =IIF(IsNothing(count(Fields!person_id.value)),0,count(Fields!person_

我有一个非常简单的图表,其中可能有一个共同的问题。我在互联网上搜索了几个小时,但到目前为止才发现类似的情况

我所做的基本工作包括创建人、人员id和风险分数 风险评分可以是:

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

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

我在点标签上试过这个 =IIF(IsNothing(count(Fields!person_id.value)),0,count(Fields!person_id.value))

例:我缺少“1低”的值,因为创建者没有为其分配风险分数的任何“1低”

@内森

示例场景:

选择professor.name、grades.score、student.person\u id
来自学生
在student.person\u id=grades.person\u id上内部连接成绩
在student.professor\u id=professor.professor\u id上内部加入professor
哪里 student.professor_id=@professor

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

我的数据点有一个=Count(Fields!person_id.Value)&序列按=Fields分组!分数,价值


如果有一组a、B、D成绩,但没有C&F,那么在您的示例中,我如何显示可能不存在的计数的标签,问题是对于没有链接到任何学生的成绩,不会返回任何结果。理想情况下,为了解决这个问题,源系统中会有一个表,列出“score”(例如a-F)的所有可能值,您可以将其加入到查询中,以便为每个可能值返回至少一行

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


请参见此处的一个实例:

您可以发布用于数据集的SQL吗?理想情况下,我会修改查询,以便始终为风险分数的每个值返回数据,即,如果您有一个定义风险分数值的表,那么这将成为左外部联接的左侧。如果此人没有风险分数特定值的行,则使用ISNULL将其设置为0。我相信,另一个问题是SQL Server Reporting Svcs 2005默认情况下不会绘制零计数图。我相信,另一个问题是SQL Server Reporting Svcs 2005默认情况下不会绘制零计数图。我曾经想到过没有分数的人会将他们设置为-1或0。或者以某种方式预定义列,使标签仍然显示。请在某处切换语句或case语句。。。真正的问题是在哪里做:(这真的很奇怪。大多数例子都涉及到计算特定日期下的项目,比如说,一个月被跳过,因为其中一个月没有返回项目。但这是SSRS 2008的例子,2005年没有2008年的一些选项。我将再次阅读,看看有什么功能。
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