레이블이 chart인 게시물을 표시합니다. 모든 게시물 표시
레이블이 chart인 게시물을 표시합니다. 모든 게시물 표시

2015년 5월 18일 월요일

[SSRS]차트 너비 동적으로 설정하기(Dynamic set of chart width)

*문제: 차트 너비를 동적으로 설정하고 싶은 경우

*해결: 차트 속성의 DynamicHeight, DynamicWidth 속성을 활용

*Step0. SP 생성

CREATE PROC DBO.UP_GET_SALES
@TOP_CNT INT
AS
BEGIN

SELECT TOP(@TOP_CNT)
DATEPART(YEAR,[ORDERDATE]) AS YEAR
, DATEPART(MONTH,[ORDERDATE]) AS MONTH
, SUM(B.UNITPRICE) AS UNITPRICE
, COUNT(*) AS CNT
FROM [SALES].[SALESORDERHEADER] AS A WITH(NOLOCK)
JOIN [SALES].[SALESORDERDETAIL] AS B WITH(NOLOCK)
ON A.SALESORDERID = B.SALESORDERID
JOIN [PRODUCTION].[PRODUCT] AS PD WITH(NOLOCK)
ON B.PRODUCTID = PD.PRODUCTID
WHERE DATEPART(YEAR,[ORDERDATE]) = 2013
GROUP BY DATEPART(YEAR,[ORDERDATE])
, DATEPART(MONTH,[ORDERDATE])
ORDER BY 2
END

​*Step1. Report 매개변수 생성



*Step2. 데이터 집합 생성

     a. 생성한 SP로 데이터 집합을 생성하고, report 매개변수를 SP에 매개변수 값으로 전달



*Step3. DynamicWidth 설정

     a. 매개변수 값을 전달 받아 차트의 너비(inch)로 설정해 보자

          차트 클릭 > 속성 창 > DynamicWidth

=(1 + Parameters!rp_top_cnt.Value / 2) & " in"

or

​=(1 + CountDistinct(Fields!MONTH.Value, "DataSet") / 2) & " in"

     ex> 12를 입력하면 --> 7 in, 10을 입력하면 --> 6 in
     

*Step4. 결과

     a. 매개변수의 값에 따라 차트의 너비가 변경 된다.



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