Verwenden von Abfrageparametern mit bestimmten Datenquellen (Reporting Services)

Zum Definieren einer Abfrage für ein Dataset wählen Sie den Datenquellentyp aus. Der Datenquellentyp gibt die Datenverarbeitungserweiterung bzw. den registrierten .NET Framework-Datenanbieter an, die zum Verbinden mit der Datenquelle verwendet werden. Beim Datenprovider handelt es sich um eine Softwareschicht, die mit der Datenquelle interagiert und bestimmt, welche Unterstützung für die Verwendung von Variablen in einer Abfrage zur Verfügung steht. In diesem Thema erfahren Sie, wie sich eine Abfrage für ein bestimmtes Resultset je nach verbundener Datenquelle und Vorhandensein von in der Abfrage enthaltenen Variablen ändert.

Abfragevariablen und Datenprovider

In der folgenden Tabelle werden die Ergebnisse für Daten aus der AdventureWorks-Beispieldatenbank aufgeführt. Sie können dieses Resultset erstellen, indem Sie eine Transact-SQL-Abfrage für die AdventureWorks-Beispieldatenbank oder eine MDX-Abfrage für den als Teil des AdventureWorks-Beispielberichts bereitgestellten Adventure Works-Cube ausführen. Das Resultset zeigt zwei Spalten an: die Namen der Produktmodelle, die das Wort "Mountain" enthalten, sowie die zugehörige Anzahl von Internetverkäufen.

Name

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

Im folgenden Abschnitt wird die zum Erstellen dieses Resultsets verwendete Abfrage für eine relationale Datenbank und für eine mehrdimensionale Datenbank vorgestellt.

Relationale Datenbank als Datenquelle

Für eine relationale Datenbank wie MicrosoftSQL Server können Sie Abfragen mit Transact-SQL erstellen. Diese Abfrage schränkt zwar die Ergebnisse durch eine enthaltene WHERE-Klausel mit hartcodiertem Wert ein, enthält jedoch noch keine Variable.

Transact-SQL-Abfrage

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

Um eine Variable für den Produktmodellnamen, PM.Name, hinzuzufügen, müssen Sie in der WHERE-Klausel einen Abfrageparameter angeben. In der nachfolgenden Tabelle wird gezeigt, wie Abfrageparameter für verschiedene Datenprovider angegeben werden. Der Datenprovider wird automatisch für Sie ausgewählt, wenn Sie einen Datenquellentyp auswählen. Die Verbindungszeichenfolge für diesen Datenprovider ist in der zweiten Spalte angegeben. Die Abfrage in der Tabelle ist mit der obigen Abfrage identisch, verfügt jedoch über einen Parameter in der vom Datenprovider unterstützten Form.

Datenquellentyp

Datenprovider

Abfrage

MicrosoftSQL Server

MicrosoftSQL Server (SqlClient)

Verbindungszeichenfolge:

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

MicrosoftOLE DB-Anbieter für SQL Server

Verbindungszeichenfolge:

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

Jeder registrierte .NET Framework-Datenanbieter

Anbieterspezifisch

In diesen Beispielen wurde der WHERE-Klausel in der Abfrage eine Variable hinzugefügt und der Test auf Vorhandensein des Wortes "Mountain" zu einem Test auf Vorhandensein eines entsprechenden Variablenwertes geändert.

  • Der .NET-Datenprovider für SQL Server unterstützt benannte Variablen, die mit dem at-Zeichen (@) beginnen. Beispiel: PM.Name LIKE '%' + @Mountain + '%').

  • Der OLE DB-Anbieter für SQL Server unterstützt keine benannten Variablen. Verwenden Sie zum Angeben einer Variablen das Fragezeichen (?). An den OLE DB-Anbieter übergebene Parameter müssen entsprechend ihrer Reihenfolge in der WHERE-Klausel übergeben werden. Beispiel: PM.Name LIKE ('%' + ? + '%').

  • Der .NET-Datenprovider für Oracle unterstützt nummerierte Parameter, die mit einem Doppelpunkt (:) beginnen. Beispiel: PM.Name LIKE '%' + :1 + '%').

  • Die Unterstützung für Variablen durch andere OLE DB-Datenprovider hängt vom betreffenden Datenprovider ab. Informationen dazu finden Sie in der Dokumentation des Datenproviders.

