2016-12-16 1 views
3

14 개의 하위 보고서가있는 SSRS에 대한 보고서가 있습니다. 이러한 하위 보고서는 모두 동일한 저장 프로 시저에서 읽지 만 데이터가 다른 방식으로 표시됩니다 (계산이 다르기 때문에). 필자가 작성한 SP는 다음과 같습니다.SSRS - 여러 데이터 집합에서 임시 테이블 재사용

IF OBJECT_ID('tempdb.dbo.#blabla') IS NOT NULL 
    BEGIN DROP TABLE #blabla END 
SELECT a,b,c,d,e 
INTO #blabla 
WHERE a='bla' 

IF @type = 1 --report 1 
    BEGIN 
     SELECT .... 
    END 
IF @type = 2 --report 2 
    BEGIN 
     SELECT ..... 
    END 

기타 등등.

변환 할 데이터를 공급하는 저장 프로 시저 시작 부분에 3 개의 임시 테이블을 만듭니다. 문제는 각 하위 보고서에 대해 테이블이 계속해서 다시 만들어지기 때문에 보고서를 작성하는 데 오랜 시간이 걸리는 것입니다. 저장 프로 시저 시작시 생성 된 테이블을 다시 사용할 수있는 해결 방법이 있습니까?

+1

얼마나 자주 데이터가 변경됩니까? 이것이 야간 배치로 끝나면 아마 임시 테이블 대신 일반 테이블을 만들 수 있으며 밤 배치에 데이터를 넣을 수 있습니까? 그런 다음 임시 테이블을 만드는 대신 해당 테이블에서 SP를 살펴보십시오. – steenbergh

+0

이것은 ETL 프로세스로 수행되지 않습니다. 임시 테이블은 영구 테이블 (의학적 주장이므로 수백만, 수백만 행)에서 추출한 것입니다. temps는 영구 테이블에 대한 읽기 작업을 최소화하는 방법입니다. 보고서에 날짜 매개 변수가 있기 때문에 영구적으로 사용할 수 없습니다. – raltandi

답변

1

두 개의 열 (임시 테이블의 시작 날짜와 종료 날짜)을 포함하는 하나의 행을 포함하는 다른 테이블 (제어 테이블)을 생성 할 수 있습니다. 각 보고서가 시작되면 현재 날짜를 제어 테이블의 날짜와 비교하여 점검해야합니다. 날짜가 현재 temp 테이블을 다시 작성하지 않으면 처리를 계속하십시오. 이 방법으로 공유되는 임시 테이블을 생성하는 경우에는 임시 테이블 만 만들지는 않을 것입니다.

또 다른 방법은 매일 밤 자정에 작업 테이블을 다시 작성하는 SQL Server 작업을 실행하는 것입니다.

그런데 임시 테이블에 인덱스를 만들 수 있으며 임시 테이블에 클러스터 된 인덱스를 추가하는 것이 중요합니다. '작은'테이블 인 경우에도 그러한 테이블에 대해 훨씬 빠른 결과를 얻을 수 있습니다.

1

별도의 하위 보고서를 사용하기 때문에 각 하위 쿼리는 임시 테이블과 동일한 트랜잭션을 사용하지 않습니다. SQL Server는 쿼리 연결이 끊어지면 테이블을 삭제합니다.

모든 하위 보고서를 하나로 결합해볼 수 있습니다. 데이터 소스에있는 Use Single Transaction 상자를 확인하면 각 검색어에 대해 #TEMP 테이블을 사용할 수 있습니다.

또 하나는 글로벌 임시 테이블 - ## TEMP을 사용하는 것입니다. 전역 임시 테이블은 자동으로 삭제되지 않으며 다른 하위 보고서에서 사용할 수 있습니다.

+0

모든 하위 보고서를 하나로 결합하여 해당 상자를 검사했지만 너무 오래 걸렸습니다. 나는 또한 Global Temp Tables를 사용하려고 생각했으나 다른 사람이 동시에 보고서를 열면 충돌을 일으키지 않겠는가? – raltandi

+0

SSRS에서 전역 임시 파일을 공유 했으므로 문제가 발생하지 않았습니다. –

관련 문제