Condividi tramite


Utilizzo di parametri di query con origini dati specifiche (Reporting Services)

Quando si definisce una query per un set di dati, è necessario scegliere il tipo dell'origine dei dati. Il tipo di origine dati specifica l'estensione per l'elaborazione dati o il provider di dati .NET Framework registrato utilizzato per la connessione all'origine dati. Il provider dei dati corrisponde al livello del software che interagisce con l'origine dei dati e determina il supporto disponibile per l'utilizzo di variabili in una query. In questo argomento viene spiegato in che modo, per un determinato set di risultati, una query cambia a seconda dell'origine dei dati cui è collegata e a seconda che contenga o meno una variabile.

Variabili e provider di dati delle query

Nella tabella seguente sono illustrati i risultati dei dati restituiti dal database di esempio AdventureWorks. Per creare questo set di risultati, è possibile eseguire una query Transact-SQL sul database di esempio AdventureWorks oppure una query MDX sul cubo Adventure Works distribuito come parte dei report di esempio AdventureWorks. Il set di risultati include due colonne, una relativa ai nomi dei modelli di prodotto contenenti la parola "Mountain" e l'altra relativa al numero corrispondente di vendite Internet.

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

Nelle sezioni successive verrà illustrata la query utilizzata per creare questo set di risultati, dapprima da un database relazionale e quindi da un database multidimensionale.

Origini dei dati dei database relazionali

Per un database relazionale come MicrosoftSQL Server, è possibile creare query utilizzando Transact-SQL. Sebbene consenta di ottenere un numero limitato di risultati poiché include una clausola WHERE impostata su un valore specificato a livello di codice, questa query non contiene tuttavia una variabile.

Query 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

Per aggiungere una variabile per il nome di modello del prodotto PM.Name, è necessario specificare un parametro di query nella clausola WHERE. Nella tabella seguente viene illustrato come specificare i parametri di query per provider di dati diversi. Il provider di dati viene selezionato automaticamente quando si sceglie il tipo dell'origine dei dati. La stringa di connessione del provider di dati è indicata nella seconda colonna. La query riportata nella tabella è identica a quella precedente ma include un parametro nel formato supportato dal provider di dati.

Tipo dell'origine dei dati

Provider di dati

Query

MicrosoftSQL Server

MicrosoftSQL Server (SqlClient)

Stringa di connessione:

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

Provider Microsoft OLE DB per SQL Server

Stringa di connessione:

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

Qualsiasi provider di dati .NET Framework registrato

Specifica del provider.

In questi esempi è stata aggiunta una variabile alla clausola WHERE della query, modificando il test della parola "Mountain" in un test relativo al valore della variabile.

  • Il provider dei dati .NET per SQL Server supporta variabili denominate che iniziano con il carattere @, ad esempio PM.Name LIKE '%' + @Mountain + '%').

  • Il provider OLE DB per SQL Server non supporta variabili denominate. Per specificare una variabile, utilizzare il punto interrogativo (?). I parametri devono essere passati al provider OLE DB nell'ordine in cui sono riportati nella clausola WHERE, ad esempio PM.Name LIKE ('%' + ? + '%').

  • Il provider di dati .NET per Oracle supporta parametri numerati che iniziano con i due punti (:), ad esempio PM.Name LIKE '%' + :1 + '%').

  • Il supporto delle variabili con altri provider di dati OLE DB dipende dal provider. Per ulteriori informazioni, vedere la documentazione del provider di dati.

Nella finestra Progettazione query associata a un tipo di origine dei dati viene creato un parametro di query per ogni variabile identificata. L'elenco dei parametri di query è visualizzato nella scheda Parametro delle pagine delle proprietà del set di dati. Per ogni parametro di query viene creato un parametro di report di tipo String. I valori dei parametri di query definiti per il set di dati vengono impostati sul parametro di report corrispondente. È possibile modificare il tipo di dati e altre proprietà dei parametri di report nella finestra di dialogo Proprietà report, accessibile dal menu Report nella visualizzazione Dati. È inoltre possibile creare, modificare o eliminare manualmente i parametri di query. Per ulteriori informazioni, vedere Finestra di dialogo Proprietà set di dati, Parametri.

Origini dei dati dei database multidimensionali

Per un database multidimensionale come Analysis Services, è possibile creare query utilizzando MDX. Sebbene consenta di ottenere un numero limitato di risultati poiché include una clausola Filter impostata su un valore specificato a livello di codice, questa query non contiene tuttavia una variabile.

Query 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

Per aggiungere una variabile per il nome di modello del prodotto @ProductModelName, è necessario aggiungere una clausola FILTER. Nella tabella seguente viene spiegato che per i database multidimensionali le variabili fanno parte di una clausola FILTER. Il tipo di origine dati corrisponde al valore selezionato nell'elenco a discesa quando si crea una nuova origine dati per Reporting Services. Il provider di dati viene selezionato automaticamente quando si sceglie il tipo dell'origine dei dati. Nella seconda colonna è inoltre indicata la stringa di connessione del provider dei dati. La query riportata nella tabella è identica a quella precedente ma include un parametro nel formato supportato dal provider di dati.

Tipo dell'origine dei dati

Provider di dati

Query

MicrosoftSQL ServerAnalysis Services

SQL ServerAnalysis Services (AdomdClient)

Stringa di connessione:

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

Provider MicrosoftOLE DB per Analysis Services 9.0

Stringa di connessione:

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

OLE DB per OLAP non supporta le query con parametri.

Per le soluzioni alternative disponibili, vedere il white paper "Integrating Analysis Services with Reporting Services".

In questi esempi è stata aggiunta una variabile alla clausola WHERE della query, modificando il test della parola Mountain in un test relativo al valore della variabile.

  • MicrosoftSQL ServerAnalysis Services supporta parametri denominati definiti nella sezione Filtro della finestra di progettazione query MDX. Le variabili denominate iniziano con il carattere @, ad esempio @ProductModelName.

  • Il provider Microsoft OLE DB per Analysis Services 9.0 non supporta le query con parametri. Per ulteriori informazioni, cercare l'argomento "Integrazione di Analysis Services con Reporting Services" nel sito MSDN all'indirizzo msdn.microsoft.com (informazioni in lingua inglese).

  • Il supporto delle variabili con altri provider di dati multidimensionali dipende dal provider. Per ulteriori informazioni, vedere la documentazione del provider di dati.

Nella finestra Progettazione query associata a un tipo di origine dei dati viene creato un parametro di query per ogni variabile identificata. Per garantire valori validi per ogni parametro, viene creato automaticamente uno speciale set di dati. L'elenco dei parametri di query è visualizzato nella scheda Parametro delle pagine delle proprietà del set di dati. Per ogni parametro di query viene creato un parametro di report di tipo String. I valori dei parametri di query definiti per il set di dati vengono impostati sul parametro di report corrispondente. È inoltre possibile creare, modificare o eliminare manualmente i parametri del set di dati. Per ulteriori informazioni, vedere Procedura: Definizione dei parametri in Progettazione query MDX per Analysis Services.

I set di dati che garantiscono valori validi per la singola query vengono creati ogni volta che la query viene elaborata.