Condividi tramite


Esempi di espressioni nei report impaginati da Report Builder

Si applica a: Generatore di report Microsoft (SSRS) Power BI Report Builder Report Designer in SQL Server Data Tools

Le espressioni vengono usate di frequente nei report impaginati di per controllare il contenuto e l'aspetto del report. Le espressioni 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 altre informazioni sull'editor espressioni e sui tipi di dizionari ed enciclopedie che è possibile includere, consultare Usi delle espressioni nei report impaginati (Report Builder) e Aggiungere un'espressione a un report impaginato (Report Builder).

Importante

Quando RDL Sandboxing è abilitato, al momento della pubblicazione del report nel testo dell'espressione è possibile utilizzare solo determinati tipi e membri. Per altre informazioni, consultare Abilitare e disabilitare RDL Sandboxing per Reporting Services in modalità integrata SharePoint.

Per esempi di espressioni per utilizzi specifici, vedere i seguenti articoli:

Per altre informazioni sulle espressioni semplici e complesse, per sapere dove è possibile usarle e quali tipi di dizionari ed enciclopedie che è possibile includere in un'espressione, consultare gli articoli contenuti in Espressioni in un report impaginato (Report Builder). Per altre informazioni sul contesto in cui le espressioni vengono valutate per calcolare le aggregazioni, consultare Ambito di espressioni per totali, aggregazioni e raccolte predefinite in un report impaginato (Report Builder).

Per scoprire come scrivere espressioni che utilizzano molte delle funzioni e degli operatori presenti negli esempi di espressioni in questo articolo, consulta il Esercitazione: Introduzione alle espressioni.

Funzioni

Molte espressioni incluse in un report contengono funzioni. Usando queste funzioni è possibile formattare dati, applicare logica e accedere ai metadati del report. È possibile scrivere espressioni che usano funzioni della libreria run-time di Microsoft Visual Basic e degli spazi dei nomi Convert e Math. È possibile aggiungere dizionari ed enciclopedie a funzioni da altri assembly o da codice personalizzato. È anche possibile usare classi del framework Microsoft .NET, tra cui System.Text.RegularExpressions.

Funzioni di Visual Basic

È possibile utilizzare le funzioni di Visual Basic per manipolare i dati visualizzati nelle caselle di testo o i parametri, le proprietà e le altre aree del proprio report. In questa sezione vengono forniti esempi che illustrano alcune di queste funzioni. Per altre informazioni, vedere la pagina relativa ai membri delle librerie di runtime di Visual Basic.

Il .NET Framework fornisce molte opzioni di formato personalizzato, ad esempio per formati di data specifici.

Funzioni matematiche

  • La funzione Round risulta utile per l'arrotondamento dei numeri al numero intero più vicino. L'espressione seguente arrotonda da 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. Con questa funzione è possibile moltiplicare un valore per un fattore che crea un numero intero, arrotondare il numero e poi dividere per lo stesso fattore. Per arrotondare ad esempio 1,3 al multiplo più vicino di 0,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 usata 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()  
    
  • Usare la funzione DateInterval per estrarre una parte specifica di una data. Ecco alcuni parametri DateInterval validi:

    • DateInterval.Second

    • DateInterval.Minute

    • DateInterval.Hour

    • DateInterval.Weekday

    • DateInterval.Day

    • DateInterval.DayOfYear

    • DateInterval.WeekOfYear

    • DateInterval.Month

    • DateInterval.Quarter

    • DateInterval.Year

      Ad esempio, questa espressione mostrerà il numero della settimana nell'anno corrente per la data di oggi:

      =DatePart(DateInterval.WeekOfYear, 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 funzione 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 manipolare le date è possibile utilizzare, inoltre, la funzione Month e altre ancora:

    =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 cambia in December Week 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.

  • L'espressione seguente applica al valore SellStartDate il formato MMM-AA. Il campo SellStartDate è un tipo di dati datetime:

    =FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
    
  • L'espressione seguente applica al valore SellStartDate il formato gg/MM/aaaa. Il campo SellStartDate è un tipo di dati datetime:

    =FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
    
  • La funzione CDate converte il valore in una data. La funzione Now restituisce un valore contenente la data e l'ora correnti del sistema in uso. DateDiff restituisce un valore Long che specifica il numero di intervalli di tempo tra due valori di data.

    Nell'esempio seguente viene visualizzata la data di inizio dell'anno in corso:

    =DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))  
    
  • Nell'esempio seguente viene visualizzata la data di inizio del mese precedente basato sul mese corrente:

    =DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))  
    
  • L'espressione seguente genera gli anni di intervallo tra SellStartDate e LastReceiptDate. Questi campi si trovano in due set di dati diversi, DataSet1 e DataSet2. Le funzioni di Report Builder - la prima funzione in un report impaginato (Report Builder), una funzione di aggregazione, restituisce il primo valore di SellStartDate in DataSet1 e il primo valore di LastReceiptDate in DataSet2:

    =DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
    
  • La funzione DatePart restituisce un valore intero contenente la componente specificata di un determinato valore di data. L'espressione seguente restituisce l'anno per il primo valore di SellStartDate in DataSet1. L'ambito del set di dati è specificato poiché il report include più set di dati:

    =Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))  
    
    
  • La funzione DateSerial restituisce un valore di data che rappresenta uno specifico anno, mese e giorno, con le informazioni sull'ora impostate sulla mezzanotte. Nell'esempio seguente viene visualizzata la data di fine del mese precedente, in base al mese corrente:

    =DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)  
    
  • Le espressioni seguenti mostrano diverse date, in base a un valore di parametro di data selezionato dall'utente:

