Utilisation de paramètres de requête avec des sources de données spécifiques (Reporting Services)

Lorsque vous définissez une requête pour un dataset, vous choisissez le type de source de données. Le type de sources de données spécifie l'extension pour le traitement des données ou le fournisseur de données .NET Framework inscrit permettant d'établir une connexion à la source de données. Le fournisseur de données est la couche logicielle qui interagit avec la source de données et détermine le type de prise en charge des variables dans une requête. Cette rubrique explique comment, pour un jeu de résultats donné, une requête change en fonction de la source de données à laquelle vous êtes connecté, et elle indique si une variable est présente dans la requête.

Variables de requête et fournisseurs de données

Le tableau suivant présente les résultats de données issues de l'exemple de base de données AdventureWorks. Vous pouvez créer ce jeu de résultats en exécutant une requête Transact-SQL sur l'exemple de base de données AdventureWorks ou une requête MDX sur le cube Adventure Works déployé dans les exemples de rapports AdventureWorks. Le jeu de résultats présente deux colonnes : le nom des modèles de produit contenant le mot « Mountain » et le nombre correspondant de ventes par Internet.

Nom

Ventes par Internet

Fender Set - Mountain

2121

HL Mountain Tire

1396

LL Mountain Tire

862

ML Mountain Tire

1161

Mountain Bottle Cage (Porte-bouteille Mountain)

2025

Mountain Tire Tube (Chambre à air VTT)

3095

Mountain-100

396

Mountain-200

3552

Mountain-400-W

543

Mountain-500

479

Women's Mountain Shorts (Shorts féminins Mountain)

1019

Dans les sections suivantes, vous découvrirez la requête utilisée pour créer ce jeu de résultats, tout d'abord à partir d'une base de données relationnelle, puis à partir d'une base de données multidimensionnelle.

Sources de données d'une base de données relationnelle

Pour une base de données relationnelle telle que MicrosoftSQL Server, vous pouvez créer des requêtes à l'aide de Transact-SQL. Bien que cette requête limite les résultats en incluant une clause WHERE qui est définie à une valeur codée en dur, la requête ne contient pas encore de variable.

Requête 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

Pour ajouter une variable pour le nom du modèle de produit, PM.Name, vous devez spécifier un paramètre de requête dans la clause WHERE. Le tableau suivant indique comment spécifier des paramètres de requête pour différents fournisseurs de données. Le fournisseur de données est automatiquement sélectionné pour vous lorsque vous choisissez le type de source de données. La chaîne de connexion de ce fournisseur de données est indiquée dans la deuxième colonne. La requête dans le tableau est identique à la requête ci-dessus, mais elle intègre un paramètre au format pris en charge par le fournisseur de données.

Type de source de données

Fournisseur de données

Requête

MicrosoftSQL Server

MicrosoftSQL Server (SqlClient)

Chaîne de connexion :

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

Fournisseur Microsoft OLE DB pour SQL Server

Chaîne de connexion :

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

Tout fournisseur de données .NET Framework inscrit

Spécifique au fournisseur.

Dans ces exemples, une variable a été ajoutée à la clause WHERE de la requête ; par conséquent, le test du mot « Mountain » a été remplacé par un test de la valeur de la variable.

  • Le fournisseur de données .NET pour SQL Server gère les variables nommées qui commencent par le signe @. Par exemple, PM.Name LIKE '%' + @Mountain + '%').

  • Le fournisseur de données OLE DB pour SQL Server ne gère pas les variables nommées. Utilisez le point d'interrogation (?) pour spécifier une variable. Les paramètres transmis au fournisseur OLE DB doivent être transmis selon leur ordre d'apparition dans la clause WHERE. Par exemple, PM.Name LIKE ('%' + ? + '%').

  • Le fournisseur de données .NET pour Oracle gère les paramètres numérotés qui commencent par le signe deux-points (:). Par exemple, PM.Name LIKE '%' + :1 + '%').

  • La prise en charge de variables par d'autres fournisseurs de données OLE DB est spécifique au fournisseur de données. Consultez la documentation du fournisseur de données pour obtenir plus d'informations.

