다음을 통해 공유


특정 데이터 원본에 쿼리 매개 변수 사용(Reporting Services)

데이터 집합용 쿼리를 정의할 때는 데이터 원본 유형을 선택합니다. 데이터 원본 유형은 데이터 원본에 연결하기 위해 사용된 데이터 처리 확장 프로그램 또는 등록된 .NET Framework 데이터 공급자를 지정합니다. 데이터 공급자는 데이터 원본과 상호 작용하고 쿼리의 변수 사용을 위해 어떤 지원이 존재하는지 파악하는 소프트웨어 계층입니다. 이 항목은 특정 결과 집합에서 사용자가 연결된 데이터 원본에 따라 쿼리가 변하는 방식과 해당 쿼리에 변수가 포함되어 있는지 여부를 보여 줍니다.

쿼리 변수 및 데이터 공급자

다음 표에서는 AdventureWorks 예제 데이터베이스의 데이터 결과를 보여 줍니다. 이 결과 집합은 AdventureWorks 예제 데이터베이스에 대해 Transact-SQL 쿼리를 실행하거나 AdventureWorks Sample Reports의 일부로 배포된 Adventure Works 큐브에 대해 MDX 쿼리를 수행하면 얻을 수 있습니다. 결과 집합에는 두 개 열이 표시됩니다. "Mountain"이라는 단어가 포함된 제품 모델 이름과 해당하는 인터넷 판매 개수입니다.

이름

InternetSales

Fender Set - Mountain

2121

HL Mountain Tire

1396

LL Mountain Tire

862

ML Mountain Tire

1161

Mountain Bottle Cage

2025

Mountain Tire Tube

3095

Mountain-100

396

Mountain-200

3552

Mountain-400-W

543

Mountain-500

479

Women's Mountain Shorts

1019

다음 섹션에서는 먼저 관계형 데이터베이스에서, 그리고 다음으로는 다차원 데이터베이스에서 이 결과 집합을 만들기 위해 사용되는 쿼리를 보게 될 것입니다.

관계형 데이터베이스 데이터 원본

MicrosoftSQL Server와 같은 관계형 데이터베이스의 경우 Transact-SQL을 사용하여 쿼리를 만들 수 있습니다. 이 쿼리는 하드 코딩된 값으로 설정된 WHERE 절을 포함하여 결과를 제한하지만 쿼리에 변수가 포함되지는 않습니다.

Transact-SQL 쿼리

SELECT PM.Name, Count(*) as InternetSales

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId = PM.ProductModelID

WHERE (SOH.OnLineOrderFlag = 1 AND PM.Name LIKE ('%Mountain%'))

GROUP BY PM.Name

ORDER BY PM.Name

제품 모델 이름인 PM.Name에 대한 변수를 추가하려면 WHERE 절에 쿼리 매개 변수를 지정해야 합니다. 다음 테이블에서는 데이터 공급자별 쿼리 매개 변수 지정 방법을 보여 줍니다. 데이터 공급자는 데이터 원본 유형을 선택하면 자동으로 선택됩니다. 이 데이터 공급자용 연결 문자열은 두 번째 열에 표시됩니다. 테이블의 쿼리는 위의 쿼리와 동일하지만 데이터 공급자가 지원하는 형식의 매개 변수가 추가되었습니다.

데이터 원본 유형

데이터 공급자

쿼리

MicrosoftSQL Server

MicrosoftSQL Server(SqlClient)

@FSHO8@ 연결 문자열:

Data Source=.;Initial Catalog=AdventureWorks

SELECT PM.Name, Count(*)

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId = PM.ProductModelID

WHERE (SOH.OnLineOrderFlag = 1 AND (PM.Name LIKE '%' + @Mountain + '%'))

GROUP BY PM.Name

ORDER BY PM.Name

OLE DB

Microsoft OLE DB Provider for SQL Server

@FSHO8@ 연결 문자열:

Provider=SQLOLEDB.1;Data Source=.;Initial Catalog=AdventureWorks

SELECT PM.Name, Count(*)

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId =

PM.ProductModelID