Example Description Esempio
Ieri =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1)
Due giorni fa =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2)
Un mese fa =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value))
Due mesi fa =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value))
Un anno fa =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))
Due anni fa =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))

Funzioni di stringa

  • È possibile combinare più campi utilizzando operatori di concatenamento 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 usare la proprietà Formatta della casella di testo, anziché la funzione Formatta all'interno della casella di testo.

  • Le funzioni Right, Len e InStr sono utili per restituire una substring, ad esempio riducendo DOMAIN\username al solo nome utente. 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 usando membri della classe String del .NET Framework invece di 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)  
    

    Nell'esempio seguente viene eseguita la stessa operazione dell'esempio precedente e viene visualizzata una stringa di testo prima dell'elenco dei valori selezionati:

    ="Report for " & JOIN(Parameters!MySelection.Value, " & ")  
    
    
  • Le funzioni Regex dal .NET Framework System.Text.RegularExpressions sono utili per modificare il formato di stringhe esistenti, ad esempio per formattare un numero di telefono. L'espressione seguente usa la funzione Rimpiazza per modificare il formato di un numero telefonico 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 nel valore di Fields!Phone.Value non siano contenuti spazi aggiuntivi e che sia di tipo String.

Ricerca

  • Specificando un campo chiave è possibile usare 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 chiamato Prodotto, 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 usare 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 persona e un numero di telefono in ogni riga. TramiteLookupSet viene restituita una matrice di valori. L'espressione seguente combina i valori restituiti in un'unica stringa e visualizza l'elenco di numeri di telefono della 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 usate per convertire il tipo di dati predefinito di un campo nel tipo di dati necessario per i calcoli o 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 decisionali

  • La funzione IIF restituisce uno di due valori a seconda che l'espressione sia vera o meno. Nell'espressione seguente viene usata la funzione IIF per restituire un valore booleano "vero" se il valore LineTotal è maggiore di 100. In caso contrario, restituisce un valore "falso":

    =IIF(Fields!LineTotal.Value > 100, True, False)  
    
  • È possibile usare 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 dieci vengono visualizzati con uno sfondo verde. I valori compresi tra uno e nove vengono visualizzati con uno sfondo blu. I valori inferiori a uno vengono visualizzati 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 valuta come VERI:

    =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 dieci visualizzati con uno sfondo verde. I valori compresi tra uno e nove visualizzati con uno sfondo blu. I valori uguali a uno visualizzati con uno sfondo giallo. I valori 0 o inferiori visualizzati con uno sfondo rosso.

  • Verificare il valore del campo ImportantDate, quindi restituire "Red" se è antecedente a una settimana o, in caso contrario, "Blue". Questa espressione può essere usata 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")  
    
  • Verificare il valore del campo PhoneNumber, quindi restituire "No Value" in caso di valore null, chiamato Nothing in Visual Basic. In caso contrario, restituire il valore del numero di telefono. Questa espressione può essere usata 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)  
    
  • Verificare il valore del campo Department, quindi restituire il nome di un sottoreport o un valore null, chiamato Nothing in Visual Basic. Questa espressione può essere usata per i sottoreport drill-through condizionali:

    =IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)  
    
  • Verificare se il valore del campo è un valore 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 è un valore null:

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)  
    
  • La funzione MonthName restituisce il valore di stringa contenente il nome del mese specificato. Nell'esempio seguente viene visualizzato ND nel campo Month quando il campo contiene il valore 0:

    IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))  
    
    

Funzioni di report

In un'espressione è possibile aggiungere un riferimento a funzioni report aggiuntive che manipolano i dati di un report. In questa sezione vengono forniti esempi di due funzioni per i report. Per altre informazioni sulle funzioni report e relativi esempi, consultare Funzioni di Report Builder - riferimento alle funzioni aggregate nei report impaginati (Report Builder).

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 nel gruppo o nell'area dati Ordine:

    =Sum(Fields!LineTotal.Value, "Order")  
    
  • È possibile utilizzare la funzione Sum anche per i calcoli di aggregazione condizionali. Si supponga, ad esempio, di avere un set di dati con un campo denominato State che ha come valori possibili Non avviato, Avviato e Completato. L'espressione seguente, se inserita in un'intestazione di gruppo, calcola la somma aggregata solo per il valore Completato:

    =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 altre informazioni, vedere Interruzione di pagina.

    L'ambito specificato per RowNumber controlla quando inizia la rinumerazione. La parola chiave Nothing indica che la funzione inizierà il conteggio 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, usare 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

