SSRS:如何将一年中的所有月份显示为图表的X轴

时间:2017-06-14 15:52:25

标签: sql-server reporting-services dynamics-crm

我正在制作一个显示整年数据的图表,但由于我是新手,我无法弄清楚如何在X轴上显示所有月份(包括没有数据的那些)

以下是我的SQL请求的SELECT部分​​:

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 个答案:

答案 0 :(得分:3)

您需要将正确的数据返回到图表,以便在轴上包含某些内容。为此,您需要生成每个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 |
+------------+---+

答案 1 :(得分:1)

您可以使用所有月份为查询添加正确的联接,并将其列返回到输出:

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