SSRS에는 추세선을 그려주는 기능이 없다.
따라서 추세선을 그리기 위해서는 기능을 집접 만들어야 한다.
아래에서 추세선을 그리는 2가지 방법을 소개하고자 한다.
*Method1. Query 이용
Step01. 쿼리에서 추세선 수식을 계산해 ssrs에 그대로 차트로 표현
Step02. 쿼리 작성
SELECT DATEPART(MONTH,[ORDERDATE]) AS Month , SUM(B.UNITPRICE) AS UNITPRICE INTO #DATA FROM [ADVENTUREWORKS2008R2].[SALES].[SALESORDERHEADER] AS A JOIN [ADVENTUREWORKS2008R2].[SALES].[SALESORDERDETAIL] AS B ON A.SALESORDERID = B.SALESORDERID WHERE ORDERDATE >= '2006-01-01' AND ORDERDATE < '2007-01-10' GROUP BY DATEPART(MONTH,[ORDERDATE]) ORDER BY 1 -- 시계열 DATA의 순서 정의 SELECT Month, UNITPRICE AS UNITPRICE, rank() over(order by Month) AS rnk into #liner_trend FROM #DATA -- 기울기, y절편구하기 DECLARE @RegressCoeff MONEY DECLARE @Intercept MONEY SELECT @RegressCoeff= (Avg(rnk * 1.0000 * UNITPRICE) - Avg(rnk * 1.0000) * Avg(UNITPRICE)) / VarP(rnk * 1.0000) , @Intercept=Avg(UNITPRICE) - ((Avg(rnk * 1.0000 * UNITPRICE) - Avg(rnk * 1.0000) * Avg(UNITPRICE)) / VarP(rnk* 1.0000)) * Avg(rnk * 1.0000) FROM #liner_trend -- 최종데이터출력 SELECT * , A.Month * @RegressCoeff + @Intercept AS LINER_TREND FROM #DATA AS A |
Step03. 데이터 집합에 쿼리 작성
Step04. 차트 추가 ( 꺽은 선형 )
Step05. 결과
*Method2. Query 이용
Step01. 기본쿼리 작성
SELECT DATEPART(MONTH,[ORDERDATE]) AS Month , SUM(B.UNITPRICE) AS UNITPRICE FROM [ADVENTUREWORKS2008R2].[SALES].[SALESORDERHEADER] AS A JOIN [ADVENTUREWORKS2008R2].[SALES].[SALESORDERDETAIL] AS B ON A.SALESORDERID = B.SALESORDERID WHERE ORDERDATE >= '2006-01-01' AND ORDERDATE < '2007-01-10' GROUP BY DATEPART(MONTH,[ORDERDATE]) |
Step02.VB 사용자 지정 코드 작성
public function exp_RegressCoeff(byval avg_rnk_val as Double , byval avg_rnk as Double, byval avg_val as Double, byval VarP_rnk as Double) as Double Return (avg_rnk_val - avg_rnk * avg_val) / VarP_rnk end function public function exp_Intercept(byval avg_rnk_val as Double , byval avg_rnk as Double, byval avg_val as Double, byval VarP_rnk as Double) as Double Return avg_val - ((avg_rnk_val - avg_rnk * avg_val) / VarP_rnk) * avg_rnk end function |
Step03. 차트 데이트 추가
- 사용자 정의 함수 호출
=Fields!Month.Value * code.exp_RegressCoeff( Avg(Fields!UNITPRICE.Value*Fields!Month.Value, "DataSet_Query") ,Avg(Fields!Month.Value, "DataSet_Query") ,Avg(Fields!UNITPRICE.Value, "DataSet_Query") ,VarP(Fields!Month.Value, "DataSet_Query") ) + code.exp_Intercept( Avg(Fields!UNITPRICE.Value*Fields!Month.Value, "DataSet_Query") ,Avg(Fields!Month.Value, "DataSet_Query") ,Avg(Fields!UNITPRICE.Value, "DataSet_Query") ,VarP(Fields!Month.Value, "DataSet_Query") ) |
Step04. 결과
댓글 없음:
댓글 쓰기