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.
Siehe auch