SSRS 2016 - 折线图不会绘制多个系列

时间:2017-08-24 21:12:09

标签: reporting-services linechart

使用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年的数据行。

我已经在这方面工作了很长一段时间,我一直在努力弄清楚发生了什么。

有没有人知道为什么两个系列都没有被绘制以及如何修复它?

非常感谢!

2 个答案:

答案 0 :(得分:0)

注意:解决方案很简单,不要在答复的长度内推迟! :)

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

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

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进入系列组。

你的图表设计应该是这样的......

enter image description here

那就是它!

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

enter image description here

答案 1 :(得分:0)

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

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

以下是查询:

    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 分配给值, annual_event_number 分配给类别组,分配给系列组。我还添加了一个显示事件日期的工具提示,以便您可以将鼠标悬停在任意点上并显示事件日期。