【问题标题】:SSRS 2005 column chart: show series label missing when data count is zeroSSRS 2005 柱形图:当数据计数为零时显示系列标签缺失
【发布时间】:2013-05-01 19:41:18
【问题描述】:

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

我要提取的基础知识包含 created_by、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 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.

@内森

示例场景:

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,我将如何显示可能不存在计数的标签

【问题讨论】:

  • 您能发布您用于数据集的 SQL 吗?理想情况下,我会更改查询,以便始终为每个风险评分值返回数据,即,如果您有一个定义风险评分值的表,那么这将成为 LEFT OUTER JOIN 的左侧。如果此人没有特定风险评分值的行,则使用 ISNULL 将其设置为 0。
  • 另一个问题,我相信,SQL Server Reporting Svcs 2005 默认不会绘制零计数。
  • 我相信另一个问题是 SQL Server Reporting Svcs 2005 默认情况下不会绘制零计数图。我想过没有分数的人将它们设置为-1或0。或者以某种方式预定义列,以便标签仍然显示。在某处做 switch 语句或 case 语句......这真的是在哪里做什么 :( 这真的很奇怪。大多数示例都处理在某些日期内计算项目,例如,一个月被跳过,因为没有一个项目被退回例如,其中一个月份。
  • this is about as close as I get 但这是 SSRS 2008 示例,2005 没有 2008 的某些选项。我要再通读一遍,看看有什么作用。

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


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    在您的示例中,问题是没有返回与任何学生无关的成绩的结果。为了理想地解决这个问题,您的源系统中将有一个表,其中列出了“分数”的所有可能值(例如 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      相关资源
      最近更新 更多