2016-10-14 11 views
0

以下のリンクを使用して、レポートにSQLトレンドラインを作成する方法の例を使用しています。Sql Trendline by departments

https://www.mssqltips.com/sqlservertip/3432/add-a-linear-trendline-to-a-graph-in-sql-server-reporting-services/

私はそれをすべて稼働して持っているが、私はまた、部署によって傾向が出て仕事をしたいです。ただし、すべてのデータを1つの最終的な値にマージするだけで、私が追加した各部門の合計を計算するために変更する必要のあるコードのセクションは、次のように思えます。ここで計算する簡単な方法がある

-- calculate the slope and intercept 
SET @slope = CASE WHEN @sample_size = 1 
    THEN 0 -- avoid divide by zero error 
    ELSE (@sample_size * @sumXY - @sumX * @sumY)/(@sample_size * @sumXX - POWER(@sumX,2)) 
    END; 
SET @intercept = (@sumY - (@slope*@sumX))/@sample_size; 
+0

指定された表に部門関連の列はありますか? –

+0

はい、テンポラリテーブルではdepartmentというカラムがあり、データはすべて部門別にフィルタリングされ、ID iveはrow_numberを使用して各グループのユニークな数値を取得します。 – user3691566

答えて

0

あなたはSELECT & GROUP BY

SELECT departments, 
     SampleSize = Count(*), 
     SumRID = Sum(ID), 
     SumOrderQty = Sum([OrderQuantity]), 
     SumXX = Sum(ID * ID), 
     SumYY = Sum([OrderQuantity] * [OrderQuantity]), 
     SumXY = Sum(ID * [OrderQuantity]) 
FROM #Temp_Regression 
GROUP BY departments 

departments列を追加する必要があります。

-- calculate sample size and the different sums 
SELECT 
    @sample_size = COUNT(*) 
,@sumX = SUM(ID) 
,@sumY = SUM([OrderQuantity]) 
,@sumXX = SUM(ID*ID) 
,@sumYY = SUM([OrderQuantity]*[OrderQuantity]) 
,@sumXY = SUM(ID*[OrderQuantity]) 
FROM #Temp_Regression; 

-- output results 
SELECT 
    SampleSize = @sample_size 
,SumRID = @sumX 
,SumOrderQty [email protected] 
,SumXX = @sumXX 
,SumYY = @sumYY 
,SumXY = @sumXY; 

これらの変数は、トレンドラインをうまくするために使用されていますslope & interceptすべての部門

;WITH cte 
    AS (SELECT departments, 
       sample_size = Count(*), 
       sumX = Sum(ID), 
       sumY = Sum([OrderQuantity]), 
       sumXX = Sum(ID * ID), 
       sumYY = Sum([OrderQuantity] * [OrderQuantity]), 
       sumXY = Sum(ID * [OrderQuantity]) 
     FROM #Temp_Regression 
     GROUP BY departments), 
    slope 
    AS (SELECT departments, 
       Sample_Size, 
       sumX, 
       sumY, 
       slope = CASE 
          WHEN sample_size = 1 THEN 0 -- avoid divide by zero error 
          ELSE (sample_size * sumXY - sumX * sumY)/(sample_size * sumXX - Power(sumX, 2)) 
         END 
     FROM cte) 
SELECT departments, 
     slope, 
     intercept = (sumY - (slope * sumX))/sample_size 
FROM slope 
+0

私はこのソリューションを最初に試しましたが、次のエラーが発生します。変数に値を割り当てるSELECT文をデータ検索操作と組み合わせてはいけません。 – user3691566

+0

@ user3691566上記のクエリにいくつか変更を加えました。変数に列を割り当てないでください –

+0

変数は後でトレンドラインの計算に役立ちます。元の投稿を使用して、変数の参照先のクエリの後半部分を表示しました。 – user3691566