Tsql SSRS 2005柱状图:当数据计数为零时显示缺少系列标签
我有一个非常简单的图表,其中可能有一个共同的问题。我在互联网上搜索了几个小时,但到目前为止才发现类似的情况 我所做的基本工作包括创建人、人员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低” @内森 示例场景: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_
选择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