WHERE ((SOH.OnLineOrderFlag = 1) AND PM.Name LIKE

('%' + ? + '%'))

GROUP BY PM.Name

ORDER BY PM.Name

Oracle

MicrosoftSQL Server(OracleClient)

SELECT PM.Name, Count(*)

FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD

ON SOH.SalesOrderID = SOD.SalesOrderID INNER JOIN

Production.Product PP

ON SOD.ProductID = PP.ProductID INNER JOIN

Production.ProductModel PM ON PP.ProductModelId =

PM.ProductModelID

WHERE ((SOH.OnLineOrderFlag = 1) AND

PM.Name LIKE '%' + :1 + '%')

GROUP BY PM.Name

ORDER BY PM.Name

OLE DB

등록된 모든 .NET Framework 데이터 공급자

공급자별로 다릅니다.

이 예제에서는 쿼리의 WHERE 절에 변수가 추가되어 "Mountain"이라는 단어에 대한 테스트를 변수 값에 대한 테스트로 바꾸었습니다.

  • SQL Server용 .NET 데이터 공급자는 @ 문자로 시작되는 명명된 변수를 지원합니다. 예를 들어 PM.Name LIKE '%' + @Mountain + '%')와 같습니다.

  • SQL Server용 OLE DB 공급자는 명명된 변수를 지원하지 않습니다. 변수를 지정하려면 물음표(?) 문자를 사용하십시오. OLE DB 공급자에 전달된 매개 변수는 WHERE 절에서 발생되는 순서로 전달되어야 합니다. 예를 들어 PM.Name LIKE ('%' + ? + '%')와 같습니다.

  • Oracle용 .NET 데이터 공급자는 콜론(:) 문자로 시작되는 숫자 매개 변수를 지원합니다. 예를 들어 PM.Name LIKE '%' + :1 + '%')와 같습니다.

  • 다른 OLE DB 데이터 공급자에 의한 변수 지원은 데이터 공급자별로 다릅니다. 자세한 내용은 데이터 공급자의 설명서를 확인하십시오.

데이터 원본 유형에 관련된 쿼리 디자이너는 식별된 각 변수에 대한 쿼리 매개 변수를 만듭니다. 이 쿼리 매개 변수는 데이터 집합 속성 페이지의 매개 변수 탭에 나열됩니다. 각 쿼리 매개 변수에 대해 문자열 유형의 보고서 매개 변수가 생성됩니다. 데이터 집합에 대해 정의된 쿼리 매개 변수 값은 해당되는 보고서 매개 변수로 설정됩니다. 보고서 매개 변수 데이터 형식 및 기타 속성은 데이터 뷰의 보고서 메뉴에서 액세스할 수 있는 보고서 속성 대화 상자에서 편집할 수 있습니다. 또한 이 쿼리 매개 변수는 수동으로 만들거나 편집하거나 삭제할 수 있습니다. 자세한 내용은 데이터 집합 속성 대화 상자, 매개 변수을 참조하십시오.

다차원 데이터베이스 데이터 원본

MicrosoftSQL Server와 같은 다차원 데이터베이스의 경우에는 MDX를 사용하여 쿼리를 만들 수 있습니다. 이 쿼리는 하드 코딩된 값으로 설정된 FILTER 절을 포함하여 결과를 제한하지만 쿼리에 변수가 포함되지는 않습니다.

MDX 쿼리

SELECT NON EMPTY

{ [Measures].[Internet Order Count] } ON COLUMNS,

NON EMPTY {

([Product].[Model Name].[Model Name].ALLMEMBERS ) }

DIMENSION PROPERTIES

MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

FROM (

SELECT (

Filter(

[Product].[Model Name].[Model Name].ALLMEMBERS,

Instr([Product].[Model Name].currentmember.Properties(

'Member_Caption' ),

'Mountain' ) > 0 )

) ON COLUMNS

FROM [Adventure Works])

CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR,

FORMATTED_VALUE, FORMAT_STRING,

FONT_NAME, FONT_SIZE, FONT_FLAGS

