연결된 서버에서의 쿼리 타임아웃

Analysis Services 2013. 8. 14. 16:33

Error Message

"OLE DB provider "MSOLAP" for linked server "MyLinkedServerName" returned message "XML for Analysis parser: The XML for Analysis request timed out before it was completed.".

 

SQL Server에서 Analysis Services와 linked Server 생성이 가능한데 이때 이 링크드 서버에서 xmla 명령을 실행 했을때 

10분 이상 쿼리가 실행 중이면 쿼리 제한시간만료 에러를 내며 종료된다. 

 

기본적으로 서버에서 원격쿼리 제한시간은 600초로 제한되어있으니 쿼리제한 시간을 필요한 만큼 변경해준다.

 

 

 

 

백 엔드 데이터베이스 액세스 모듈에서 오류가 발생했습니다.

Analysis Services 2013. 6. 28. 17:06

Error

Errors in the back-end database access module.

The size specified for a binding was too small,
resulting in one or more column values being truncated.
Errors in the OLAP storage engine: An error occurred while processing the 'Sales2010' partition of the 'InternetSales' measure group for the 'Sales' cube from the 'AdventureWorks' database.

백 엔드 데이터베이스 액세스 모듈에서 오류가 발생했습니다.

바인딩에 지정된 크기가 너무 작아서

하나 이상의 열 값이 잘립니다.

OLAP 저장소 엔진 오류: AdventureWorks 데이터베이스에 있는 'Sales' 큐브에 대한 'InternetSales' 측정값 그룹의 'Sales2010' 파티션을 처리하는 동안 오류가 발생했습니다.

 

 

원인

1. Fact , Dimension 컬럼의 사이즈 변경 (상품코드 varchar(10) > 상품코드 varchar(12) )

2. 실제 12자리의 데이터가 들어왔을 경우 큐브처리에러

 

해결

1. 데이터 원본 뷰 업데이트 (새로고침) 

 

2. 해당 차원의 키컬럼의 데이터 사이즈 업데이트  

 

3. 큐브디자이너의 '차원 용도' 탭에서 해당 차원과 측정값 그룹과의 관계를 끊은 후 다시 연결

4. 큐브 처리

 

 

 

*추가*

BIDS에서 차원, 큐브, 데이터 원본 뷰의 코드 보기로 직접 수정할 수도 있다. 

 

코드 부분에서 데이터 사이즈를 실제 변경된 사이즈로 변경 후 저장

      <ID>GOODS CODE</ID>
      <Name>상품</Name>
      <Usage>Key</Usage>
      <EstimatedCount>600</EstimatedCount>
      <KeyColumns>
        <KeyColumn>
          <DataType>WChar</DataType>
          <DataSize>10</DataSize>
          <Source xsi:type="ColumnBinding">
            <TableID>dbo_DIM_GOODS</TableID>
            <ColumnID>GOODS_CODE</ColumnID>
          </Source>
        </KeyColumn>
      </KeyColumns>

 

위와 같이 차원, 큐브, 데이터 원본 뷰 모두 변경된 컬럼을 찾아 수정해 준다.

BIDS에서 '코드 보기'를 사용해도 되고 SSMS에서 ALTER SCRIPT 로 해도된다.

 

 

 

 

 

 

 

 

 

 

 

엑셀파일 새 창으로 열기

etc. 2013. 4. 11. 18:13

1. 레지스트리 편집기 실행

 

시작버튼 > ‘프로그램 및 파일 검색‘에 regedit 이라고 입력하면

프로그램 목록에 레지스트리 편집기가 나타납니다.

 

레지스트리 편집기를 우클릭하여 관리자 권한으로 실행합니다.

 

 

 

2. .xls 확장자에 커맨드추가하기

트리구조의 가장 상위(컴퓨터)에서 찾기(Ctrl+F)를 실행 .xls 를 찾습니다 

 

 

레지스트리 주소는 컴퓨터\HKEY_CLASSES_ROOT\.xls 가 됩니다.

 

