2015년 4월 2일 목요일

[SSRS] 추세선 그리기 (Add a trend line in SSRS)

*문제: SSRS에서 추세선 그리기

     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. 결과



댓글 없음:

댓글 쓰기

추천 게시물

python: SVD(Singular Value Decomposition)로 간단한 추천시스템 만들기( feat. surprise )

svd_example In [15]: # !pip install surprise In [21]: from...