데이터베이스 서버로 레코드 선택 푸시다운
보고서 처리 속도를 향상시키는 방법의 핵심은 데이터베이스에서 반환되는 데이터의 양을 제한하는 것입니다. 이 작업을 수행하기 위한 기본 도구는 레코드 선택 수식입니다.
Crystal Reports에서 제공하는 SQL 데이터 소스용 드라이버는 데이터베이스 서버에 레코드 선택을 "푸시다운"할 수 있게 합니다. SQL 데이터 소스에 따라 보고서에 레코드 선택 수식을 지정하면 Crystal Reports는 해당 수식을 분석하여 SQL 쿼리를 생성한 다음 해당 SQL 쿼리를 데이터베이스 서버에 전달합니다. 그런 후 다음의 두 단계에 따라 레코드 선택이 처리됩니다.
- 데이터베이스 서버가 SQL 쿼리를 처리하고 Crystal Reports에 레코드 집합을 반환할 때 레코드 선택의 첫 번째 단계가 발생합니다.
- 두 번째 단계에서, Crystal Reports는 데이터베이스 서버에서 반환된 레코드 집합을 사용하여 로컬에서 레코드 선택 수식의 결과를 다시 구합니다.
데이터베이스 서버는 일반적으로 워크스테이션보다 빠른 컴퓨터이므로 첫 번째 단계에서 서버가 처리할 수 있는 레코드 선택 수식을 지정하는 것이 좋습니다. 이렇게 하면 두 번째 단계에 로컬 컴퓨터에서 이루어지는 레코드 선택이 최소화됩니다. 서버에 푸시다운할 수 있는 레코드 선택 종류는 다음과 같습니다.
- 인덱싱된 필드 및 인덱싱되지 않은 필드가 있는 선택(인덱싱된 필드는 더 빠른 응답을 제공함)
- AND 및 OR 절이 있는 SQL 쿼리
- 레코드 선택을 위해 수식 계산을 수행하는 SQL 식 필드. SQL Server에서 지원하는 SQL 식 형식에 대해서는 서버에 제공되는 설명서를 참조하십시오.
레코드 선택 푸시다운
이 예제에서는 데이터베이스 서버로 푸시다운할 수 있는 레코드 선택 수식 작성의 장점을 보여 줍니다.
Xtreme 샘플 데이터베이스의 주문 테이블에는 2,192개의 레코드가 있습니다. 이 중 181개는 주문일이 2001년 이전입니다. 이러한 레코드만 사용하여 보고서를 만드는 경우를 가정해 봅니다. 다음 레코드 선택 수식을 사용할 수 있습니다.
Year ({Orders.Order Date}) < 2001
생성된 SQL 쿼리는 2,192개의 레코드를 모두 Crystal Reports로 보낸 다음 레코드 선택 수식을 사용하여 이 레코드를 181개로 줄입니다. 이를 확인하려면 데이터베이스 메뉴에서 SQL 쿼리 표시를 클릭하고 SQL 쿼리에 WHERE 절이 없는지 확인하십시오. 이것은 Crystal Reports가 WHERE 절에서는 Year () 함수를 푸시다운할 수 없기 때문입니다.
또한 다음 레코드 선택 수식도 동일한 보고서를 생성합니다.
{Orders.Order Date} < #Jan 1, 2001#
그러나 이 레코드 선택 수식은 데이터베이스 서버에서 수행될 수 있으므로 푸시다운됩니다. 생성된 SQL 쿼리는 Crystal Reports에 181개의 레코드만 보냅니다. 따라서 Crystal Reports에서 레코드 선택 수식을 평가할 때 다른 레코드를 제거할 필요가 없습니다. 데이터베이스 메뉴에서 SQL 쿼리 표시를 클릭하고 결과로 생성되는 SQL 쿼리에 WHERE 절이 들어 있는지 확인합니다.
이 예제에서 볼 수 있듯이 레코드 선택 수식을 수정하여 보고서 처리 속도를 향상시킬 수 있습니다. 이 경우에 두 수식은 모두 같은 보고서를 생성하지만 두 번째 수식의 경우 데이터베이스 서버가 데이터를 직접 처리할 때 제공할 수 있는 성능 및 최적화를 활용할 수 있습니다.
레코드 선택 성능 팁
레코드 선택 요청을 설정할 때는 성능과 관련된 다음 항목을 고려하십시오.
일반
레코드 선택을 푸시다운하려면 보고서 옵션 대화 상자에서(포함된 Crystal Reports Designer를 마우스 오른쪽 단추로 클릭하고 보고서를 가리킨 다음, 보고서 옵션 선택) 속도를 위해 인덱스 또는 서버 사용을 선택해야 합니다.
레코드 선택 수식에서 매개 변수 필드가 아닌 필드에서는 데이터 형식 변환을 수행하지 마십시오.
예를 들어, ToText( )를 사용하여 숫자 데이터베이스 필드를 문자열 데이터베이스 필드로 변환하지 마십시오.
상수 식을 사용하는 일부 레코드 선택 수식을 푸시다운할 수 있습니다.
SQL 데이터베이스
- 인덱스 필드 또는 비인덱스 필드에 대해 레코드 선택을 푸시다운할 수 있습니다.
- 인덱스 필드를 사용하면 서버 응답 속도가 빨라집니다.
- AND 및 OR 절을 푸시다운할 수 있습니다.
- 일부 형식의 포함 수식을 포함하는 레코드 선택 수식은 푸시다운할 수 있습니다.
- SQL 식 필드를 사용하여 레코드 선택에 필요한 수식 계산을 푸시다운할 수 있습니다.
- 데이터베이스 메뉴에서 SQL 쿼리 표시를 클릭하고 데이터베이스 서버로 보낼 SQL 쿼리를 봅니다.