반응형

요약 리포트 생성 발송 패키지 구현 – (1) 강좌 소개 준비

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

 

 

 

이번에는 조금 간단하면서도 실무에서 많이 필요로 하는 시나리오로 실습 강좌를 진행해 보겠습니다. 이번 강좌 역시 세부적인 설정들까지 가능한 상세히 다루도록 하겠습니다.

 

 

강좌 시나리오

 

계속해서 데이터가 쌓이는 테이블로부터 일별 요약 데이터를 추출 다음,

이를 일자 엑셀 파일로 출력해서 수신자 리스트에 있는 대상에게 메일로 통보하는 작업을 구현하시오.

 

비교적 간단하면서도 실제 업무에서 많이 요구되는 형태의 작업 유형입니다. 강좌를 활용해서 SSIS에서의 동적 설정 엑셀 또는 텍스트 파일 처리 등을 살펴보겠습니다.

 

 

 

강좌 순서

 

1. 강좌에 필요한 데이터 필요한 테이블 생성하기

2. 데이터를 읽어와서 엑셀로 출력하는 기본 패키지 만들기

3. 일자 별로 데이터를 읽어올 있도록 입력 쿼리 수정하기

4. 일자 별로 엑셀 파일을 만들도록 대상 파일 설정하기

5. 수신자 리스트를 읽어와서 메일로 보내기

 

 

 

 

1. 필요한 테이블 준비

다음과 같이 ReportTestDB라는 테스트 데이터베이스를 만들고, ReportData라는 단위로 기록되는 데이터 테이블을 만듭니다. 그런 다음, 임의의 데이터를 채워 넣습니다.

 

--테스트용 데이터베이스 생성

 

CREATE DATABASE ReportTestDB

GO

 

USE ReportTestDB

GO

--일별로 쌓이는 데이터 테이블 생성

CREATE TABLE ReportData

(

                  Seq INT identity,

                  Value1 float not null default(rand()*100),

                  Value2 float not null default(rand()*10),

                  Value3 float not null default(rand()*1000),

                  InputDate datetime not null

)

GO

 

CREATE CLUSTERED INDEX CIX_ReportData ON ReportData(InputDate)

GO

 

 

--일별 테스트 데이터 생성

SET NOCOUNT ON

BEGIN TRAN

 

DECLARE @InputDate datetime

SET @InputDate = '2008-05-01'

 

WHILE (@InputDate<'2009-01-01')

BEGIN

                  INSERT ReportData(InputDate)

                  VALUES(@InputDate)

 

                  SET @InputDate = DATEADD(ss, rand()*180, @InputDate)

END

 

COMMIT TRAN

SET NOCOUNT OFF

GO

 

SELECT COUNT(*) FROM ReportData

--236556

 

 

강좌에서는 데이터를 이용해서, 처리 일자 기준 최근 1주일 데이터를 엑셀로 출력하도록 하겠습니다. 예를 들어 다음과 같은 형태입니다.

 

) 처리 일자가 2008-05-10일인 경우 5 2일부터 9일까지의 요약 데이터 생성



 

 

이러한 형태의 데이터를 생성하기 위한 쿼리도 준비합시다. 기왕이면 다음과 같이 저장 프로시저로 만드는 것이 성능적인 면에서나 관리적인 면에서 유리할 것입니다.

 

USE ReportTestDB

GO

 

CREATE PROC dbo.USP_SelectData

                  @InputDate datetime

AS

                  SELECT

                                   ISNULL(CONVERT(CHAR(10), InputDate, 121), 'Total') as Date,

                                   COUNT(*) AS Cnt,

                                   AVG(Value1) as Value1Avg,

                                   AVG(Value2) as Value2Avg,

                                   AVG(Value3) as Value3Avg

                  FROM ReportData WITH (NOLOCK)

                  WHERE InputDate>=DATEADD(DD, -7, @InputDate)

                                    AND InputDate<@InputDate

                  GROUP BY CONVERT(CHAR(10), InputDate, 121)

                  WITH ROLLUP

                  ORDER BY 1

GO

 

 

 

여기까지 테이블 준비하고선 이제 패키지를 만들겠습니다. 다음 강좌부터 본격적으로 패키지를 만들어봅시다.


@.@
 

반응형

+ Recent posts