Le concepteur de requêtes associé à un type de source de données crée un paramètre de requête pour chaque variable identifiée. Ces paramètres de requête sont répertoriés sous l'onglet Paramètre des pages de propriétés Dataset. Pour chaque paramètre de requête, un paramètre de rapport de type Chaîne est créé. Les valeurs des paramètres de requête stipulées pour le dataset sont définies au paramètre de rapport correspondant. Vous pouvez modifier le type de données des paramètres de rapport et d'autres propriétés dans la boîte de dialogue Propriétés du rapport, que vous pouvez ouvrir à partir du menu Rapport en mode Données. Vous pouvez également créer, modifier ou supprimer ces paramètres de requête manuellement. Pour plus d'informations, consultez Boîte de dialogue Propriétés du dataset, Paramètres.

Sources de données d'une base de données multidimensionnelle

Pour une base de données multidimensionnelle telle que Analysis Services, vous pouvez créer des requêtes à l'aide de MDX. Bien que cette requête limite les résultats en incluant une clause Filtre définie à une valeur codée en dur, la requête ne contient pas encore de variable.

Requête 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

Pour ajouter une variable pour le nom du modèle de produit, @ProductModelName, vous devez ajouter une clause FILTER. Le tableau suivant indique que, pour les bases de données multidimensionnelles, les variables font partie d'une clause FILTER. Le type de source de données est la valeur que vous choisissez dans la liste déroulante lorsque vous créez une source de données pour Reporting Services. Le fournisseur de données est automatiquement sélectionné pour vous lorsque vous choisissez le type de source de données. La chaîne de connexion de ce fournisseur de données est également indiquée dans la deuxième colonne. La requête dans le tableau est identique à la requête ci-dessus, mais elle intègre un paramètre au format pris en charge par le fournisseur de données.

Type de source de données

Fournisseur de données

Requête

MicrosoftSQL ServerAnalysis Services

SQL ServerAnalysis Services (AdomdClient)

Chaîne de connexion :

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

Fournisseur Microsoft OLE DB pour Analysis Services 9.0

Chaîne de connexion :

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

OLE DB pour OLAP ne gère pas les requêtes paramétrées.

Des solutions de contournement sont décrites dans le Livre blanc intitulé « Integrating Analysis Services with Reporting Services » (Intégration d'Analysis Services à Reporting Services).

Dans ces exemples, une variable a été ajoutée à la clause WHERE de la requête ; par conséquent, le test du mot « Mountain » a été remplacé par un test de la valeur de la variable.

  • MicrosoftSQL ServerAnalysis Services prend en charge les paramètres nommés définis dans la section Filtre du concepteur de requêtes MDX. Les variables nommées commencent par le signe @. Par exemple, @ProductModelName.

  • Le fournisseur Microsoft OLE DB pour Analysis Services 9.0 ne prend pas en charge les requêtes paramétrées. Pour plus d'informations, effectuez une recherche de « Intégration d'Analysis Services à Reporting Services » sur msdn.microsoft.com.

  • La prise en charge de variables par d'autres fournisseurs de données multidimensionnelles est spécifique au fournisseur de données. Consultez la documentation du fournisseur de données pour obtenir plus d'informations.

Le concepteur de requêtes associé à un type de source de données crée un paramètre de requête pour chaque variable identifiée. Un dataset particulier est créé automatiquement pour fournir des valeurs valides pour chaque paramètre. Ces paramètres de requête sont répertoriés sous l'onglet Paramètre des pages de propriétés Dataset. Pour chaque paramètre de requête, un paramètre de rapport de type Chaîne est créé. Les valeurs des paramètres de requête stipulées pour le dataset sont définies au paramètre de rapport correspondant. Vous pouvez également créer, modifier ou supprimer ces paramètres de dataset manuellement. Pour plus d'informations, consultez Procédure : définir des paramètres dans le Concepteur de requêtes MDX pour Analysis Services.

Les datasets permettant de fournir des valeurs valides pour toutes les requêtes sont créés chaque fois que la requête est traitée.