.xls를 클릭하고 우측에 데이터를 보면 Excel.Sheet.8 이 있는데

이번엔 Excel.Sheet.8 을 레지스트리 주소에서 찾습니다.

아래와 같이 컴퓨터\HKEY_CLASSES_ROOT\Excel.Sheet.8 의 주소를 찾습니다. 

 

 

커맨드 추가

같이 컴퓨터\HKEY_CLASSES_ROOT\Excel.Sheet.8\shell 에서 새로 만들기(N) > (K)  

 

키 이름은 적당한 것으로 변경 (ex> 새 창 열기 )

방금 만든 키에서 다시 한 번 반복.  새로 만들기(N) > (K) 

 

키 이름은 command / 값 데이터는 엑셀 실행파일의 위치 + “%1”  지정합니다.

ex>> “C:\Program Files\Microsoft Office\Office14\EXCEL.EXE” “%1” 

 

 

이제 확장자가 xls 인 파일에서 우클릭 하면 아래와 같은 메뉴가 보이고 새로운 창에서 문서가 열립니다.

 

 

확장자가 xlsx 에도 추가할 때는 2번항목부터 다시 반복하면 됩니다. 

 

 

큐브 데이터 검증시 참고

Analysis Services 2013. 3. 28. 16:50
큐브 처리 후 팩트 테이블의 실제 건 수 만큼의 데이터를 보여주지 않을 때
체크해봐야 할 사항.

1. 파티션에서 필터링을 하는지 체크
  파티션을 테이블이 아닌 쿼리로 사용할 경우 파티션 쿼리에서 데이터를 아예 줄여버린 것일 수도 있다.

  WHERE 절 또는 Join등의 부분을 잘 체크해본다.  


2 . 큐브처리 시 캐쉬를 삭제한 후 다시 처리를 해 본다. 
 아래와 같은 쿼리로 캐쉬 삭제가 가능
<ClearCache xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <Object>
    <DatabaseID>ASDB_NAME</DatabaseID>
  </Object>
</ClearCache>

3. 차원 생성시 기본적으로 UnknownMember 가 Visible로 생성이되지만 간혹 None으로 설정이되어 생성이 되는 경우가 있다. 보통 큐브처리시 차원키 비매핑 건에 대해 unknown으로 처리, 에러무시 옵션을 주고 큐브처리를 하는 경우가 많은데 이러한 경우 비매핑건은 Unknown으로 분류되지 않고 아예 데이터를 보여주지도 않게된다.

(left outer join / inner join 으로 생각하면됨) 

보통 차원의 멤버수가 큰 차원에서 이런현상이 자주 발생되는 것으로 보아 MS에서 의도 한 것일 수도 있으나 왠지 버그같다.

 
 
이렇게 바꿔 줌

큐브처리 옵션

Analysis Services 2013. 3. 28. 16:41

처리 옵션

다음 표에서는 Analysis Services에서 사용 가능한 처리 방법을 설명하고 각 방법이 지원하는 개체를 식별합니다.

기본값 처리

개체의 처리 상태를 검색하고 필요한 처리를 수행하여 처리되지 않거나 부분적으로 처리된 개체를 완전히 처리된 상태로 전달합니다. 이 처리 옵션은 큐브, 데이터베이스, 차원, 측정값 그룹, 마이닝 모델, 마이닝 구조 및 파티션에 대해 지원됩니다.

전체 처리

Analysis Services 개체와 이 개체에 포함된 모든 개체를 처리합니다. 이미 처리된 개체에 대해 전체 처리를 실행하면 Analysis Services에서는 개체의 모든 데이터를 삭제한 다음 개체를 처리합니다. 이 처리 유형은 특성 계층이 추가, 삭제 또는 이름이 바뀐 경우와 같이 개체 구조가 변경된 경우에 필요합니다. 이 처리 옵션은 큐브, 데이터베이스, 차원, 측정값 그룹, 마이닝 모델, 마이닝 구조 및 파티션에 대해 지원됩니다.

