다음을 통해 공유


필터를 사용하여 보고서 성능 개선

큰 데이터 집합을 반환하는 보고서는 사용하기 어렵고 성능 문제가 발생할 수 있습니다. 보고서에 표시되는 데이터를 제한하려면 데이터 필터를 사용합니다.

Reporting Services에서 지원되는 데이터 필터링 외에도 Microsoft Dynamics 365 Customer Engagement (on-premises)은 데이터 사전 필터링을 지원합니다. 다음과 같은 경우 데이터 사전 필터링을 사용할 수 있습니다.

  • 보고서의 범위를 축소하여 보고서를 상황에 맞도록 관련 많은 데이터를 반환합니다.

  • 관련 많은 데이터만 반환되므로 빠르게 결과 집합을 검색하고 표시합니다.

  • 상세하게 찾기 기능을 사용하여 보고서를 필터링할 수 있습니다.

중요

현재 Under 연산자 같은 계층적 연산자를 사용한 보고서 쿼리는 보고서 필터링에 사용할 수 없습니다. 계층적 연산자를 사용하는 보고서를 실행하려고 하면 보고서가 렌더링되지 않습니다.

Fetch 기반 보고서에서 데이터 사전 필터링 설정

Fetch 기반 보고서는 자동 데이터 사전 필터링만 지원합니다. 보고서에는 데이터 집합과 FetchXML 쿼리를 여러 개 사용할 수 있습니다. 하나의 데이터 집합은 하나의 FetchXML 쿼리를 지원합니다. Fetch 기반 보고서의 기본 엔터티 또는 연결된 엔터티에 대해 사전 필터링을 설정하려면 enableprefiltering 매개 변수 값을 "1"로 설정하고 prefilterparametername 속성의 매개 변수 이름을 지정해야 합니다. 매개 변수 이름은 숨겨진 매개 변수로 지정하는 “CRM_”으로 시작해야 합니다. SQL Server 기반 보고서와 함께 FetchXML 쿼리에 지정된 이 매개 변수는 FetchXML 쿼리 내에서 하위 쿼리로 작동하고, 보고서를 실행하는 동안 하위 쿼리는 상세하게 찾기 영역에서 사용자가 지정한 값으로 구성됩니다.

다음 예제는 FetchXML 쿼리의 기본 엔터티에 대해 사전 필터링을 설정하는 방법을 표시합니다.

<CommandText  
 <fetch distinct="false" mapping="logical">  
   <entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">  
      <attribute name="name" />  
      <attribute name="accountid" />  
   </entity>  
 </fetch>  
</CommandText>  
<DataSourceName>CRM</DataSourceName>  
  1. 마찬가지로 연결된 엔터티에 대해 사전 필터링을 사용할 수 있습니다. prefilterparametername 속성의 매개 변수 이름에 고유한 다른 이름을 지정하여 FetchXML 쿼리의 연결된 엔터티에 대해 다른 사전 필터링 조건을 지정할 수도 있습니다.

    보고서 마법사 또는 SQL Server Data Tools를 사용하지 않고 Fetch 기반 보고서 정의를 수동으로 수정하면 기본 엔터티 및 연결된 엔터티에 대해 사전 필터링을 설정할 수 있습니다. 다음을 확인하십시오.

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. prefilterparametername 속성에 지정된 것과 같은 이름으로 해당 쿼리 매개 변수를 만듭니다. 매개 변수 이름은 숨겨진 매개 변수로 지정하도록 CRM_으로 시작해야 합니다.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. 이름이 같은 해당 보고서 매개 변수를 만듭니다.

    <ReportParameters>  
    <ReportParameter Name="CRM_FilteredAccount">  
    <DataType>String</DataType>  
    <Prompt>CRM Filtered Account</Prompt>        
    </ReportParameter>  
    </ReportParameters>    
    

SQL 기반 보고서에서 데이터 사전 필터링 활성화(Dynamics 365 on-premises 전용)

Microsoft Dynamics 365 SQL 기반 보고서에서 데이터 사전 필터링을 활성화할 수 있는 방법은 다음 두 가지가 있습니다: 자동 및 명시적.

