2017-06-14 73 views
1

我正在繪製一個顯示整年數據的圖,但由於我是新手,我無法弄清楚如何顯示在X軸上的所有月份(包括那些沒有數據)SSRS:如何顯示一年的所有月份作爲圖的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))作爲類別組P,導致下圖:

4|   X 
3| X 
2| 
1| 
0|_________________ 
    February March 

我想有什麼是這樣的:

4|      X 
3|    X 
2| 
1| 
0|______________________________________ 
    January February March April ... 

我發現在數據庫中使用自定義表中的淨一些解決方法,但我不能在這種情況下,因爲它是一個MS動態項目。

謝謝你的時間。

回答

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 | 
+------------+---+ 
+0

將會對這種解決改變數據庫? – Dremor

+0

@Dremor不,創建的表是[Common Table Expression](https://technet.microsoft.com/en-us/library/ms190766(v = sql.105).aspx),它創建一個臨時表一旦查詢完成就丟棄。您的數據庫結構不變。 – iamdave

+0

@Dremor雖然我建議你考慮在數據庫中添加一個[日期表](https://www.brentozar.com/archive/2014/12/simply-must-date-table-video/),因爲它們是在很多分析場合非常方便。 – iamdave

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 
相關問題