증분 처리

사용 가능한 팩트 데이터를 새로 추가하고 관련 파티션만 처리합니다. 이 처리 옵션은 측정값 그룹 및 파티션에 대해 지원됩니다.

업데이트 처리

데이터 다시 읽기 및 차원 특성 업데이트를 강제로 수행합니다. 관련 파티션의 융통성 있는 집계와 인덱스가 삭제됩니다. 예를 들어 이 처리 옵션은 차원에 새 멤버를 추가하고 전체 데이터 다시 읽기를 강제로 수행하여 개체 특성을 업데이트할 수 있습니다. 이 처리 옵션은 차원에 대해 지원됩니다.

인덱스 처리

처리된 모든 파티션에 대한 인덱스 및 집계를 만들거나 다시 빌드합니다. 이 옵션은 처리되지 않은 개체에 대해 오류를 발생시킵니다. 이 처리 옵션은 큐브, 차원, 측정값 그룹 및 파티션에 대해 지원됩니다.

데이터 처리

집계나 인덱스를 작성하지 않고 데이터만 처리합니다. 파티션에 데이터가 있는 경우 이 데이터를 삭제한 후 해당 파티션에 원본 데이터를 다시 채웁니다. 이 처리 옵션은 차원, 큐브, 측정값 그룹 및 파티션에 대해 지원됩니다.

처리 안 함

지정한 개체 및 모든 하위 요소 개체의 데이터를 삭제합니다. 삭제한 데이터는 다시 로드되지 않습니다. 이 처리 옵션은 큐브, 데이터베이스, 차원, 측정값 그룹, 마이닝 모델, 마이닝 구조 및 파티션에 대해 지원됩니다.

구조 처리

큐브가 처리되지 않은 경우 Analysis Services에서는 필요에 따라 큐브의 모든 차원을 처리한 다음 큐브 정의만 만듭니다. 마이닝 구조에 이 옵션을 적용하면 원본 데이터로 마이닝 구조를 채웁니다. 이 옵션이 전체 처리 옵션과 다른 점은 마이닝 모델 자체까지 처리를 반복하지는 않는다는 것입니다. 이 처리 옵션은 큐브 및 마이닝 구조에 대해 지원됩니다.

구조 지우기 처리

마이닝 구조에서 모든 학습 데이터를 제거합니다. 이 처리 옵션은 마이닝 구조에 대해서만 지원됩니다.

스크립트 캐시 처리

이 기능은 다음 버전의 Microsoft SQL Server에서 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 말고, 현재 이 기능을 사용하는 응용 프로그램은 가능한 한 빨리 수정하십시오

차원 멤버의 갯수를 측정값으로 만들기

Analysis Services 2013. 3. 28. 16:38

차원 멤버의 갯수를 측정값으로 활용할 수도 있다.

측정값중 DistinctCount를 사용하는 것과 같은 효과일 수 있으나 Distinct Count를 쓰는 것 보다  성능은 떨어진다.  

하지만 경우에 따라 잘 활용할 수 있다.

Distinct Count의 경우 측정값 그룹이 새로 생성이되는 반면 계산된 측정값으로 할 경우 측정값 그룹의 생성없이 만들 수 있다.

 

 

IIF(Count(CrossJoin({[Measures].[측정값]},[차원].[계층].Members), ExcludeEmpty) =0

,null

,Count(CrossJoin({[Measures].[측정값]},[차원].[계층].Members), ExcludeEmpty)-1 )

 

일자형태의 측정값 만들기

Analysis Services 2013. 3. 28. 16:30

 

 

1. 대상컬럼 변환

시간컬럼을 측정값을 numeric형태로 변환합니다.

ETL_LOG라는 테이블의 작업시간 컬럼의 데이터타입은 TIME(7) 입니다.

이것을 초단위로 바꾸고 하루(86,400)로 나누어줍니다. 

---- Query