자동 사전 필터링

자동 데이터 사전 필터링은 간단한 쿼리에 적합합니다. 보고서에서 자동 데이터 사전 필터링을 활성화하려면 쿼리의 엔터티 테이블에 대한 별칭을 사용할 수 있습니다. CRMAF_로 시작하는 별칭 이름을 사용하여 이 작업을 수행합니다.

예를 들어, 다음 예제에서는 두 개의 간단한 쿼리를 보여주며 그 중 하나는 거래처 엔터티에서 사전 필터링을 활성화하도록 수정되었습니다.

사전 필터링 없이 쿼리합니다.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount; 

CRMAF_ 접두사를 사용하여 자동 데이터 사전 필터링 기능을 활성화하면 다음 예와 같이 Microsoft Dynamics 365가 쿼리가 Dynamics 365에 업로드될 때 매개 변수(예: P1)를 포함하도록 수정합니다.

자동 사전 필터링으로 쿼리합니다.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount;

Dynamics 365는 보고서가 필터링되는 방식에 따라 쿼리를 P1 매개 변수로 전달합니다. 즉, 자동 데이터 사전 필터링은 기존 쿼리 내에서 하위 쿼리로 작동합니다.

다음 예제에서는 Dynamics 365가 다양한 필터링 요구 사항에 따라 매개 변수(P1)에 쿼리를 전달하는 방법을 보여줍니다. 이 예에서는 Dynamics 365의 보고서 영역에서 보고서를 실행하고 있으며 데이터 필터링 옵션을 사용하고 있다고 가정합니다.

예 1

활성 거래처만 보려면 결과 쿼리는 다음과 같습니다.

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount

예제 2

특정 거래처에 속해 있고 보고서를 실행하는 경우 결과 쿼리는 다음과 같습니다.

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount

예 3

세 개의 선택된 거래처 목록이 있고 선택한 레코드에 대해 보고서를 실행하는 옵션을 선택하면 결과 쿼리는 다음과 같습니다.

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>') 
AS CRMAF_FilteredAccount

엔터티 테이블 이름에 별칭이 지정되면 고급 찾기 사용자 인터페이스가 Dynamics 365에서 실행될 때 배포된 보고서에 자동으로 포함됩니다.

쿼리 작성기에서 엔터티 테이블 이름의 별칭을 지정하려면 보고서의 각 테이블을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 CRMAF_FilteredEntity 형식으로 별칭 값을 입력합니다(예: CRMAF_FilteredAccount).

자동 사전 필터링의 한계

자동 사전 필터링을 활성화하기 위해 CRMAF_ 접두사를 사용하면 Dynamics 365가 쿼리에 매개 변수를 추가합니다. UNION 문을 사용하는 쿼리와 같이 더 복잡한 쿼리의 경우 Dynamics 365가 첫 번째 쿼리에만 매개 변수를 추가할 수 있기 때문에 예기치 않은 결과가 발생할 수 있습니다.

예를 들어 UNION 문을 포함하는 다음 쿼리를 고려하십시오.

SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = ‘FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

보고서를 업로드할 때 Dynamics 365는 매개 변수를 사용하여 첫 번째 쿼리만 필터링할 수 있습니다. 이로 인해 필터링이 두 번째 쿼리에 적용되지 않습니다.

SELECT <column1>, <column2>, <columnN>
FROM  (@P1) AS CRMAF_FilteredAccount WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

앞의 예에서 Dynamics 365의 보고서 영역에서 보고서를 실행하고 필터를 1,000,000보다 큰 연간 수익으로 선택하는 동안 Dynamics 365는 다음과 같이 P1 매개 변수에 쿼리를 전달합니다.

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* from FilteredAccount where AnnualRevenue > 1000000) AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

이는 쿼리가 $1,000,000보다 큰 연간 수익을 가진 플로리다의 거래처와 의도한 것과 다른 캘리포니아의 모든 거래처만 반환한다는 것을 의미합니다. 연간 수익이 $1,000,000보다 큰 플로리다와 캘리포니아의 모든 거래처를 보고 싶었습니다.

