SSRS: как показать весь месяц года в виде оси X графика
Я работаю над графиком, который показывает данные за весь год, но, поскольку я новичок, я не могу понять, как показать весь месяц по оси X (включая те, у которых нет данных)
Вот часть SELECT моего запроса SQL:
SELECT DISTINCT
AB.Id AS ID,
MONTH(AP.Date) AS Date
В результате чего получаются следующие данные:
| ID | Date |
|--------|--------|
| 1 | 2 |
| 2 | 3 |
| 3 | 2 |
| 4 | 2 |
| 5 | 3 |
| 6 | 3 |
| 7 | 3 |
|--------|--------|
В настоящее время я использую =MonthName(Fields!Date.Value))
как группа категорий, что приводит к следующему графику:
4| X
3| X
2|
1|
0|_________________
February March
То, что я хочу иметь, это что-то вроде этого:
4| X
3| X
2|
1|
0|______________________________________
January February March April ...
Я нашел какой-то обходной путь в сети, используя пользовательскую таблицу в базе данных, но я не могу в этом случае, так как это проект MS Dynamics.
Спасибо за ваше время.
2 ответа
Вам необходимо вернуть правильные данные на график, чтобы на оси было что-то включить. Для этого вам нужно сгенерировать каждое значение по оси X, а затем найти сумму, которая к нему относится.
В приведенном ниже сценарии я создаю таблицу дат, которая представляет начало месяца для каждого месяца текущего года. Затем он идет и находит все соответствующие значения в вашей таблице за этот месяц и делает count
, Затем его можно использовать в качестве набора данных диаграммы с минимальной обработкой на стороне клиента, что поможет повысить производительность отчета.
declare @t table(ID int,DateValue Date)
insert into @t values (1,'20170204'),(2,'20170307'),(3,'20170203'),(4,'20170207'),(5,'20170304'),(6,'20170302'),(7,'20170309');
with d(d) as(select cast(dateadd(mm,n,dateadd(yyyy,datediff(yyyy,0,getdate()),0)) as date) from(values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) n(n))
select d.d
,count(t.ID) as c
from d
left join @t t
on(d.d = dateadd(mm,datediff(mm,0,t.DateValue),0))
group by d.d
order by d.d;
Выход:
+------------+---+
| d | c |
+------------+---+
| 2017-01-01 | 0 |
| 2017-02-01 | 3 |
| 2017-03-01 | 4 |
| 2017-04-01 | 0 |
| 2017-05-01 | 0 |
| 2017-06-01 | 0 |
| 2017-07-01 | 0 |
| 2017-08-01 | 0 |
| 2017-09-01 | 0 |
| 2017-10-01 | 0 |
| 2017-11-01 | 0 |
| 2017-12-01 | 0 |
+------------+---+
Вы можете добавить правильное объединение к вашему запросу со всем месяцем и вернуть его столбец к выводу:
SELECT DISTINCT
AB.Id AS ID,
m.n AS Date
right join (select * from (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) m(n) ) m
on MONTH(AP.Date)=m.n