使用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年的出勤率。
日期周期由报表参数在为一个系列运行报表时动态确定,并由根据其他系列的报表参数计算的变量确定。
在我定义的折线图中:
问题
当我运行报告时,图表呈现但没有数据(行)。
如果我删除了系列组(2016年的活动),图表只会正确显示2017年的数据行。
我已经在这方面工作了很长一段时间,我一直在努力弄清楚发生了什么。
有没有人知道为什么两个系列都没有被绘制以及如何修复它?
非常感谢!
答案 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
进入系列组。
你的图表设计应该是这样的......
那就是它!
当我们运行报告时,我们得到了这个......
答案 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 分配给类别组,年分配给系列组。我还添加了一个显示事件日期的工具提示,以便您可以将鼠标悬停在任意点上并显示事件日期。