'SQL Server'에 해당되는 글 37건
- 2010/02/11 SQL Server 2005에서 SQL Server 2008로 업그레이드(Developer Edition)
- 2010/02/02 SQL Server 2008 새로운 기능 정리
- 2010/01/27 SQL Server 2005 Analysis Services에 대한 HTTP 액세스 구성시 트러블슈팅
- 2009/12/03 SSAS HTTP 액세스 구성
- 2009/11/23 Office 2007에서 SQL Server 2005 Analysis Service 접속 실패
- 2009/11/10 XML Indexes in SQL Server 2005
- 2009/11/04 SQL Server 구동시 1204 추적플래그 설정
- 2009/10/16 RANET OLAP UI LIBRARY
- 2009/10/07 SSAS 계산 멤버를 이용해 누적측정값 생성하기
- 2009/10/07 SSAS 시간차원 계층 만들기
- 2009/10/07 SSAS MDX 쿼리 구문
- 2009/09/28 (SSAS) 큐브처리시 OLAP 저장소 엔진 오류: 특성 키를 찾을 수 없어 특성 키가 알 수 없는 멤버로 변환되었습니다.
- 2009/09/25 Snowflake Schema(눈송이 스키마)
- 2009/09/24 SQL Server Analysis Services 카운트 차원 테이블
- 2009/09/24 SQL Server Analysis Services 시간 차원 테이블 만들기
- 2009/09/22 Star Schema(별모양 스키마)
- 2009/09/21 SQL Server 기반의 BI 솔루션 개발
- 2009/09/21 SQL Server Analysis Services 개요
- 2009/09/18 sp_who2 LastBatch를 올바르게 출력하기
- 2009/09/17 WAITFOR
SQL Server 2005에서 SQL Server 2008로 업그레이드(Developer Edition)

참고한 문서 : http://technet.microsoft.com/ko-kr/library/bb510411.aspx
관리와 운영측면에서 본 마이그레이션 필요성
-
미러링 환경이 구축되어 있을 경우 가용성 향상
-
백업용량을 축소시킬 필요가 있을 경우 써드파티 불필요
-
데이터 동기화가 필요하고 현재 성능 저하 및 데이터 신뢰성 확보에 문제가 있을 경우 마이그레이션 필요
-
관리해야할 데이터베이스 서버가 여러대이고 통합 관리하는데 불편함이 있다면 마이그레이션 후 중앙관리서버와 데이터수집기 운영으로 효과를 볼 수 있다.
정책 기반 관리를 적용해 일관된 정책을 여러 서버에 쉽게 전파하고 운영할 수 있는 장점이 있다.
-
데이터의 암호화 기능을 다양하게 지원하여, 보안성을 향상 시킬 수 있다.
개별 데이터 암호화 알고리즘 확장 지원 및 옵션 설정으로 엔진차원에서 암/복호화 수행하여 데이터파일 유출시에도 걱정을 덜어준다.
개발 측면에서 향상된 기능
-
테이블/인덱스/인덱싱된 뷰의 데이터 압축 지원
-
분할된 테이블 및 인덱스에 대한 파티션 전환 성능 향상
-
공간 데이터 지원(geometry, geography 데이터 형식 추가)
-
날짜 데이터형식 추가되어 정밀도 향상
-
계층적 구조 지원으로 프로그래밍 편의성 향상
-
전체 텍스트 검색이 데이터베이스에 통합되어 이동, 백업/복원 시 관리 용이
-
T-SQL 프로그래밍 편이성 증가
-
계층적구조 지원을 위한 데이터타입(hierarchyid) 추가
-
날짜시간 데이터타입 추가
-
복합 연산자 지원( set @x += 2)
-
멀티-insert 지원
-
merge 구분 지원으로 조인 결과에 따른 insert/update/delete 구문 수행 가능
-
테이블 반환 매개 변수 지원
-
성능과 보안 측면에서 향상된 기능
-
전체 테이블 인덱스 -> 필터링된 인덱스 및 통계 지원으로 쿼리 성능 개선 및 인덱스 유지 관리 및 저장소 비용 감소
-
테이블 및 쿼리 힌트 향상으로 고급 쿼리 성능 튜닝시 정밀하게 제어 가능
-
잠금 에스컬레이션을 해제할 수 있어 분할 테이블의 경우 파티션 수준으로 잠금 구성 가능
-
데이터웨어하우스 쿼리 성능 향상 – 향상된 비트맵 필터링 참조
-
향상된 병렬 처리 쿼리
-
암호화 함수 지원, TRIPLE_DES_3KEY 사용 가능(DES 설명 제공)
-
TDE(투명한 데이터 암호화) 기능은 응용 프로그램 독립적으로 데이터베이스 파일을 자동으로 암호화하는 옵션 제공.
SQL Server 2005 Analysis Services에 대한 HTTP 액세스 구성시 트러블슈팅

