【问题标题】:SSRS 2016 - Line Graph will not chart multiple seriesSSRS 2016 - 折线图不会绘制多个系列
【发布时间】:2017-08-24 21:12:08
【问题描述】:

使用 SSRS 2016 和 SQL 2017 报表生成器

我有一个如下所示的数据集。它有活动日期和出席人数:

    Event_Date  Attendance
    1/1/2016    1
    2/1/2016    2
    3/1/2016    3
    4/1/2016    4
    5/1/2016    5
    6/1/2016    6
    7/1/2016    7
    8/1/2016    8
    9/1/2016    9
    10/1/2016   10
    11/1/2016   11
    12/1/2016   12
    1/1/2017    5
    2/1/2017    6
    3/1/2017    7
    4/1/2017    8
    5/1/2017    9
    6/1/2017    10
    7/1/2017    11
    8/1/2017    12
    9/1/2017    13
    10/1/2017   14
    11/1/2017   15
    12/1/2017   16

我正在尝试在 SSRS 报告中创建一个折线图,其中系列中的每个元素都有一个数据点(出勤率)。我指定了两个系列——系列 1 是 2016 年的出勤率,系列 2 是 2017 年的出勤率。每个系列将在图表中的单独一行上。目的是直观地比较 2016 年与 2017 年的出勤率。

当为一个系列运行报告时,日期期间由报告参数动态确定,而另一系列则由根据报告参数计算的变量动态确定。

在我定义的折线图中:

  • 是出勤率
  • 类别组是 Event_Date(带有过滤器以选择 2017 年的事件)
  • 系列组是 Event_Date(带有过滤器以选择 2016 年的事件)

问题

当我运行报表时,图表呈现但没有数据(线)。

如果我删除系列组(2016 年的事件),图表将正确呈现,只有 2017 年的数据线。

我已经为此工作了很长一段时间,但我一直在试图弄清楚发生了什么事情。

有没有人知道为什么这两个系列都没有被绘制出来以及如何解决它?

非常感谢!

【问题讨论】:

    标签: reporting-services linechart


    【解决方案1】:

    注意:解决方法很简单,不要被回复的长度耽误了! :)

    您需要对数据集查询进行一些简单的更改。

    这是我用来复制数据的示例查询。

    DECLARE @t TABLE (Event_Date date, Attendance int)
    
    INSERT INTO @t
    VALUES 
    ('1/1/2016', 1),
    ('2/1/2016', 2),
        ('3/1/2016', 3),
        ('4/1/2016', 4),
        ('5/1/2016', 5),
        ('6/1/2016', 6),
        ('7/1/2016', 7),
        ('8/1/2016', 8),
        ('9/1/2016', 9),
        ('10/1/2016', 10),
        ('11/1/2016', 11),
        ('12/1/2016', 12),
        ('1/1/2017', 5),
        ('2/1/2017', 6),
        ('3/1/2017', 7),
        ('4/1/2017', 8),
        ('5/1/2017', 9),
        ('6/1/2017', 10),
        ('7/1/2017', 11),
        ('8/1/2017', 12),
        ('9/1/2017', 13),
        ('10/1/2017', 14),
        ('11/1/2017', 15),
        ('12/1/2017', 16)
    
    select Event_Date, format(Event_Date, 'dd/MM') as DayMonth,  year(Event_date) as Yr, Attendance from @t
    

    请注意,在最终选择(您实际需要的位)中,我添加了一个年份列 Yr 和一个日/月列 DayMonth。使用您的数据集,即使您按年份拆分,x 轴仍将代表日期,因此您的两条线将彼此相邻,而不是一条在另一条之上,这是我期望您想要的.. ..

    数据集的结果给了我们类似...

    Event_Date   DayMonth   Yr     Attendance
    2016-01-01   01/01      2016   1
    2016-02-01   02/01      2016   2
    .....
    .....
    2017-01-01   01/01      2017   5
    .....
    .....
    

    等等..

    现在,添加一个新的折线图并将Attendance 放入值中; DayMonth 进入类别组,Yr 进入系列组。

    您的图表设计应该如下所示...

    就是这样!

    当我们运行报告时,我们会得到这个......

    【讨论】:

      【解决方案2】:

      非常感谢您的帮助。它把我推向了正确的方向,这样我就可以让事情适应这种情况。

      我对查询进行了一些更改,以便我可以按年度事件编号将所有数据相互对齐。

      这里是查询:

          select
              ROW_NUMBER() over (PARTITION BY year([dbo].[#temp_table_4].[event_start_date]) ORDER BY [dbo].[#temp_table_4].[event_start_date]) as yearly_event_number
              ,format ([dbo].[#temp_table_4].[event_start_date],'d') as event_start_date
              ,format([dbo].[#temp_table_4].[event_start_date],'MM/dd') as MonthDay
              ,year([dbo].[#temp_table_4].[event_start_date]) as Year
              , Count (*) as [Total Attended]
          from 
              [dbo].[#temp_table_4]
      
          Group by [event_start_date]
      
          order by 
                  [dbo].[#temp_table_4].[event_start_date]
      

      主要的变化是我需要对每年发生的每个事件进行编号,从 1 开始并以“n”(一年中的最后一个事件)结束。我需要这样做,因为这些事件不会在每年的同一日期发生(它们实际上是在每个星期三发生,而不是每年的同一日期)。

      为了解决这个问题,我添加了以下 SQL 子句:

      ROW_NUMBER() over (PARTITION BY year([dbo].[#temp_table_4].[event_start_date]) ORDER BY [dbo].[#temp_table_4].[event_start_date]) as yearly_event_number
      

      在图表中,我将 Total_Attendance 分配给 Values,yearly_event_number 分配给类别组,Year 分配给系列组。我还添加了一个显示事件日期的工具提示,以便您可以将鼠标悬停在任何点上并显示事件日期。

      【讨论】:

      • 很高兴听到你把它整理好了。我确实考虑了日期以及它们可能每年都不匹配的事实,但到那时我已经醒了 20 多个小时,所以我已经没有热情了! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多