SELECT

             WTIME                                                                                    AS [작업시간(HH:MM:SS.MS)]

,             (LEFT(CONVERT(VARCHAR,WTIME),2)*3600                    

+           SUBSTRING(CONVERT(VARCHAR,WTIME),4,2)*60

+           SUBSTRING(CONVERT(VARCHAR,WTIME),7,2) ) / 86400.0000          AS [작업시간()/1DAY()]

FROM ETL_LOG

ORDER BY 1 DESC  

 

---- Result

 

2. 계산된 측정값 추가

큐브 생성 시 위에서 추가한 시간측정값컬럼을 측정값에 포함시키고 계산된 측정값 탭에서

스크립트를 추가합니다. (아래의 Script View 에서 추가)

 

---- Script 추가

/*

The CALCULATE command controls the aggregation of leaf cells in the cube.

If the CALCULATE command is deleted or modified, the data within the cube is affected.

You should edit this command only if you manually specify how the cube is aggregated.

*/

CALCULATE;

 

CREATE MEMBER CURRENTCUBE.[Measures].[소요시간]

AS [Measures].[WDURATION],

FORMAT_STRING = IIF(

      [Measures].[WDURATION] < 1

     ,'"0 day"  hh:mm:ss'

     ,'"' + cstr(int([Measures].[WDURATION])) + ' day" hh:mm:ss'),

VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = '로그측정값'  ;

 

노란색으로 표시된 부분만 변경해주시면 됩니다.

소요시간 > 새로만들 계산된 측정값 명

WDURATION > 작업시간 측정값 명

로그측정값 > 측정값그룹 명

 

 

3. 확인

숫자로만 보여지던 측정값만 보다가 측정값에 일자,시간이 나오니 왠지 새롭습니다.

계산된 측정값 생성시 Format_string을 잘 활용하면 더 새로운 것도 만들 수 있을 것 같습니다.

 

---- SSMS에서 확인

 

 

OLE DB error: OLE DB or ODBC error: Query timeout expired HY008

Analysis Services 2013. 2. 15. 17:22

증상)

큐브처리 중
'OLE DB error: OLE DB or ODBC error: Query timeout expired HY008'
라는 메세지를 띄우며 큐브처리 중 에러가 나는 경우가 있다.
큐브처리시 해당 파티션의 크기가 큰 경우 기본설정(60분)시간 내에
파티션 처리가 완료되지 않아 쿼리제한시간 만료 에러를 띄운다.

해결)
1. 파티션을 좀더 작은 단위로 나눈다.
2. 쿼리제한시간을 늘려준다.
( SQL Server Enterprise 버전의 경우 파티션 개수에 제한이 없으나 Standard 버전에서는 3개의 파티션까지 생성이 가능하므로 3개의 파티션으로도 해결이 되지 않을 경우 사용한다.)

- SSMS에서 ASDB Property의 ExternalCommandTimeout 옵션을 조정
(고급 속성 모두 표시 체크박스에 체크를 해야 옵션이 나타난다.)


 


BIDS에서 큐브처리를 할 경우엔 해당 프로젝트에서 솔루션 탐색기의 가장 상위의
DB를 선택 후 도구>옵션에서 제한 시간을 조정한다.

Windows Server 2008 RDP Session limit

Windows Server 2013. 2. 12. 09:33

원격 데스크톱 연결 세션 제한

Windows Server 2008의 기본 설정으로는 원격데스크톱 연결 갯수가 하나로 제한되어 있다.

이 제한은 아래와 같은 방법으로 풀 수 있다.

실행 (Windows Key + R )  > gpedit.msc

 

 

컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 데스크톱 세션 호스트 > 연결

에서 연결 개수 제한 , 원격 데스크톱 서비스 사용자를 하나의 원격 데스크톱 서비스 세션으로 제한

이 두가지 항목을 사용 안 함으로 바꾼다.

또는 연결 개수 제한 항목에서 연결 허용수를 지정할 수도 있다.