SQL Server 2005 Analysis Services(이하 SSAS)에 접근하기 위해 클라이언트가 직접 SSAS에 연결하는 대신 HTTP를 통해 IIS 웹서버를 경유하도록 구성할 수 있습니다.
Windows 2003서버에서 SSAS에 대한 HTTP 액세스를 구성하는 상세한 방법은 MSDN의 다음 아티클을 참조하세요.
http://msdn.microsoft.com/ko-kr/library/cc917711.aspx
여기에서는 IIS를 경유하도록 구성한 시스템에서 오류가 발생할 경우 해결방법에 대해 기술합니다.
(이 문서는 향후 계속 갱신하도록 합니다.)
#1. 클라이언트에서 전송계층 오류 발생
- 오류 메시지
한글
| 쿼리를 실행할 수 없습니다. 전송계층에서 오류가 발생했습니다. 연결이 닫혔습니다. |
영문
| The query could not be processed: |
- 증상
위와 같은 오류메시지를 출력하면서 데이터소스와 연결이 끊어진다.
SSAS서버는 정상 동작하고 있다.
- 원인
IIS의 olap 사이트에 문제가 있는 것 같지만 정확한 원인을 찾을 수 없다.
- 해결
IIS의 olap 가상디렉터리의 응용프로그램풀을 재시작(recyle)하면 해결된다.
해당 서버에 특정 시간 간격으로 olap 응용프로그램풀을 재시작하도록 배치작업을 생성했다.
olap_recyle.bat 파일 생성
| cd \windows\system32 |
Office 2007에서 SQL Server 2005 Analysis Service 접속 실패

