Esempi di espressione (Generatore report 2.0)
Le espressioni vengono utilizzate di frequente nei report per controllare il contenuto e l'aspetto del report. Vengono scritte in Microsoft Visual Basic e possono includere funzioni predefinite, codice personalizzato, variabili globali e variabili definite dall'utente. Per ulteriori informazioni sull'editor di espressioni e sui tipi di riferimenti che è possibile includere, vedere Utilizzo delle espressioni (Generatore report 2.0) e Procedura: Aggiunta di un'espressione (Generatore report 2.0).
In questo argomento vengono forniti alcuni esempi di espressioni che è possibile utilizzare per attività comuni in un report.
Funzioni di Visual Basic Esempi di funzioni di Visual Basic di tipo data, stringa, conversione e condizionale.
Funzioni di report Esempi relativi a funzioni di aggregazione e altre funzioni di report predefinite.
Aspetto dei dati del report Esempi relativi alla modifica dell'aspetto di un report.
Proprietà Esempi relativi all'impostazione delle proprietà degli elementi del report per il controllo del formato o della visibilità.
Parametri Esempi relativi all'utilizzo di parametri in un'espressione.
Codice personalizzato Esempi di codice personalizzato incorporato.
Funzioni
Molte espressioni incluse in un report contengono funzioni. Con queste funzioni è possibile formattare dati, applicare logica e accedere ai metadati del report. È possibile scrivere espressioni che utilizzano funzioni della libreria run-time di MicrosoftVisual Basic e degli spazi dei nomi System..::..Convert e System..::..Math. È possibile aggiungere riferimenti a funzioni da altri assembly o da codice personalizzato. È inoltre possibile utilizzare le classi di Microsoft.NET Framework, tra cui System.Text.RegularExpressions. Per ulteriori informazioni sulle funzioni di Visual Basic, vedere la sezione relativa ai membri della libreria run-time di Visual Basic sul sito Web msdn.microsoft.com.
Funzioni di Visual Basic
È possibile utilizzare le funzioni di Visual Basic per modificare i dati visualizzati nelle caselle di testo o utilizzati per parametri, proprietà o altre aree del report. In questa sezione vengono forniti esempi che illustrano alcune di queste funzioni. Per ulteriori informazioni sulle funzioni di Visual Basic, vedere la documentazione relativa a Visual Basic.
Funzioni di data
La funzione Today fornisce la data corrente. Questa espressione può essere utilizzata in una casella di testo per visualizzare la data nel report oppure in un parametro per filtrare i dati in base alla data corrente.
=Today()
La funzione DateAdd è utile per fornire un intervallo di date in base a un solo parametro. L'espressione seguente restituisce una data successiva di sei mesi alla data di un parametro denominato StartDate.
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
La funzione Year visualizza l'anno per una determinata data. È possibile utilizzare questa espressione per raggruppare date oppure per visualizzare l'anno come etichetta di un set di date. Questa espressione restituisce l'anno per un gruppo specifico di date di ordini di vendita. Per modificare le date è possibile utilizzare anche la funzione Month e altre funzioni. Per ulteriori informazioni, vedere la documentazione di Visual Basic.
=Year(Fields!OrderDate.Value)
Funzioni per i valori stringa
È possibile combinare più campi utilizzando operatori di concatenazione e costanti di Visual Basic. L'espressione seguente restituisce due campi, ognuno su una riga distinta nella stessa casella di testo:
=Fields!FirstName.Value & vbCrLf & Fields!LastName.Value
È possibile formattare date e numeri in una stringa tramite la funzione Format. L'espressione seguente visualizza il valore dei parametri StartDate e EndDate nel formato di data estesa:
=Format(Parameters!StartDate.Value, "D") & " through " & Format(Parameters!EndDate.Value, "D")
Se la casella di testo contiene solo una data o un numero, per applicare la formattazione è consigliabile utilizzare la proprietà Format della casella di testo, anziché la funzione Format nella casella di testo.
Le funzioni Right, Len e InStr sono utili per ottenere sottostringhe, ad esempio per ottenere il solo nome utente dalla stringa DOMINIO\nomeutente. L'espressione seguente restituisce la parte della stringa a destra del carattere barra rovesciata (\) da un parametro denominato User:
=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
L'espressione seguente restituisce lo stesso valore dell'espressione precedente, ma utilizzando membri della classe System..::..String di .NET Framework anziché funzioni di Visual Basic:
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
È possibile visualizzare i valori selezionati di un parametro multivalore. Nell'esempio seguente viene utilizzata la funzione Join per concatenare i valori selezionati del parametro MySelection in un'unica stringa che può essere impostata come espressione per il valore di una casella di testo in un elemento del report.
= Join(Parameters!MySelection.Value)
Le funzioni Regex della classe RegularExpressions di .NET Framework sono utili per modificare il formato di stringhe esistenti, ad esempio per formattare un numero di telefono. Nell'espressione seguente viene utilizzata la funzione Replace per modificare il formato di un numero di telefono a dieci cifre da "nnn-nnn-nnnn" a "(nnn) nnn-nnnn":
=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
Funzioni di conversione
È possibile utilizzare le funzioni di Visual Basic per convertire un campo da un tipo di dati a un altro. Le funzioni di conversione possono essere utilizzate per convertire il tipo di dati predefinito di un campo nel tipo di dati necessario per i calcoli oppure per combinare testo.
L'espressione seguente converte la costante 500 nel tipo decimale, in modo da confrontarla con un tipo di dati money di Transact-SQL nel campo Valore per un'espressione di filtro.
=CDec(500)
L'espressione seguente visualizza il numero di valori selezionati per il parametro multivalore MySelection.
=CStr(Parameters!MySelection.Count)
Funzioni condizionali
La funzione Iif restituisce uno di due valori a seconda che l'espressione sia True o False. Nell'espressione seguente viene utilizzata la funzione Iif per restituire un valore booleano True se il valore LineTotal è maggiore di 100. In caso contrario, viene restituito False:
=IIF(Fields!LineTotal.Value > 100, True, False)
È possibile utilizzare più funzioni IIF, note anche come funzioni IIF nidificate, per restituire uno di tre valori possibili a seconda del valore di PctComplete. L'espressione seguente può essere inserita nel colore di riempimento di una casella di testo per modificare il colore di sfondo in base al valore della casella di testo.
=IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))
I valori maggiori o uguali a 10 vengono visualizzati con uno sfondo verde, quelli compresi tra 1 e 9 con uno sfondo blu e quelli minori di 1 con uno sfondo rosso.
Per ottenere la stessa funzionalità, è anche possibile utilizzare la funzione Switch. La funzione Switch risulta utile quando è necessario testare tre o più condizioni. La funzione Switch restituisce il valore associato alla prima espressione in una serie che restituisce True:
=Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red",)
I valori maggiori o uguali a 10 vengono visualizzati con uno sfondo verde, quelli compresi tra 1 e 9 con uno sfondo blu, quelli uguali a 1 con uno sfondo giallo e quelli minori o uguali a 0 con uno sfondo rosso.
Viene verificato il valore del campo ImportantDate e viene restituito "Red" se è antecedente a una settimana e "Blue" in caso contrario. Questa espressione può essere utilizzata per controllare la proprietà Color di una casella di testo in un elemento del report:
=IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
Viene verificato il valore del campo PhoneNumber e viene restituito "No Value" se è null (Nothing in Visual Basic); in caso contrario, viene restituito il valore del numero di telefono. Questa espressione può essere utilizzata per controllare il valore di una casella di testo in un elemento del report.
=IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
Viene verificato il valore del campo Department e viene restituito il nome di un sottoreport o null (Nothing in Visual Basic). Questa espressione può essere utilizzata per i sottoreport drill-through condizionali.
=IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
Viene verificato se il valore di un campo è Null. Questa espressione può essere utilizzata per controllare la proprietà Hidden di un elemento immagine del report. Nell'esempio seguente l'immagine specificata dal campo [LargePhoto] viene visualizzata solo se il valore del campo non è Null.
=IIF(IsNothing(Fields!LargePhoto.Value),True,False)
Funzioni per i report
In Reporting Services sono disponibili altre funzioni che è possibile utilizzare per modificare i dati di un report. In questa sezione vengono forniti esempi di due funzioni per i report. Per ulteriori informazioni sulle funzioni per i report ed esempi, vedere Utilizzo delle funzioni predefinite di report e aggregazione nelle espressioni (Generatore report 2.0).
Sum
La funzione Sum consente di calcolare il totale dei valori di un gruppo o di un'area dati. Può risultare utile nell'intestazione o nel piè di pagina di un gruppo. L'espressione seguente visualizza la somma dei dati del gruppo o dell'area dati Order:
=Sum(Fields!LineTotal.Value, "Order")
È possibile utilizzare la funzione Sum anche per i calcoli di aggregazione condizionali. Se ad esempio un set di dati include un campo denominato State, con i valori possibili Not Started, Started e Finished, l'espressione seguente, se inserita nell'intestazione di un gruppo, calcola la somma aggregata solo per il valore Finished:
=Sum(IIF(Fields!State.Value = "Finished", 1, 0))
RowNumber
La funzione RowNumber, se utilizzata in una casella di testo in un'area dati, visualizza il numero di riga di ogni istanza della casella di testo in cui compare l'espressione. Questa funzione può essere utile per numerare le righe di una tabella, ma anche per attività più complesse, ad esempio per l'inserimento di interruzioni di pagina in base al numero di righe. Per ulteriori informazioni, vedere Interruzioni di pagina di seguito in questo argomento.
L'ambito specificato per RowNumber controlla quando inizia la rinumerazione. La parola chiave Nothing indica che il conteggio inizierà dalla prima riga dell'area dati più esterna. Per iniziare il conteggio all'interno di aree dati nidificate, utilizzare il nome dell'area dati. Per iniziare il conteggio in un gruppo, utilizzare il nome del gruppo.
=RowNumber(Nothing)
Aspetto dei dati del report
È possibile utilizzare le espressioni per modificare l'aspetto dei dati in un report. È possibile, ad esempio, visualizzare i valori di due campi in una sola casella di testo, visualizzare informazioni sul report o intervenire sulla modalità di inserimento delle interruzioni di pagina nel report.
Intestazioni di pagina e piè di pagina
Se si desidera che nel piè di pagina del report vengano visualizzati il nome del report e il numero di pagina, è possibile utilizzare le espressioni seguenti:
L'espressione seguente restituisce il nome del report e la data di esecuzione. Può essere inserita in una casella di testo nel piè di pagina del report oppure nel corpo del report. Per la formattazione dell'ora viene utilizzata la stringa di formattazione di .NET Framework per la data breve:
=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
L'espressione seguente, inserita in una casella di testo nel piè di pagina di un report, restituisce il numero di pagina e le pagine totali del report:
=Globals.PageNumber & " of " & Globals.TotalPages
Negli esempi seguenti viene illustrato come visualizzare il primo e l'ultimo valore di una pagina nell'intestazione di pagina. Si suppone che sia presente un'area dati contenente una casella di testo denominata LastName.
L'espressione seguente, inserita in una casella di testo a sinistra dell'intestazione di pagina, restituisce il primo valore della casella di testo LastName nella pagina:
=First(ReportItems("LastName").Value)
L'espressione seguente, se inserita in una casella di testo a destra dell'intestazione di pagina, restituisce l'ultimo valore della casella di testo LastName nella pagina:
=Last(ReportItems("LastName").Value)
Nell'esempio seguente viene illustrato come visualizzare un totale di pagina. Si suppone che sia presente un'area dati contenente una casella di testo denominata Cost.
L'espressione seguente, inserita nell'intestazione o nel piè di pagina, restituisce la somma dei valori presenti nella casella di testo Cost nella pagina:
=Sum(ReportItems("Cost").Value)
[!NOTA]
In un'intestazione o piè di pagina è possibile fare riferimento a un solo elemento del report in ogni espressione. Inoltre, nelle espressioni di intestazione e piè di pagina è possibile fare riferimento al nome della casella di testo, ma non all'espressione di dati effettiva al suo interno.
Interruzioni di pagina
In alcuni report può essere necessario inserire un'interruzione di pagina alla fine di un numero di righe specificato anziché alla fine di gruppi o elementi del report oppure in aggiunta a questi. A tale scopo, creare un gruppo che contiene i gruppi o i record di dettaglio desiderati, aggiungere un'interruzione di pagina al gruppo, quindi aggiungere un'espressione di raggruppamento per eseguire il raggruppamento in base al numero di righe specificato.
L'espressione seguente, se inserita nell'espressione di raggruppamento, assegna un numero a ogni set di 25 righe. Se si definisce un'interruzione di pagina per il gruppo, si ottiene un'interruzione di pagina ogni 25 righe.
=Ceiling(RowNumber(Nothing)/25)
Per consentire all'utente di impostare un valore relativo al numero di righe per pagina, creare un parametro denominato RowsPerPage su cui basare l'espressione di raggruppamento, come illustrato nell'espressione seguente:
=Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)
Per ulteriori informazioni sull'impostazione delle interruzioni di pagina per un gruppo, vedere Procedura: Aggiunta di un'interruzione di pagina (Generatore report 2.0).
Proprietà
Le espressioni non vengono utilizzate solo per visualizzare dati in caselle di testo. Possono essere utilizzate anche per modificare la modalità di applicazione delle proprietà agli elementi del report. È possibile modificare le informazioni sullo stile di un elemento del report oppure modificarne la visibilità.
Formattazione
L'espressione seguente, se utilizzata nella proprietà Color di una casella di testo, cambia il colore del testo a seconda del valore del campo Profit:
=Iif(Fields!Profit.Value < 0, "Red", "Black")
È anche possibile utilizzare la variabile oggetto Me di Visual Basic. Questa variabile consente di fare riferimento in un altro modo al valore di una casella di testo.
=Iif(Me.Value < 0, "Red", "Black")
L'espressione seguente, se utilizzata nella proprietà BackgroundColor di un elemento del report in un'area dati, alterna il verde chiaro e il bianco come colore di sfondo di ogni riga:
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
Se si utilizza un'espressione per uno scopo specifico, potrebbe essere necessario indicare il set di dati per la funzione di aggregazione.
=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
[!NOTA]
I colori disponibili provengono dall'enumerazione KnownColor di .NET Framework.
Visibilità
È possibile visualizzare e nascondere elementi in un report utilizzando le proprietà di visibilità per gli elementi del report. In un'area dati, ad esempio una tabella, è possibile nascondere inizialmente le righe di dettaglio in base al valore di un'espressione.
L'espressione seguente, se utilizzata per la visibilità iniziale delle righe di dettaglio in un gruppo, visualizza le righe di dettaglio per tutte le vendite con un valore superiore al 90 percento nel campo PctQuota:
=Iif(Fields!PctQuota.Value>.9, False, True)
L'espressione seguente, se impostata nella proprietà Hidden di una tabella, visualizza la tabella solo se contiene più di 12 righe:
=IIF(CountRows()>12,true,false)
L'espressione seguente, se impostata nella proprietà Hidden di una colonna, visualizza la colonna solo se il campo esiste nel set di dati del report dopo il recupero dei dati dall'origine dati:
=IIF(Fields!Column_1.IsMissing, true, false)
URL
È possibile personalizzare gli URL utilizzando i dati del report e inoltre controllare in base a condizioni specifiche se gli URL vengono aggiunti come azione per una casella di testo.
L'espressione seguente, se utilizzata come azione per una casella di testo, genera un URL personalizzato in cui è specificato il campo del set di dati EmployeeID come parametro.
="http://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
Per ulteriori informazioni, vedere Procedura: Aggiunta di un collegamento ipertestuale a un URL (Generatore report 2.0).
L'espressione seguente controlla in base a specifiche condizioni se aggiungere un URL in una casella di testo. L'espressione dipende da un parametro denominato IncludeURLs che consente all'utente di decidere se includere o meno URL attivi in un report. Questa espressione viene impostata come azione per una casella di testo. Se si imposta il parametro su False e quindi si visualizza il report, è possibile esportare il report in Microsoft Excel senza collegamenti ipertestuali.
=IIF(Parameters!IncludeURLs.Value,"http://adventure-works.com/productcatalog",Nothing)
Dati dei report
È possibile utilizzare le espressioni per modificare i dati utilizzati nei report. È possibile fare riferimento a parametri e ad altre informazioni dei report, nonché modificare la query utilizzata per recuperare i dati per il report.
Parametri
È possibile utilizzare espressioni in un parametro per modificare il valore predefinito del parametro. Ad esempio, è possibile utilizzare un parametro per filtrare i dati relativi a un utente specifico sulla base dell'ID utente utilizzato per eseguire il report.
L'espressione seguente, se utilizzata come valore predefinito di un parametro, recupera l'ID utente della persona che esegue il report:
=User!UserID
Per fare riferimento a un parametro incluso in un parametro di query, un'espressione di filtro, una casella di testo o un'altra area del report, utilizzare la raccolta globale Parameters. In questo esempio si presuppone che il parametro sia denominato Department:
=Parameters!Department.Value
I parametri possono essere creati in un report ma impostati come nascosti. Quando il report viene eseguito nel server di report, il parametro non viene visualizzato sulla barra degli strumenti e il lettore del report non può modificare il valore predefinito. È possibile utilizzare un parametro nascosto impostato su un valore predefinito come costante personalizzata. È possibile utilizzare questo valore in qualsiasi espressione, anche in un'espressione di campo. L'espressione seguente identifica il campo specificato dal valore del parametro predefinito per il parametro denominato ParameterField:
=Fields(Parameters!ParameterField.Value).Value
Codice personalizzato
È possibile utilizzare codice personalizzato in un report. Il codice personalizzato può essere incorporato in un report o archiviato in un assembly personalizzato utilizzato nel report. Per ulteriori informazioni sul codice personalizzato, vedere Utilizzo di riferimenti a codice personalizzato nelle espressioni (Generatore report 2.0).
Nell'esempio seguente viene chiamato un metodo di codice incorporato denominato ToUSD per la conversione del valore del campo StandardCost in un valore in dollari:
=Code.ToUSD(Fields!StandardCost.Value)
Nell'esempio seguente viene illustrato come definire alcune variabili e costanti personalizzate.
[Visual Basic]
Public Const MyNote = "Authored by Bob" Public Const NCopies As Int32 = 2 Public Dim MyVersion As String = "123.456" Public Dim MyDoubleVersion As Double = 123.456
Sebbene le variabili e le costanti personalizzate non siano presenti nella visualizzazione delle costanti dell'editor di espressioni, in cui sono presenti solo le costanti predefinite, è possibile aggiungere un riferimento a esse da qualsiasi espressione, come illustrato negli esempi seguenti. Questi elementi vengono trattati come dati di tipo Variant.
[Visual Basic]
=Code.MyNote =Code.NCopies =Code.MyVersion =Code.MyDoubleVersion
Sostituzione del testo in un campo in fase di esecuzione
Nell'esempio seguente viene chiamato un metodo incorporato denominato FixSpelling, che sostituisce tutte le occorrenze del testo "Bike" con "Bicycle" in SubCategory.Value.
=Code.FixSpelling(Fields!SubCategory.Value)
Il codice seguente, se incorporato in una definizione del report, indica un'implementazione del metodo FixSpelling. In questo esempio viene illustrato come fare riferimento alla classe System.Text..::..StringBuilder di .NET Framework. Per ulteriori informazioni, vedere Procedura: Aggiunta di codice a un report (Generatore report 2.0).
Public Function FixSpelling(ByVal s As String) As String
Dim strBuilder As New System.Text.StringBuilder(s)
If s.Contains("Bike") Then
strBuilder.Replace("Bike", "Bicycle")
Return strBuilder.ToString()
Else : Return s
End If
End Function
Eliminazione di valori Null o zero in fase di esecuzione
Alcuni valori di un'espressione possono restituire un valore Null o non definito in fase di elaborazione del report. In questo modo possono verificarsi errori di run-time che generano la visualizzazione di #Errore nella casella di testo anziché dell'espressione valutata. Questo comportamento influisce in modo particolare sulla funzione IIF in quanto, a differenza di un'istruzione If-Then-Else, ogni parte dell'istruzione IIF (incluse le chiamate a funzioni) viene valutata prima di essere passata alla routine che verifica se il risultato è true o false. L'istruzione =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) genera #Errore nel report visualizzabile se Fields!Sales.Value è NOTHING.
Per evitare questa condizione, utilizzare una delle strategie seguenti:
Impostare il numeratore su 0 e il denominatore su 1 se il valore per il campo B è 0 o non definito; in caso contrario, impostare il numeratore sul valore per il campo A e il denominatore sul valore per il campo B.
=IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))
Utilizzare una funzione di codice personalizzata per restituire il valore per l'espressione. Nell'esempio seguente viene restituita la differenza in percentuale tra un valore corrente e uno precedente. Questa funzione può essere utilizzata per calcolare la differenza tra due valori successivi e consente di gestire il caso limite del primo confronto (quando non è disponibile alcun valore precedente) e i casi in cui il valore precedente o il valore corrente sia null (Nothing in Visual Basic).
Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then Return Nothing Else if PreviousValue = 0 OR CurrentValue = 0 Then Return Nothing Else Return (CurrentValue - PreviousValue) / CurrentValue End If End Function
Nell'espressione seguente viene illustrato come chiamare questo codice personalizzato da una casella di testo:
=Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))
In questo modo si evitano eccezioni in fase di esecuzione ed è possibile utilizzare un'espressione come =IIF(Me.Value < 0, "red", "black") nella proprietà Color della casella di testo in modo condizionale per visualizzare il testo in base ai valori.
Vedere anche