Durante la realizzazione di un report, se lo si desidera, è possibile inserire a piè di pagina il nome del report e il numero di pagina. È possibile usare 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. L'ora è formattata con la stringa di formattazione per la data breve di .NET Framework:

    =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. Nell'esempio si presuppone 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, posizionata in una casella di testo sul lato destro dell'intestazione di pagina, fornisce 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. L'esempio presuppone l'esistenza di un'area dati che contiene una casella di testo chiamata Cost. L'espressione seguente, inserita nell'intestazione o a 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 è necessario inserire un'interruzione di pagina alla fine di un numero di righe specificato invece di, o in aggiunta a, gruppi o elementi del report. Creare un gruppo contenente i gruppi o i record di dettaglio desiderati. Aggiungere un'interruzione di pagina al gruppo, quindi aggiungere un'espressione di gruppo per raggruppare per un numero specificato di righe.

  • 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, l'espressione fa ottenere 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 altre informazioni sull'impostazione di interruzioni di pagina per un gruppo, consultare Aggiungere di un'interruzione di pagina a un report impaginato (Report Builder).

Proprietà

Le espressioni non vengono usate solo per visualizzare i dati nelle 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 in corso

  • L'espressione seguente, quando usata nella proprietà Color di una casella di testo, modifica il colore del testo a seconda del valore del campo Profit:

    =Iif(Fields!Profit.Value < 0, "Red", "Black")  
    

    È anche possibile utilizzare la variabile oggetto di Visual Basic Me. 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, quando usata 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 viene utilizzata 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 di un grafico a forma, puoi utilizzare codice personalizzato per controllare l'ordine in cui i colori vengono mappati sui valori del punto dati. Questo codice personalizzato ti aiuta a utilizzare colori coerenti per più grafici con gli stessi gruppi di categorie. Per altre informazioni, consultare Specificare colori coerenti in più grafici a forma in un report impaginato (Report Builder).

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, usata per la visibilità iniziale delle righe di dettaglio in un gruppo, visualizza le righe di dettaglio per tutte le vendite che superano il 90% nel campo PctQuota:

    =Iif(Fields!PctQuota.Value>.9, False, True)  
    
  • L'espressione seguente, impostata nella proprietà Hidden di una tabella, visualizza la tabella solo se contiene più di 12 righe:

    =IIF(CountRows()>12,false,true)  
    
  • 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)  
    

È 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, quando utilizzata come azione per una casella di testo, genera un URL personalizzato in cui è specificato il campo del set di dati EmployeeID come parametro URL:

    ="https://contoso/MyInfo?ID=" & Fields!EmployeeID.Value  
    

    Per altre informazioni, vedere Aggiungere un collegamento ipertestuale a un URL in un report impaginato (Report Builder).

  • L'espressione seguente controlla in base a specifiche condizioni se aggiungere un URL in una casella di testo. Questa espressione dipende da un parametro denominato IncludeURLs che consente a un utente di decidere se includere GLI URL attivi in un report. Questa espressione viene impostata come azione per una casella di testo. Impostando il parametro su FALSO e quindi visualizzando il report, è possibile esportare quest'ultimo in Microsoft Excel senza collegamenti ipertestuali:

    =IIF(Parameters!IncludeURLs.Value,"https://contoso.com/productcatalog",Nothing)  
    

Dati di report

È possibile utilizzare le espressioni per modificare i dati utilizzati nei report. È possibile fare riferimento a parametri e ad altre informazioni dei report. È anche possibile modificare la query usata 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 nella 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 usato nel report. Per altre informazioni sul codice personalizzato, consultare Codice personalizzato e assembly di dizionari ed enciclopedie in espressioni in un report impaginato su Report Designer (SSRS).

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 Usare variabili di gruppo in Reporting Services 2008 per aggregazioni personalizzate.

Per altre informazioni sulle variabili, consultare Dizionari ed enciclopedie delle variabili di report e di gruppo in un report impaginato (Report Builder).

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. Questi valori creano talvolta errori di run-time che generano la visualizzazione di "#errore" nella casella di testo al posto dell'espressione valutata. La funzione IIF è sensibile a questo comportamento. A differenza di un'istruzione If-Then-Else, ogni parte dell'istruzione IIF, incluse le chiamate di funzione, viene valutata prima di essere passata alla routine che verifica se il risultato è VERO o FALSO. L'istruzione =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) genera #Errore nel report visualizzabile se Fields!Sales.Value è un valore 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. Questo valore può essere usato per calcolare la differenza tra due valori successivi. Gestisce il caso limite del primo confronto quando non c'è un valore precedente e funziona nei casi in cui il valore precedente o il valore corrente è un valore null, chiamato 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 mostrato come richiamare questo codice personalizzato da una casella di testo, per il contenitore "ColumnGroupByYear", un gruppo o un'area dati:

    =Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))  
    

    Questo codice permette di evitare eccezioni in fase di esecuzione. ed è ora possibile usare 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.