2017-06-14 13 views
1

1年分のデータを表示するグラフを作成していますが、初心者の方では現在、私は」SSRS:グラフのX軸として年をすべて表示する方法

| ID | Date | 
|--------|--------| 
| 1 | 2 | 
| 2 | 3 | 
| 3 | 2 | 
| 4 | 2 | 
| 5 | 3 | 
| 6 | 3 | 
| 7 | 3 | 
|--------|--------| 

SELECT DISTINCT 
    AB.Id AS ID, 
    MONTH(AP.Date) AS Date 

次のデータに結果として得られる:ここで

は私のSQL要求のSELECT一部である(データのないものを含む)をX軸上のすべての月を表示しますmは =MonthName(Fields!Date.Value))をカテゴリgrouとして使用していますpは、以下のグラフが得られ:私が持っていると思いますどのような

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

は、このようなものです:私は、データベース内のカスタム・テーブルを使用して、ネット上でいくつかの回避策を見つけた

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

、 MS Dynamicsプロジェクトなので、この場合はできません。

ありがとうございます。

答えて

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 [Datesテーブル](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 
関連する問題