제품 모델 이름인 @ProductModelName에 대한 변수를 추가하려면 FILTER 절을 추가해야 합니다. 다음 테이블에서는 다차원 데이터베이스의 경우 변수가 FILTER 절의 일부임을 보여 줍니다. 데이터 원본 유형은 Reporting Services용으로 새 데이터 원본을 만들 때 드롭다운 목록에서 선택하는 값입니다. 데이터 공급자는 사용자가 데이터 원본 유형을 선택할 때 자동으로 선택됩니다. 이 데이터 공급자에 대한 연결 문자열도 역시 두 번째 열에 표시됩니다. 테이블의 쿼리는 위의 쿼리와 동일하지만 데이터 공급자가 지원하는 형식의 매개 변수가 추가되었습니다.

데이터 원본 유형

데이터 공급자

쿼리

MicrosoftSQL ServerAnalysis Services

SQL ServerAnalysis Services(AdomdClient)

@FSHO8@ 연결 문자열:

Data Source=.;Initial Catalog="Adventure Works DW"

SELECT NON EMPTY { [Measures].[Internet Order Count] } ON COLUMNS,

NON EMPTY { ([Product].[Model Name].[Model Name].ALLMEMBERS ) }

DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

FROM ( SELECT (

Filter( [Product].[Model Name].[Model Name].ALLMEMBERS,

Instr( [Product].[Model Name].currentmember.Properties(

'Member_Caption' ), @ProductModelName ) > 0 ) )

ON COLUMNS

FROM [Adventure Works])

CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR,

FORMATTED_VALUE, FORMAT_STRING,

FONT_NAME, FONT_SIZE, FONT_FLAGS

OLE DB

Microsoft OLE DB Provider for Analysis Services 9.0

@FSHO8@ 연결 문자열:

Provider=MSOLAP.3;Data Source=.;Initial Catalog="Adventure Works DW"

OLAP용 OLE DB는 매개 변수가 있는 쿼리를 지원하지 않습니다.

해결 방법은 "Reporting Services와 Analysis Services 통합(Integrating Analysis Services with Reporting Services)" 백서를 참조하십시오.

이 예제에서는 쿼리의 WHERE 절에 변수가 추가되어 "Mountain"이라는 단어에 대한 테스트를 변수 값에 대한 테스트로 바꾸었습니다.

  • MicrosoftSQL ServerAnalysis Services는 MDX 쿼리 디자이너의 필터 섹션에 정의되어 있는 명명된 매개 변수를 지원합니다. 명명된 변수는 @ 문자로 시작됩니다. 예를 들어 @ProductModelName과 같습니다.

  • Microsoft OLE DB Provider for Analysis Services 9.0은 매개 변수가 있는 쿼리를 지원하지 않습니다. 자세한 내용을 보려면 msdn.microsoft.com에서 "Reporting Services와 Analysis Services 통합(Integrating Analysis Services with Reporting Services)"을 검색하십시오.

  • 다른 다차원 데이터 공급자에 의한 변수 지원은 데이터 공급자별로 다릅니다. 자세한 내용은 데이터 공급자의 설명서를 확인하십시오.

데이터 원본 유형에 관련된 쿼리 디자이너는 식별된 각 변수용 쿼리 매개 변수를 만듭니다. 특수 데이터 집합이 자동 생성되어 각 매개 변수에 대한 유효한 값을 제공합니다. 이 쿼리 매개 변수는 데이터 집합 속성 페이지의 매개 변수 탭에 나열됩니다. 각 쿼리 매개 변수에 대해 문자열 유형의 보고서 매개 변수가 생성됩니다. 데이터 집합에 대해 정의된 쿼리 매개 변수 값은 해당되는 보고서 매개 변수로 설정됩니다. 또한 이 쿼리 매개 변수는 수동으로 만들거나 편집하거나 삭제할 수 있습니다. 자세한 내용은 방법: Analysis Services용 MDX 쿼리 디자이너에서 매개 변수 정의를 참조하십시오.

쿼리별로 유효한 값을 제공하기 위한 데이터 집합이 쿼리를 처리할 때마다 생성됩니다.