Der einem Datenquellentyp zugeordnete Abfrage-Designer erstellt zu jeder identifizierten Variablen einen Abfrageparameter. Diese Abfrageparameter sind auf der Registerkarte Parameter der Eigenschaftenseiten des Datasets aufgelistet. Zu jedem Abfrageparameter wird ein Berichtsparameter vom Typ String erstellt. Die für das Dataset definierten Abfrageparameterwerte werden auf den entsprechenden Berichtsparameter festgelegt. Sie können den Datentyp des Berichtsparameters und andere Eigenschaften im Dialogfeld Berichtseigenschaften bearbeiten, das in der Datenansicht über das Menü Bericht erreichbar ist. Sie können diese Abfrageparameter auch manuell erstellen, bearbeiten oder löschen. Weitere Informationen finden Sie unter Dataseteigenschaften (Dialogfeld), Parameter.

Mehrdimensionale Datenbank als Datenquelle

Für eine mehrdimensionale Datenbank wie Analysis Services können Sie Abfragen mit MDX erstellen. Diese Abfrage schränkt zwar die Ergebnisse durch eine enthaltene Filter-Klausel mit hartcodiertem Wert ein, enthält jedoch noch keine Variable.

MDX-Abfrage

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

Um eine Variable für den Produktmodellnamen, @ProductModelName, hinzuzufügen, müssen Sie eine Filter-Klausel hinzufügen. Die folgende Tabelle veranschaulicht, wie für mehrdimensionale Datenbanken Variablen in eine FILTER-Klausel integriert werden. Der Datenquellentyp ist der Wert, den Sie beim Erstellen einer neuen Datenquelle für Reporting Services in der Dropdownliste auswählen. Der Datenprovider wird automatisch für Sie ausgewählt, wenn Sie einen Datenquellentyp auswählen. Die Verbindungszeichenfolge für diesen Datenprovider ist ebenfalls in der zweiten Spalte angegeben. Die Abfrage in der Tabelle ist mit der obigen Abfrage identisch, verfügt jedoch über einen Parameter in der vom Datenprovider unterstützten Form.

Datenquellentyp

Datenprovider

Abfrage

MicrosoftSQL ServerAnalysis Services

SQL ServerAnalysis Services (AdomdClient)

Verbindungszeichenfolge:

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-Anbieter für Analysis Services 9.0

Verbindungszeichenfolge:

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

OLE DB für OLAP unterstützt keine parametrisierten Abfragen.

Problemumgehungen werden in folgendem Whitepaper beschrieben: "Integration von Analysis Services in Reporting Services".

In diesen Beispielen wurde der WHERE-Klausel in der Abfrage eine Variable hinzugefügt und der Test auf Vorhandensein des Wortes Mountain zu einem Test auf Vorhandensein eines entsprechenden Variablenwertes geändert.

  • MicrosoftSQL ServerAnalysis Services unterstützt benannte Parameter, die im Abschnitt Filter des MDX-Abfrage-Designers definiert sind. Benannte Variablen beginnen mit dem at-Zeichen (@). Beispiel: @ProductModelName.

  • Der Microsoft OLE DB-Anbieter für Analysis Services 9.0 unterstützt keine parametrisierten Abfragen. Weitere Informationen erhalten Sie, wenn Sie unter https://msdn.microsoft.com nach "Integrating Analysis Services with Reporting Services" suchen.

  • Die Unterstützung für Variablen durch andere mehrdimensionale Datenprovider hängt vom betreffenden Datenprovider ab. Informationen dazu finden Sie in der Dokumentation des Datenproviders.

Der einem Datenquellentyp zugeordnete Abfrage-Designer erstellt zu jeder identifizierten Variablen einen Abfrageparameter. Es wird automatisch ein spezielles Dataset erstellt, um gültige Werte für alle Parameter bereitzustellen. Diese Abfrageparameter sind auf der Registerkarte Parameter der Eigenschaftenseiten des Datasets aufgelistet. Zu jedem Abfrageparameter wird ein Berichtsparameter vom Typ String erstellt. Die für das Dataset definierten Abfrageparameterwerte werden auf den entsprechenden Berichtsparameter festgelegt. Sie können dieses Dataset auch manuell erstellen, bearbeiten oder löschen. Weitere Informationen finden Sie unter Vorgehensweise: Definieren von Parametern im MDX-Abfrage-Designer für Analysis Services.

Die Datasets zum Bereitstellen von gültigen Werten für jede Abfrage werden bei jeder Verarbeitung der Abfrage erstellt.