2016-12-01 4 views
-2

私はグラフを作成しようとしていますが、データをChart JSと互換性のあるフォーマットに変換する際に問題があります。私は以下のようなグラフが好きです。動的データで苦闘

Graph

データはSQLから返され、次のようになります。

enter image description here

このデータは動的ので、私は手動でデータセットを作成することはできません変更されます。データはデータベースから動的に生成する必要があります。ここで

+0

で@SQLに追加することができ、リストの後には、JSON形式のデータをしたいですか? – Eralper

+0

_ "このデータは動的に変更されるため、手動でデータセットを作成することはできません。" _ - 詳細は何が動的に変更されるのでしょうか。その変更によりデータセットを作成できないのですか?列リストは静的に見えます。行リストと特定の値は、いつか変更されるはずです。さもなければ、静的な画像であり、グラフではありません。 –

+0

私はhttp://www.chartjs.org/docs/#bar-chart-dataset-structureで棒グラフのchart.jsのドキュメントとサンプルを見ています。このソースをチェックしましたが、あなたが望むものを手に入れることができるか分かりません。 – Eralper

答えて

0

は、次のスクリプトを動的に同じ数としてSQLに追加する必要があるバーの色が欠落していることに注意してくださいラベルと値は、XMLパス

の場合でSQL string concatenationメソッドを使用して動的に構築され、動的SQLスクリプトですラベル

したがって、バーラベルの色が格納されているテーブルで同様の連結方法を実行できます。単一文字変数として取得され、それが適切な場所

--create table reportData (year int, type varchar(10), qty int) 
--insert into reportData select 2013, 'Type 1',1 
--insert into reportData select 2014, 'Type 1',2 
--insert into reportData select 2015, 'Type 3',1 
--insert into reportData select 2016, 'Type 2',1 
--insert into reportData select 2016, 'Type 3',2 
--insert into reportData select 2016, 'Type 4',4 


declare @sql nvarchar(max) 
declare @labels nvarchar(max) 
declare @measures nvarchar(max) 

SELECT 
@labels = 
    STUFF(
    (
    SELECT distinct 
     ',"' + convert(nvarchar(4),[year]) + '"' 
    FROM reportData 
    FOR XML PATH('') 
    ), 1, 1, '' 
) 

SELECT 
@measures = 
    STUFF(
    (
    SELECT 
     ',' + convert(nvarchar(4),qty) 
    FROM (
     select 
      years.year, data.qty 
     from (
      select distinct year from reportData 
     ) years 
     left join (
      select sum(qty) as qty, year from reportData group by year 
     ) data on years.year = data.year 
    ) Q 
    FOR XML PATH('') 
    ), 1, 1, '' 
) 

set @sql = N' 
var data = { 
    labels: ['+ @labels + '], 
    datasets: [ 
     { 
      label: "My Graph", 
      backgroundColor: [ 
       ''rgba(255, 99, 132, 0.2)'', 
       ''rgba(54, 162, 235, 0.2)'', 
       ''rgba(255, 206, 86, 0.2)'', 
       ''rgba(75, 192, 192, 0.2)'', 
      ], 
      borderColor: [ 
       ''rgba(255,99,132,1)'', 
       ''rgba(54, 162, 235, 1)'', 
       ''rgba(255, 206, 86, 1)'', 
       ''rgba(75, 192, 192, 1)'', 
      ], 
      borderWidth: 1, 
      data: ['+ @measures +'], 
     } 
    ] 
};' 

print @sql 
+0

アイデアありがとうございますが、私は動的SQLを使用したくないです。私は、その場でデータセットを構築するために、生データとC#またはJSのどちらかをSQLに返すことをお勧めしますか? – Tim