Esempi di espressioni (Generatore report 3.0 e SSRS)

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 di gruppo e di report e variabili definite dall'utente. Le espressioni iniziano con un segno di uguale (=). Per ulteriori informazioni sull'editor di espressioni e sui tipi di riferimenti che è possibile includere, vedere Utilizzo delle espressioni (Generatore report 3.0 e SSRS) e Procedura: Aggiunta di un'espressione (Generatore report 3.0 e SSRS).

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.

Per esempi di espressioni per utilizzi specifici, vedere gli argomenti seguenti:

Per ulteriori informazioni sulle espressioni semplici e complesse e per sapere dove è possibile utilizzare le espressioni e quali tipi di riferimenti è possibile includere in un'espressione, vedere gli argomenti contenuti in Espressioni (Generatore report 3.0 e SSRS). Per ulteriori informazioni sul contesto in cui vengono valutate le espressioni per calcolare le aggregazioni, vedere Informazioni sull'ambito di espressioni per totali, aggregazioni e raccolte predefinite (Generatore report 3.0 e SSRS).

Per ulteriori informazioni su come scrivere espressioni in cui vengono utilizzati molti operatori e funzioni che si utilizzano anche per esempi di espressione in questo argomento, ma nel contesto di scrittura di un report, vedere Esercitazione: Introduzione alle espressioni.

Nell'editor espressioni è inclusa una vista gerarchica delle funzioni predefinite. Quando si seleziona la funzione, nel riquadro Valori viene visualizzato un esempio di codice. Per ulteriori informazioni, vedere la Finestra di dialogo Espressione o la Finestra di dialogo Espressione (Generatore report 3.0).

Se si utilizza Progettazione query modelli di report durante la progettazione di una query per un set di dati in cui viene utilizzato un modello di report come origine dati, è possibile utilizzare le formule anziché le espressioni. Le formule in questione consentono di specificare i dati dei report utilizzando calcoli personalizzati che vengono integrati nella query in cui sono indicati i dati che devono essere restituiti dall'origine dati del modello di report. Per ulteriori informazioni, vedere Utilizzo di formule nelle query di modelli di report (Generatore report 3.0 e SSRS).

Nota

È possibile creare e modificare definizioni del report (con estensione rdl) in Generatore report 3.0 e in Progettazione report di Business Intelligence Development Studio. Ogni ambiente di creazione offre modalità differenti per creare, aprire e salvare report ed elementi correlati. Per ulteriori informazioni, vedere Progettazione di report tramite Progettazione report e Generatore report 3.0 (SSRS) nel Web all'indirizzo microsoft.com.

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 Microsoft Visual 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 lo spazio dei nomi System.Text.RegularExpressions.

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, vedere la pagina relativa ai membri della libreria di runtime di Visual Basic in MSDN.

In .NET Framework sono disponibili molte opzioni di formato personalizzato, ad esempio per formati di data specifici. Per ulteriori informazioni, vedere Formattazione dei tipi di dati in MSDN.

Funzioni matematiche

  • La funzione Round risulta utile per l'arrotondamento dei numeri al numero intero più vicino. L'espressione seguente comporta un arrotondamento del valore 1.3 a 1:

    = Round(1.3)
    

    È anche possibile scrivere un'espressione per arrotondare un valore a un multiplo specificato, come avviene con la funzione MRound di Excel. Moltiplicare il valore di un fattore che crea un numero intero, arrotondare il numero e dividere il risultato per lo stesso fattore. Per arrotondare ad esempio 1.3 al multiplo più vicino di .2 (1.4), utilizzare l'espressione seguente:

    = Round(1.3*5)/5
    

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)
    
  • È possibile combinare le funzioni in un'espressione per personalizzare il formato. L'espressione seguente cambia il formato di una data da mese-giorno-anno in mese-settimana-numero settimana, ad esempio 12/23/2009 in dicembre settimana 3:

    =Format(Fields!MyDate.Value, "MMMM") & " Week " & _
    (Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value), _
    Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString
    

    Se utilizzata come campo calcolato in un set di dati, questa espressione consente di aggregare i valori di un grafico in base alla settimana in ogni mese.

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 System.Text.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 in un campo 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")
    

    Nota

    Verificare che il valore di Fields!Phone.Value non contenga spazi aggiuntivi e che sia di tipo String.

Lookup

  • Specificando un campo chiave è possibile utilizzare la funzione Lookup per recuperare un valore da un set di dati per una relazione uno-a-uno, ad esempio, una coppia chiave-valore. Nell'espressione seguente viene visualizzato il nome prodotto da un set di dati, in base all'identificatore del prodotto con cui eseguire la corrispondenza:

    =Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields.ProductName.Value, "Product")
    

LookupSet

  • Specificando un campo chiave è possibile utilizzare la funzione LookupSet per recuperare un set di valori da un set di dati per una relazione uno-a-molti. Ad esempio una persona può disporre di più numeri di telefono. Nell'esempio seguente, si supponga che il set di dati PhoneList contenga un identificatore della persona e un numero di telefono in ogni riga. LookupSet restituisce una matrice di valori. L'espressione seguente combina i valori restituiti in un'unica stringa e visualizza l'elenco di numeri di telefono per la persona specificata da ContactID:

    =Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")
    

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 un'espressione è possibile aggiungere un riferimento a funzioni per i report aggiuntive tramite le quali vengono modificati 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 Riferimento a funzioni di aggregazione (Generatore report 3.0 e SSRS).

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 3.0 e SSRS).

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 MeVisual 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 un ambito 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.

Colori del grafico

Per specificare i colori per un grafico con forme, è possibile utilizzare codice personalizzato per controllare l'ordine in base al quale i colori vengono mappati ai valori dei punti dati. In questo modo è possibile utilizzare colori coerenti per più grafici con gli stessi gruppi di categorie. Per ulteriori informazioni, vedere Procedura: Specifica di colori coerenti in più grafici con forme (Generatore report 3.0 e SSRS).

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 3.0 e SSRS).

  • 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 Codice personalizzato e riferimenti agli assembly nelle espressioni in Progettazione report (SSRS).

  • 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
    

Utilizzo delle variabili di gruppo per l'aggregazione personalizzata

È possibile inizializzare il valore di una variabile di gruppo locale all'interno di un particolare ambito del gruppo e quindi includere un riferimento a tale variabile nelle espressioni. Una delle modalità di utilizzo di una variabile di gruppo con codice personalizzato consiste nell'implementare un'aggregazione personalizzata. Per ulteriori informazioni, vedere Using Group Variables in Reporting Services 2008 for Custom Aggregation.

Per ulteriori informazioni sulle variabili, vedere Utilizzo di riferimenti a raccolte di variabili di report e di gruppo (Generatore report 3.0 e SSRS).

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: Aggiungere codice a un report (SSRS).

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 è ora possibile utilizzare un'espressione come =IIF(Me.Value < 0, "red", "black") nella proprietà Color della casella di testo a seconda se i valori sono maggiori o minori di 0.