Dynamics 365에서 보고서를 다운로드하고 Microsoft Visual Studio에서 열면 Dynamics 365에 업로드한 보고서의 원본 버전이 표시됩니다. Microsoft SQL Server 보고 서비스에서 보고서를 직접 다운로드하면 Dynamics 365가 쿼리를 수정했지만 원하는 위치에 매개 변수를 배치하지 않았음을 알 수 있습니다.

이와 같은 복잡한 쿼리의 경우 명시적 사전 필터링을 사용해야 합니다.

명시적 사전 필터링

UNION 문을 사용하는 쿼리와 같은 복잡한 쿼리의 경우 명시적 사전 필터링을 사용해야 할 수 있습니다. 자동 사전 필터링과 달리 Dynamics 365는 이러한 보고서가 Dynamics 365에 업로드될 때 명시적 사전 필터링 중에 매개 변수에 값을 전달하여 보고서 쿼리를 다시 작성하지 않습니다. 사전 필터링 매개 변수를 보고서에 추가한 다음 쿼리에서 매개 변수를 참조하여 보고서에 필요한 변경을 명시적으로 수행해야 합니다. 그런 다음 동적 SQL을 사용하여 쿼리를 실행할 수 있습니다.

동적 SQL을 사용하는 경우 고급 찾기를 통한 필터링은 CRM_FilteredEntity이라는 숨겨진 매개 변수(예: CRM_FilteredAccount)를 생성하고 동적 SQL 쿼리 표현식에서 이 매개 변수를 사용하여 활성화됩니다. 이 매개 변수는 지정된 필터링된 보기에서 얻은 테이블 데이터에 대한 필터링을 활성화합니다.

자동 사전 필터링의 한계를 강조하기 위해 앞에서 설명한 것과 동일한 예를 사용하여 다음 표는 동적 SQL을 사용하여 명시적 사전 필터링을 사용하도록 수정된 자동 사전 필터링이 있는 쿼리를 보여줍니다. 또한 Dynamics 365의 보고서 영역에서 보고서를 실행하는 동안 필터가 1,000,000보다 큰 연간 수익으로 적용되었다고 가정합니다.

자동 사전 필터링으로 쿼리합니다.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount
   WHERE address1_stateorprovince = ‘FL'
   UNION
   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount
   WHERE address1_stateorprovince = 'CA'

노트

대부분의 표준 Dynamics 365 SQL 기반 보고서는 명시적 사전 필터링 옵션을 사용합니다.

필터 요약에서 필터 전달

필터 요약은 보고서를 실행할 때 사용되는 필터 값을 표시합니다. 보고서에서 필터 텍스트 값이 포함된 보고서 머리글의 텍스트 상자 보고서 항목으로 표시됩니다. 사용자가 보고서를 실행하면 보고서 뷰어에는 필터 편집 단추가 표시됩니다. 단추를 클릭하면 사용자가 데이터 필터를 정의할 수 있습니다. 필터 요약의 예제는 Customer Engagement (on-premises)에 포함되어 있는 사용자 요약 보고서에서 찾을 수 있습니다.

필터 요약을 보고서에 추가하려면 다음 단계를 수행하십시오.

  1. CRM_FilterText라는 숨겨진 문자열 매개 변수를 만듭니다.

  2. 텍스트 상자 보고서 항목을 보고서에 추가하고 Value 속성을 다음과 같이 설정합니다.
    =Parameters!CRM_FilterText.Value.

    보고서가 실행되면 CRM_FilterText 매개 변수의 값은 시스템에서 현재 필터의 텍스트로 설정됩니다.

기본 필터

보고서를 게시할 때 기본 필터를 설정할 수 있습니다. 보고서 마법사를 사용하여 만든 모든 보고서의 경우 기본 필터를 설정하지 않으면 마지막 30일 동안 수정된 모든 레코드에 대해 필터가 자동으로 설정됩니다. 기본 보고서 필터를 정의하는 절차는 보고서 게시를 참조하십시오.

참고 항목:

보고 및 분석 가이드
Dynamics 365 for Customer Engagement (on-premises) 보고 고려 사항