Condividi tramite


Utilizzo di parametri a valore singolo e multivalore

I parametri possono essere a valore singolo o multivalore. Un parametro multivalore può essere impostato su più di un valore. Quando si definisce un elenco di valori disponibili per un parametro multivalore, Reporting Services aggiunge automaticamente un'opzione Seleziona tutto all'elenco a discesa della barra degli strumenti del report. È possibile utilizzare questa opzione per selezionare e deselezionare tutti i valori dell'elenco.

Nelle caselle di testo nell'area di progettazione, sia i parametri a valore singolo che quelli multivalore vengono visualizzati come espressioni semplici che iniziano con il simbolo @. Ad esempio, un parametro denominato Store appare come [@Store]. Per ulteriori informazioni, vedere Informazioni sulle espressioni semplici e complesse (Reporting Services).

Per impostare la proprietà multivalore per un parametro, selezionare l'opzione Consenti valori multipli nella finestra di dialogo Proprietà parametri report. È possibile impostare su multivalore qualsiasi tipo di parametro ad eccezione di Boolean.

I parametri multivalore vengono utilizzati principalmente per consentire una clausola di restrizione della query, ad esempio la clausola WHERE di Transact-SQL o del filtro MDX per testare l'inclusione in un set di valori anziché l'uguaglianza a un singolo valore. Per ulteriori informazioni sulla creazione di parametri multivalore, vedere Esercitazione: Aggiunta di parametri a un report e Creazione dei parametri del report e impostazione delle relative proprietà.

Nota sulla protezioneNota sulla protezione

In qualsiasi report che includa un parametro di tipo String accertarsi di utilizzare un elenco di valori disponibili, anche detto elenco di valori validi, e assicurarsi che ogni utente che esegue il report disponga solo delle autorizzazioni necessarie per visualizzare i dati del report. Quando si definisce un parametro di tipo String, viene visualizzata una casella di testo che può accettare qualsiasi valore. Un elenco di valori disponibili consente di limitare i valori che è possibile immettere. Se un parametro di report è correlato a un parametro di query e non si utilizza un elenco di valori disponibili, un utente potrebbe digitare nella casella di testo sintassi SQL, esponendo il report e il server a un potenziale attacco intrusivo nel codice SQL. Se l'utente dispone di autorizzazioni sufficienti per eseguire la nuova istruzione SQL, è possibile che nel server si verifichino risultati non desiderati.

Se un parametro di report non è correlato a un parametro di query e i valori del parametro sono inclusi nel report, un utente potrebbe digitare nel valore del parametro un URL o la sintassi di un'espressione ed eseguire il rendering del report in formato Excel o HTML. Se il report viene quindi visualizzato da un altro utente che fa clic sul contenuto dei parametri di cui è stato eseguito il rendering, potrebbe venire inavvertitamente eseguito il collegamento o lo script dannoso.

Per ridurre il rischio di eseguire inavvertitamente script dannosi, aprire soltanto report sottoposti a rendering provenienti da fonti attendibili. Per ulteriori informazioni sulla protezione di report, vedere Protezione di report e risorse.

Scrittura di query per i parametri di report multivalore

È possibile definire un parametro multivalore per qualsiasi parametro di report creato. Se tuttavia si desidera passare più valori di parametro a un'origine dati tramite la query, è necessario che siano soddisfatti i requisiti seguenti:

  • L'origine dati deve essere SQL Server, Oracle, Analysis Services, SAP BI NetWeaver o Hyperion Essbase.

  • L'origine dei dati non può essere una stored procedure. In Reporting Services non è supportato il passaggio di una matrice di parametri multivalore a una stored procedure.

  • Nella query è necessario utilizzare una clausola IN per specificare il parametro.

Nell'esempio seguente viene illustrato l'utilizzo di una parola chiave IN nella clausola WHERE di un'istruzione Transact-SQL. Per ulteriori informazioni sulla parola chiave IN o sui risultati restituiti da questa query, vedere IN (Transact-SQL).

SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)

Per verificare questo comportamento in un report, definire un set di dati utilizzando questa query. Modificare le proprietà del parametro di report Title creato automaticamente nel modo seguente:

  • Selezionare l'opzione Multivalore.

  • In Valori disponibili selezionare l'opzione Non da query. Lasciare vuota la colonna Etichetta e immettere l'elenco seguente nella colonna Valore: Design Engineer, Buyer, Marketing Assistant.

  • In Valori predefiniti immettere Buyer.

  • Eseguire l'anteprima. Selezionare combinazioni di valori diverse per Title e verificare che i risultati ottenuti siano quelli desiderati.

[!NOTA]

Il server di report riscrive le query per le origini dei dati che non sono in grado di elaborare i parametri come matrice. Per ottenere il risultato desiderato, è necessario riscrivere la query. La riscrittura della query viene attivata quando si definisce un parametro come multivalore e la query utilizza un'istruzione IN per specificare il parametro. Se si crea una query che non include l'istruzione IN, è importante tenere presente che si sta eludendo la logica che il server di report offre per supportare parametri multivalore.

Le espressioni di filtro per set di dati, aree dati e gruppi vengono definite nella scheda Filtro delle finestre di dialogo Proprietà corrispondenti. Se è stata definita un'espressione di filtro che fa riferimento a un parametro multivalore, sarà necessario utilizzare l'operatore IN nell'espressione. Le espressioni di filtro che utilizzano operatori diversi da IN genereranno errori di elaborazione. Per ulteriori informazioni, vedere Procedura: Aggiunta di un filtro (Reporting Services).

Scrittura di espressioni che fanno riferimento a parametri multivalore

Quando in un'espressione si fa riferimento a un parametro, viene utilizzata la raccolta predefinita Parameters. Se si sceglie di includere parametri multivalore nelle espressioni, è necessario sapere come utilizzare sia un singolo valore che l'intera matrice di valori. Nella tabella seguente sono riportati esempi e descrizioni delle proprietà dei parametri impostati per consentire valori multipli.

Esempio

Descrizione

Parameters!<ParameterName>.Value

Matrice di valori di dati di tipo Variant per il parametro.

Parameters!<ParameterName>.Label

Matrice di stringhe che costituiscono le etichette del parametro.

Parameters!<ParameterName>.IsMultiValue

Proprietà booleana che indica se l'opzione Consenti valori multipli del parametro è stata selezionata.

Parameters!<ParameterName>.Count

Numero di valori inclusi nella matrice.

Parameters!<ParameterName>.Value(0)

Primo valore di una matrice multivalore.

Parameters!<ParameterName>.Label(0)

Prima etichetta di una matrice multivalore.

Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1)

Ultimo valore di una matrice multivalore.

Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1)

Ultima etichetta di una matrice multivalore.

=Join(Parameters!<ParameterName>.Value,", ")

Espressione che consente di concatenare in un'unica stringa tutti i valori della matrice di un parametro multivalore di tipo String.

=Split("Value1, Value2, Value3",",")

Accetta una stringa e crea una matrice di oggetti utilizzabili per il passaggio a un sottoreport o a un report drill-through che prevede un parametro multivalore.

È possibile utilizzare le funzioni SPLIT e JOIN per separare o combinare i valori nella matrice di qualsiasi espressione. È possibile utilizzare le funzioni STRING e CINT per convertire i valori in stringhe o valori integer.

Per ulteriori informazioni ed esempi di parametri a valore singolo e multivalore nelle espressioni, vedere Utilizzo di riferimenti alla raccolta Parameters nelle espressioni (Reporting Services).