다음과 같은 오류
"Initialization of the data source failed.
Check the database server or contact your database administrator. Make sure the external database is available, and then try the operation again. If you see this message again, create a new data source to connect to the database."
해결 방법
http://www.sqlservercentral.com/Forums/Topic504542-147-1.aspx
시작 매개 변수에 ;T1204 입력한다.
세미콜론(;)을 빼먹으면 안된다.
구동 중인 SQL Server에서 추적플래그를 설정하려면 다음과 같이 DBCC 구문을 사용한다.
-- 전역 플래그 설정
DBCC TRACEON(1204, -1);
-- 전역 플래그 조회
DBCC TRACESTATUS(-1);
다음과 같은 데이터가 있다.
| 일자 | 가입유저수 |
| 2009-01-01 | 10 |
| 2009-01-02 | 20 |
| … | … |
| 2009-03-10 | 20 |
| 2009-03-11 | 12 |
| … | … |
위 테이블은 일자별 가입유저수 데이터이다.
이 테이블이 팩트 테이블이고 시간차원은 년->월->일 계층구조를 갖도록 이미 만들어져 있다고 치자.
(시간 차원 계층만들기 포스트 참조)
일자별 가입유저수는 측정값으로 쉽게 만들수 있지만 다음 표와 같이 누적유저수를 구하려면 어떻게 해야할까?
| 일자 | 가입유저수 | 누적유저수 |
| 2009-01-01 | 10 | 10 |
| 2009-01-02 | 20 | 30 |
| … | … | … |
| 2009-03-10 | 20 | 120 |
| 2009-03-11 | 12 | 132 |
| … | … | … |
이럴 경우 다음과 같이 큐브에 계산 멤버를 생성해서 원하는 측정값을 만들 수 있다.
위 계산멤버의 핵심은 다음 식이다.
Aggregate(
periodstodate(
[날짜].[Calendar].[Calendar Year],
[날짜].[Calendar].CurrentMember
), [Measures].[유저수]
)
Aggregate함수와 PeriodsToDate함수는 SSAS의 MDX 쿼리 구문이다.
PeriodsToDate함수의 구문은 다음과 같다.
PeriodsToDate( [ Level_Expression [ ,Member_Expression ] ] )
Level_Expression은 수준을 반환하는 MDX식이고 필수파라미터이며, Member_Expression은 멤버를 반환하는 MDX식이고 선택파라미터이다.
수준은 차원의 계층을 말하고 멤버는 차원의 멤버를 의미한다.
즉, 위 식은 Calendar Year 수준(년도내에서)에서 마지막 멤버단위로 유저수 측정값을 누적하라는 의미이다.
CurrentMember는 시간차원의 Calendar계층의 최하위 멤버인 Day멤버(2009-01-01)이다.
시간차원 테이블 스키마
데이터원본인 시간차원 테이블 스키마는 다음과 같다. (좀 더 자세한 정보는 시간 차원 테이블 만들기 포스트 참조)
차원 생성
날짜 차원을 생성한 후 다음과 같이 작업을 수행하면 된다.
- Full Date컬럼을 키 특성으로 생성
Full Date특성의 속성을 다음과 같이 변경
- Day Number Of Year 특성 추가
- Day Number Of Year 특성을 복사해서 Day 특성 생성
Day특성의 속성을 다음과 같이 변경
KeyColumns의 Collection은 다음과 같다.
- Month Number Of Year 특성 추가후 Month로 이름 변경
Month특성의 속성을 다음과 같이 변경
KeyColumns의 Collection은 다음과 같다.
- Full Date키 특성에서 Month 특성 관계 제거
- Day 특성에 Month특성 관계 생성
- Calendar Quarter 특성 추가 후 Full Date에서 특성 관계 제거
Calendar Quarter특성의 속성을 다음과 같이 변경
KeyColumns의 Collection은 다음과 같다.
- Month특성에 Calendar Quarter 특성 관계 생성
- Calendar Year 특성 추가 후 Full Date에서 특성 관계 제거
Calendar Year특성의 속성을 다음과 같이 변경
- Calendar Quarter에 Calendar Year 특성 관계 생성
- Calendar 계층 생성
큐브 수정
큐브에 날짜 차원을 추가한 후 다음과 같이 차원 용도를 설정하면 된다.
SELECT
[차원명].[특성].(Children|Members|멤버) ON COLUMNS,
[차원명].[특성].(Children|Members|멤버) ON ROWS
FROM
[큐브명]
WHERE [Measures].[측정값]
ON COLUMNS에 열거된 차원은 X축을 구성하고 ON ROWS에 열거된 차원은 Y축을 구성한다.
- Children
All을 제외한 해당 특성의 모든 멤버
예를 들면 날짜차원의 월특성 중에 All을 제외한 모든 멤버를 출력하고 싶다면 다음과 같이 입력한다.
[날짜].[월].Children
- Members
All을 포함한 해당 특성의 모든 멤버
예를 들면 날짜차원의 월특성 중에 All을 포함한 모든 멤버를 출력하고 싶다면 다음과 같이 입력한다.
[날짜].[월].Members
- 멤버
특정 멤버를 직접 입력한다.
예를 들면 날짜차원의 월특성 중에 01월만 지정하고 싶다면 다음과 같이 입력한다.
[날짜].[월].[01]
참고자료
(SSAS) 큐브처리시 OLAP 저장소 엔진 오류: 특성 키를 찾을 수 없어 특성 키가 알 수 없는 멤버로 변환되었습니다.

