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.
Vedere anche