문제상황
큐브생성과 별도로 차원을 생성한 후 큐브에 차원을 추가하는 경우 큐브처리시 다음과 같은 오류가 발생할 수 있다.
“OLAP 저장소 엔진 오류: 특성 키를 찾을 수 없어 특성 키가 알 수 없는 멤버로 변환되었습니다. 데이터베이스: …”
문제원인
팩트테이블의 컬럼과 차원이 관계가 설정되어 있지만 팩트테이블에 NULL값이 허용될 경우 발생한다.
해결방법
Snowflake Schema는 Star Schema와 더불어 Data Warehouse(DW) 스키마중에서 자주, 그리고 주로 사용되는 스키마이다.
Star Schema가 팩트테이블을 중심으로 차원테이블이 둘러싸고 있는 단순한 모양인 반면 Snowflake Schema는 차원테이블이 또다른 차원테이블과 관계를 맺는게 반복되어 마치 눈송이 결정같은 구조를 이루고 있어 다소 복잡한 구조라 할 수 있다.
Snowflake Schema의 예는 다음과 같다.
측정값이 수량일 때 수량범위를 차원으로 하는 방법은?
예를 들어보자.
고객이 2009년 1분기에 “A”품목을 다음과 같이 구매했다.
| 고객 | 구매수량 |
| 가가가 | 100 |
| 나나나 | 230 |
| 다다다 | 220 |
| 라라라 | 50 |
| 마마마 | 10 |
| 바바바 | 0 |
| 사사사 | 300 |
| 아아아 | 90 |
| 자자자 | 110 |
다음과 같이 구매수량을 50개 단위로 범위를 설정해 각 범위에 해당하는 고객수를 카운트하고 싶다.
| 구매수량 범위 | 고객 수 |
| 0 ~ 50 | 3 |
| 51 ~ 100 | 2 |
| 101 ~ 150 | 1 |
| 151 ~ 200 | 0 |
| 201 ~ 250 | 2 |
| 251 ~ 300 | 1 |
| 301 이상 | 0 |
차원테이블과 팩트테이블을 어떻게 구성해야 할까?
스키마 구성
카운트 차원 테이블 생성
다음과 같이 카운트 차원 테이블을 생성한다.
-- 카운트 차원 테이블 생성
-- 단위 = 50
CREATE TABLE [dbo].[dim_count](
[count_key] [int] NOT NULL,
[range_50_name] [nvarchar](20) NOT NULL,
[range_100_name] [nvarchar](20) NOT NULL,
[range_500_name] [nvarchar](20) NOT NULL,
[range_1000_name] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_dim_play_count] PRIMARY KEY CLUSTERED
(
[count_key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
count_key는 0부터 50의 간격을 갖는 정수값을 입력한다.
declare @i int,
@range_50_name nvarchar(20),
@range_100_name nvarchar(20),
@range_500_name nvarchar(20),
@range_1000_name nvarchar(20)
set @i = 0
begin tran
while @i <= 100000
begin
select
@range_50_name =
case
when @i % 50 = 0 then
cast(@i / 50 * 50 as nvarchar(20)) + N'-' + cast((@i / 50 + 1) * 50 - 1 as nvarchar(20))
else
@range_50_name
end,
@range_100_name =
case
when @i % 100 = 0 then
cast(@i / 100 * 100 as nvarchar(20)) + N'-' + cast((@i / 100 + 1) * 100 - 1 as nvarchar(20))
else
@range_100_name
end,
@range_500_name =
case
when @i % 500 = 0 then
cast(@i / 500 * 500 as nvarchar(20)) + N'-' + cast((@i / 500 + 1) * 500 - 1 as nvarchar(20))
else
@range_500_name
end,
@range_1000_name =
case
when @i % 1000 = 0 then
cast(@i / 1000 * 1000 as nvarchar(20)) + N'-' + cast((@i / 1000 + 1) * 1000 - 1 as nvarchar(20))
else
@range_1000_name
end
insert into dbo.dim_count(count_key, range_50_name, range_100_name, range_500_name, range_1000_name)
values(@i, @range_50_name, @range_100_name, @range_500_name, @range_1000_name)
set @i = @i + 50
end
commit tran
go
팩트 테이블 생성
| quantity | quantity_key | range_50_name |
| 0 | 0 | 0 - 49 |
| 45 | 0 | 0 - 49 |
| 50 | 50 | 50 - 99 |
| 99 | 50 | 50 - 99 |
| 100 | 100 | 100 - 159 |
| 120 | 100 | 100- 159 |
| 149 | 100 | 100 - 159 |
| 150 | 150 | 150 - 199 |
Buisess Intelligence Development Studio(BIDS) SSAS 프로젝트에서 차원 생성
BIDS의 SQL Server Analysis Services(SSAS) 프로젝트에서 차원마법사로 차원을 생성해 보자.
차원 특성은 다음과 같이 range_100_name만 추가로 선택한다.
특성 키 열을 count_key로 선택해야 0 – 99, 100 – 199, …, 1900 – 1999, …와 같은 순서로 정렬이 된다.
위와 같이 정렬이 되는 이유는 Order By 속성이 Name(range_50_name)으로 되어 있기 때문인데, Order By속성을 Key(count_key)로 변경하면 된다.
처리를 다시 한 후 다시연결하면 다음과 같이 정상적으로 정렬된다.
큐브 생성 후 큐브 브라우저로 확인하기
새 큐브 추가 –> 큐브 마법사 –> 팩트 및 차원 테이블 식별에서 다음과 같이 설정한다.
팩트테이블은 fact_sales, 차원테이블은 dim_count와 dim_customer로 한다.
큐브를 만든 후 처리한 후 다시 연결한 후 큐브 브라우저를 보면 다음과 같이 데이터를 확인할 수 있다.
- 문서 끝 -
시간 차원 테이블 만들기
-- 시간 차원 테이블 생성
CREATE TABLE [dbo].[dim_date](
[date_key] [int] IDENTITY(1,1) NOT NULL,
[full_date] [datetime] NULL,
[day_number_of_week] [tinyint] NULL,
[eng_dayname_of_week] [nvarchar](10) NULL,
[kor_dayname_of_week] [nvarchar](10) NULL,
[day_number_of_month] [tinyint] NULL,
[day_number_of_year] [smallint] NULL,
[week_number_of_year] [tinyint] NULL,
[eng_month_name] [nvarchar](10) NULL,
[kor_month_name] [nvarchar](10) NULL,
[month_number_of_year] [tinyint] NULL,
[calendar_quarter] [tinyint] NULL,
[calendar_year] [char](4) NULL,
[calendar_semester] [tinyint] NULL,
[fiscal_quarter] [tinyint] NULL,
[fiscal_year] [char](4) NULL,
[fiscal_semester] [tinyint] NULL,
CONSTRAINT [pk_dim_date_date_key] PRIMARY KEY CLUSTERED
(
[date_key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [ak_dim_date_full_date] UNIQUE NONCLUSTERED
(
[full_date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [INDEX]
) ON [PRIMARY]
GO
시간 차원 데이터 입력하기
-- 데이터 입력
DECLARE @begin_date DATETIME, @end_date DATETIME, @date DATETIME
DECLARE @kor_dayname_of_week NVARCHAR(10), @eng_dayname_of_week NVARCHAR(10),
@kor_month_name NVARCHAR(10), @eng_month_name NVARCHAR(10)
SELECT @begin_date = '2008-01-01', @end_date = '2020-12-31'
SET @date = @begin_date
BEGIN TRY
BEGIN TRAN
WHILE @date <= @end_date
BEGIN
SET LANGUAGE ENGLISH
SELECT @eng_dayname_of_week = DATENAME(dw, @date),
@eng_month_name = DATENAME(mm, @date)
SET LANGUAGE KOREAN
SELECT @kor_dayname_of_week = DATENAME(dw, @date),
@kor_month_name = DATENAME(mm, @date)
INSERT INTO [dbo].[dim_date](
[full_date],
[day_number_of_week],
[eng_dayname_of_week],
[kor_dayname_of_week],
[day_number_of_month],
[day_number_of_year],
[week_number_of_year],
[eng_month_name],
[kor_month_name],
[month_number_of_year],
[calendar_quarter],
[calendar_year],
[calendar_semester],
[fiscal_quarter],
[fiscal_year],
[fiscal_semester]
)
SELECT
@date,
DATEPART(dw, @date),
@eng_dayname_of_week,
@kor_dayname_of_week,
DATEPART(dd, @date),
DATEPART(dy, @date),
DATEPART(ww, @date),
@eng_month_name,
@kor_month_name,
DATEPART(mm, @date),
DATEPART(qq, @date),
DATEPART(yy, @date),
CASE WHEN DATEPART(qq, @date) IN (1,2) THEN 1 ELSE 2 END,
DATEPART(qq, @date),
DATEPART(yy, @date),
CASE WHEN DATEPART(qq, @date) IN (1,2) THEN 1 ELSE 2 END
PRINT @date
SET @date = DATEADD(dd, 1, @date)
END
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
ROLLBACK TRAN
END CATCH
GO
Start Schema(별모양 스키마)는 Data Warehose(DW) 스키마중에서 가장 간단한 스타일의 스키마이다.
차원과 팩트테이블이 별모양을 이루고 있다고 해서 별모양 스키마라고 부른다.
다음 그림을 보면 팩트테이블인 판매테이블 주위를 차원테이블인 고객/날짜/상품/사원테이블이 둘러싸고 별모양을 이루고 있다.
팩트테이블은 여러개의 차원테이블과 관계를 맺을수 있고 차원테이블은 여러개의 특성(컬럼:열)을 갖게된다.
이 글을 읽기 전에
- 이 글은 잘못된 내용을 포함할 수 있다.
- 이 글은 SQL Server Analysis Services(SSAS)를 공부하면서 정리한 개인적인 글로 향후 내용이 수정/삭제될 수 있다.
- 이 글에 포함된 잘못된 내용으로 인해 발생하는 문제는 글 작성자가 책임지지 않는다.
개발단계
우선 개발단계를 다음과 같이 정한다.
- Operational Data Store1(ODS) 스키마 설계 및 구축
- Data Warehouse(DW)/Data Mart(DM) 스키마 설계 및 구축
- Business Intelligence(BI) 클라이언트 어플리케이션 설계 및 구축
ODS 스키마 설계 및 구축
데이터원본이 이기종 시스템에 분산되어 있을때 이 데이터들을 분석과 리포팅하기 편하도록 통합할 수 있게 만들어진 데이터베이스를 ODS라고 한다.
데이터원본은 보통 Online Transaction Processing(OLTP) 데이터베이스인데 OLTP데이터베이스에서 직접 DW/DM으로 데이터변환을 하는 경우 많은 문제를 야기할 수 있다.
또한 데이터를 Unified Dimensional Model(UDM)데이터로 변경하기 위해서는 차원과 팩트를 분리해야 하는데 OLTP데이터베이스가 이런 작업에 적합하지 않은 스키마를 가진 경우가 많다.
이럴 경우 데이터원본을 1차로 가공(가공하지 않고 데이터원본과 스키마를 동일시해도 된다.)하여 ODS에 구축한 다음 ODS에서 DW/DM의 UDM데이터로 변환하는 것이 좋다.
ODS 스키마는 데이터원본과 동일하게 설계해도 되지만 가급적이면 별모양스키마(Star Schema) 형태로 설계하는 것이 좋다.
SQL Server integration Services(SSIS)를 사용한다.
DW/DM 스키마 설계 및 구축
Buisness Intelligence Development Studio(BIDS)는 Visual Studio에 통합되어 설치된다.
SSAS프로젝트를 생성해서 DW/DM을 설계 및 구축할 수 있다.
데이터원본은 ODS로 한다.
SSAS프로젝트를 사용하는 간단한 방법은 다음 문서를 참고한다.
SQL Server 2005 Analysis Service - 큐브 만들기
BI 클라이언트 어플리케이션 설계 및 구축
BI 클라이언트 어플리케이션은 최종유저(End-user)가 사용하는 도구로 데이터를 분석하고 리포팅하는 도구이다.
Performance Management의 역할을 수행하기 위해서 좀 더 지능적이고 복잡한 구현이 필요하지만 보통 데이터의 분석에 그 촛점을 맞출 경우 다음과 같이 그 기능을 축소할 수 있다.
- 정형화 분석 도구
유저가 필요로 하는 분석 데이터를 정의하고 이에 맞는 결과를 출력할 수 있도록 정형화된 리포팅을 하거나 정형화된 분석도구를 제공한다.
요구사항이 변하면 어플리케이션을 재작성해야 한다. - 비정형화 분석 도구
유저가 직접 필요한 차원과 팩트를 조작해 데이터를 분석한다. 유저의 다양한 요구사항을 받아들일 수 있지만 사용자 교육이 복잡해지고 어려워진다.
보통은 정형화 분석과 비정형화 분석이 혼합된 도구를 개발하게 될 것 같다.
각주
1. ODS : http://en.wikipedia.org/wiki/Operational_data_store
BI Framework
Microsoft BI 솔루션은 Business Intelligence Platform, Information Woker Platform, Performance Management 영역으로 구성된다.
[BI 솔루션 체계]
[BI 솔루션을 구성하는 플랫폼 관계]
[BI 솔루션을 구성하는 MS제품의 계층별 관계]
BI Platform
[BI Platform]
SSIS(SQL Server Integration Services)는 SQL Server 뿐 아니라 이종 시스템(파일, Oracle, Sybase, Mysql,…)으로부터 데이터를 추출 및 변환할 수 있는 기능을 제공한다.
BI Platform의 SSI는 Legacy System이나 분산된 데이터원본에서 SQL Server의 DW(Data Warehouse)나 DM(Data Mart)에 데이터를 변환/적재해주는 중요한 역할을 담당한다.
SSAS(SQL Server Analysis Services)는 OLAP 엔진과 데이터마이닝 엔진을 포함한다. 사용자들이 다양한 데이터 분석 도구를 사용해 관계형 리포팅 및 다차원 분석을 할 수 있도록 UDM(Unified Dimensinal Model)을 지원한다.
- OLAP 엔진
자동 집계 설계 및 동적 계산 기능 지원.
실시간 분석을 위한 Real Time OLAP 및 여러 유형의 Near Real Time OLAP을 지원 - 데이터마이닝 엔진
다양한 Data Mining 모델 지원 - 통합차원모델(UDM)
- 데이터를 차원1과 측정값2으로 표현하는 방식
- 본질적으로 큐브와 동일
- UDM은 통합 메타데이터 모델로서 관계형 리포팅의 유연성과 OLAP의 다차원 분석의 장점을 모두 지원한다.
- 멀티-팩트 테이블 지원(차원과 측정값의 복합 모델 구성 지원)
- KPI(Key Performance Indicator : 핵심 성능 지표) 관리
- 사용자 또는 그룹에 적합한 큐브 뷰 구성 지원
1. 차원 : UDM은 엔터티에 대한 모든 특성을 별도의 차원으로 그룹화
2. 측정값 : 트랜잭션 값 또는 측정치. (= 큐브의 팩트)
Information Worker Platform
UDM에 접근해 데이터의 분석 및 정보 가공을 쉽게 할 수 있도록 여러가지 정보활용도구가 제공된다.
- Excel
- Visio
- Silverlight or WPF
Performance Management
성능관리(Performance Management)는 다음 항목으로 구성되며 주로 기업의 의사 결정을 보조해 주는 영역이다.
- Planning 및 Budgeting
- 예산 제출, 승인, 재무 취합 및 버전 관리 기능을 제공한다.
- Excel 기반에서 계획 수립 및 시뮬레이션을 수행할 수 있다.
- 부문과 전산 단위의 사업 예산 연결 조정 및 버전 관리 기능과 데이터 취합/리포트 생성 및 배포 자동화가 주요 기능
- Performance Monitoring
- 부문과 전사 단위의 KPI들을 통합 관리하고 모니터링한다.
- KPI들을 스코어 카드 및 Dashboard를 구현함으로써 성과를 전략과 연계하여 분석할 수 있다.
- 기대효과
- KPI를 구성하고 모니터링 함으로써 신속한 의사결정에 기여
- KPI의 실적, 목표, 상태 등을 시각적으로 표현
- 스코어 카드 및 Dashboard를 구성하면 전체적인 상황 파악을 용이하가 할 수 있다.
- Analytics
- 다차원적으로 데이터 분석
- 강력한 데이터 시각화
- 다양한 비정형 보고서 작성 가능(미리 포맷이 정해진 보고서가 아닌 필요에 따라 즉시 포맷을 변경)
- 기대효과
- 다차원 분석(Pivot, Slice/Dice/ Drill-Down, Drill-Up, Drill-Through, 조건부 서식, 정렬, 필터)
- 다양한 형태(PDF, HTML, XML)로 분석 결과 배포 및 공유
- 업무 로직의 중앙 관리를 통해 전사 수준에서 일관성 확보, Best Practice에 대한 공유를 통해 업무 효율성 향상
* Information Worker Platform과 Performance Management의 차이
둘 다 데이터를 분석, 활용하는 영역이지만 Performance Management의 경우에는 기업의 의사 결정을 직접적으로 보조해주도록 사업계획 및 KPI 모니터링 기능이 강화된 영역이다. 반면 Information Worker 영역은 모니터링과 성과평가에 대한 부분이 제외되어 있다라고 이해하고 있음.
내용출처
BI 구축을 위한 Microsoft SQL Server 2005 Analysis Services 포켓가이드(OLAP 엔진)
sp_who2결과를 보면 LastBatch가 다음과 같이 잘못 출력되는 문제가 있습니다.
원인은 sp_who2의 스크립트를 살펴보면 알 수 있습니다.
select
spid
,status
,sid
,hostname
,program_name
,cmd
,cpu
,physical_io
,blocked
,dbid
,convert(sysname, rtrim(loginame))
as loginname
,spid as 'spid_sort'
, substring( convert(varchar,last_batch,111) ,6 ,5 ) + ' '
+ substring( convert(varchar,last_batch,113) ,13 ,8 )
as 'last_batch_char'
,request_id
into #tb1_sysprocesses
from master.dbo.sysprocesses with (nolock)
위 sql문에서 convert(varchar, last_batch, 113) 부분이 문제인데 SQL Server의 Language옵션에 따라 113 변환이 다른 값을 출력하기 때문입니다.
set language 한국어
select convert(varchar,getdate(),113)
-- 결과 : 15 09 2009 14:50:42:327
set language us_english
select convert(varchar,getdate(),113)
-- 결과 : 15 Sep 2009 14:50:42:327
이렇게 변경된 값을 단순히 substring()하기 때문에 문제가 발생합니다.
LastBatch를 정상적으로 출력하려면 sp_who2를 실행하기 전에 세션의 Language 옵션을 변경해주면 됩니다.
set language us_english
exec sp_who2
T-SQL문에서 시간지연(Delay)이 필요할 때 사용할 수 있다.
WAITFOR DELAY
-- 1초에 한 번씩 현재 시간 출력
declare @i int
set @i = 0
while @i < 10
begin
print convert(varchar, getdate(), 121)
set @i = @i + 1
end
go
-- 결과
2009-09-17 09:43:07.873
2009-09-17 09:43:08.873
2009-09-17 09:43:09.870
2009-09-17 09:43:10.877
2009-09-17 09:43:11.863
2009-09-17 09:43:12.880
2009-09-17 09:43:13.873
2009-09-17 09:43:14.870
2009-09-17 09:43:15.873
2009-09-17 09:43:16.873
WAITFOR DELAY는 주어진 시간동안 기다릴 수 있습니다.
대기시간값은 datetime의 시간부분만 사용합니다. 다음과 같은 포맷을 사용할 수 있습니다.
- ‘00:00’ 시:분
- ‘00:00:00’ 시:분:초
- ‘00:00:00.000’ 시:분:초.밀리초
WAITFOR TIME
-- 09시 45분 59초까지 대기 후 다음 문장 수행
print convert(varchar, getdate(), 121)
waitfor time '09:45:59'
print convert(varchar, getdate(), 121)
-- 결과
2009-09-17 09:45:50.250
2009-09-17 09:45:59.000
WAITFOR TIME은 특정 시간까지 대기합니다.
대기시간값은 datetime의 시간부분만 사용합니다. 다음과 같은 포맷을 사용할 수 있습니다.
- ‘00:00’ 시:분
- ‘00:00:00’ 시:분:초
- ‘00:00:00.000’ 시:분:초.밀리초


이올린에 북마크하기
Prev
Rss Feed