Utilizzo dei tipi di dati nelle espressioni (Reporting Services)

I tipi di dati rappresentano tipologie di dati differenti che possono essere archiviati ed elaborati in modo efficiente. I tipi di dati standard includono testo, anche noto come stringhe, numeri con e senza posizioni decimali, date e ore e immagini. Per motivi di efficienza, è possibile archiviare i dati utilizzando un tipo di dati. Quando vengono visualizzati nel report, tuttavia, i dati possono essere formattati in base alle proprie esigenze. Un campo che rappresenta la valuta può essere archiviato, ad esempio, come numero a virgola mobile, ma può essere visualizzato in diversi formati a seconda della proprietà di formattazione scelta. Per ulteriori informazioni sui formati di visualizzazione, vedere Formattazione dei report e degli elementi del report.

È importante capire i tipi di dati quando si scrivono espressioni per confrontare o combinare valori, ad esempio quando si definiscono espressioni di raggruppamento o di filtro o quando si calcolano le aggregazioni. Confronti e calcoli sono validi solo tra elementi dello stesso tipo di dati. Se i tipi di dati non corrispondono, è necessario convertire esplicitamente il tipo di dati nell'elemento del report utilizzando un'espressione. Nell'elenco seguente sono descritti i casi in cui potrebbe essere necessario convertire i dati in un altro tipo di dati:

  • Confronto del valore di un parametro del report di un tipo di dati con un campo del set di dati di un altro tipo di dati.

  • Scrittura di espressioni di filtro che confrontano valori di tipi di dati differenti.

  • Scrittura di espressioni di ordinamento che combinano campi di tipi di dati differenti.

  • Scrittura di espressioni di raggruppamento che combinano campi di tipi di dati differenti.

  • Conversione da un tipo di dati a un altro tipo di dati di un valore recuperato dall'origine dati.

Determinazione del tipo dei dati del report

Per determinare il tipo di dati di un elemento del report è possibile scrivere un'espressione. Per visualizzare, ad esempio, il tipo di dati del campo MyField, aggiungere l'espressione =Fields!MyField.Value.GetDataType().ToString() a una cella della tabella. Il risultato indica il tipo di dati CLR utilizzato per rappresentare MyField, ad esempio System.String o System.DateTime.

Conversione dei campi del set di dati in un altro tipo di dati

È anche possibile convertire i campi del set di dati prima di utilizzarli in un report. Nell'elenco seguente sono descritte le modalità di conversione di un campo del set di dati esistente:

  • Modificare la query del set di dati in modo da aggiungere un nuovo campo di query con i dati convertiti. Per le origini dati relazionali o multidimensionali, per eseguire la conversione vengono utilizzate le risorse dell'origine dati.
  1. Creare un campo calcolato basato su un campo del set di dati del report esistente scrivendo un'espressione che converte tutti i dati di una colonna del set di risultati in una nuova colonna con un tipo di dati differente. L'espressione seguente, ad esempio, converte il campo Year da un valore di tipo Integer in un valore di tipo String: =CStr(Fields!Year.Value). =CStr(Fields!Year.Value). Per ulteriori informazioni, vedere Procedura: Aggiunta, modifica o eliminazione di un campo nel riquadro Dati report.
  • Controllare se l'estensione per l'elaborazione dati in uso include metadati per il recupero dei dati preformattati. Una query MDX di SQL ServerAnalysis Services include, ad esempio, una proprietà estesa FORMATTED_VALUE per i valori del cubo già formattati durante l'elaborazione del cubo. Per ulteriori informazioni, vedere Utilizzo di proprietà di campo estese per un set di dati di Analysis Services.

Informazioni sui tipi di dati dei parametri

I parametri del report devono essere di uno dei cinque tipi di dati seguenti: Boolean, DateTime, Integer, Float o Text (anche noto come String). Quando una query del set di dati include parametri di query, i parametri del report vengono creati automaticamente e collegati ai parametri di query. Il tipo di dati predefinito per un parametro di report è String. Per modificare tale tipo di dati, selezionare il valore corretto nell'elenco a discesa Tipo di dati nella pagina Generale della finestra di dialogo Proprietà parametri report.

[!NOTA]

I parametri di report di tipo DateTime non supportano i millisecondi. Sebbene sia possibile creare un parametro basato su valori che includono millisecondi, non è possibile selezionare un valore da un elenco a discesa di valori disponibili contenente valori di tipo Date o Time che includono millisecondi.

Scrittura di espressioni che convertono tipi di dati o estraggono parti di dati

Quando si combinano testo e campi del set di dati utilizzando l'operatore di concatenazione (&), Common Language Runtime (CLR) fornisce in genere formati predefiniti. Per convertire in modo esplicito un parametro o un campo del set di dati in un tipo di dati specifico, è necessario utilizzare un metodo CLR o una funzione della libreria di runtime di Visual Basic.

Nella tabella seguente sono riportati alcuni esempi di conversione dei tipi di dati.

Tipo di conversione

Esempio

Da DateTime a String

=CStr(Fields!Date.Value)

Da String a DateTime

=DateTime.Parse(Fields!DateTimeinStringFormat.Value)

Da String a DateTimeOffset

=DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value)

Estrazione dell'anno

=Year(Fields!TimeinStringFormat.Value)

-- or --

=Year(Fields!TimeinDateTimeFormat.Value)

Da Boolean a Integer

=CInt(Parameters!BooleanField.Value)

-1 è True e 0 è False.

Da Boolean a Integer

=System.Convert.ToInt32(Fields!BooleanFormat.Value)

1 è True e 0 è False.

Solo la parte DateTime di un valore DateTimeOffset

=Fields!MyDatetimeOffset.Value.DateTime

Solo la parte Offset di un valore DateTimeOffset

=Fields!MyDatetimeOffset.Value.Offset

È anche possibile utilizzare la funzione Format per controllare il formato di visualizzazione del valore. Per ulteriori informazioni, vedere Funzioni (Visual Basic).

Esempi avanzati

Quando ci si connette a un'origine dati con un provider di dati che non fornisce supporto per la conversione per tutti i tipi di dati dell'origine dati, il tipo di dati predefinito per i tipi di origine dati non supportati è String. Negli esempi seguenti sono fornite le soluzioni per i tipi di dati specifici restituiti come stringa.

Concatenazione di una stringa e di un tipo di dati DateTimeOffset CLR

Per la maggior parte dei tipi di dati, CLR fornisce conversioni predefinite in modo da consentire la concatenazione di valori con tipi di dati differenti in una stringa mediante l'operatore &. Nell'espressione seguente, ad esempio, viene concatenato il testo "The date and time are: " con il campo del set di dati StartDate, che rappresenta un valore System..::..DateTime: ="The date and time are: " & Fields!StartDate.Value.

Per alcuni tipi di dati, potrebbe essere necessario includere la funzione ToString. Nell'espressione seguente, ad esempio, è riportato lo stesso esempio con il tipo di dati CLR System..::..DateTimeOffset che include la data, l'ora e una differenza di fuso orario rispetto al fuso orario UTC: ="The time is: " & Fields!StartDate.Value.ToString().

Conversione del tipo di dati String in un tipo di dati DateTime CLR

Se un'estensione per l'elaborazione dati non supporta tutti i tipi di dati definiti in un'origine dati, i dati possono essere recuperati come testo. Un valore del tipo di dati datetimeoffset(7) può essere, ad esempio, recuperato come dati di tipo String. A Perth, in Australia, il valore stringa per il 1 luglio 2008, alle 6:05:07.9999999 AM è simile al seguente:

2008-07-01 06:05:07.9999999 +08:00

In questo esempio viene mostrata la data (1 luglio 2008), seguita dall'ora espressa con una precisione di 7 cifre (06:05:07.9999999 AM), seguita da una differenza di fuso orario dall'ora UTC espressa in ore e minuti (più 8 ore e 0 minuti). Per l'esempio seguente, questo valore è stato inserito in un campo String denominato MyDateTime.Value.

Per convertire questi dati in uno o più valori CLR, è possibile adottare una delle strategie seguenti:

  • In una casella di testo utilizzare un'espressione per estrarre parti della stringa. Ad esempio:

    • Nell'espressione seguente solo la parte relativa all'ora della differenza di fuso orario dall'ora UTC viene prima estratta e poi convertita in minuti: =CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60

      Il risultato è 480.

    • Nell'espressione seguente la stringa viene convertita in un valore di data e ora: =DateTime.Parse(Fields!MyDateTime.Value)

      Se la stringa MyDateTime.Value include una differenza UTC, la funzione DateTime.Parse regola in primo luogo l'ora in base alla differenza UTC: 7 AM, ora ottenuta sommando [+08:00] all'ora UTC 11 PM della sera precedente. La funzione DateTime.Parse applica quindi la differenza UTC del server di report locale e, se necessario, regola nuovamente l'ora in base all'ora legale. Ad esempio, a Redmond, Washington, la differenza tra ora locale e ora legale è [-07:00] o 7 ore prima delle 11 PM. Il risultato è il valore DateTime seguente: 2007-07-06 04:07:07 PM (6 luglio 2007 alle 4:07 PM).

      Per ulteriori informazioni sulla conversione delle stringhe in tipi di dati DateTime, vedere Analisi delle stringhe relative a data e ora e Formattazione di data e ora per specifiche impostazioni cultura su MSDN.

  • Aggiungere un nuovo campo calcolato al set di dati del report che utilizza un'espressione per estrarre parti della stringa. Per ulteriori informazioni, vedere Procedura: Aggiunta, modifica o eliminazione di un campo nel riquadro Dati report.

  • Modificare la query del set di dati del report per utilizzare le funzioni Transact-SQL per estrarre i valori di data e ora indipendentemente in modo da creare colonne separate. Nell'esempio seguente viene illustrato come utilizzare la funzione DatePart per aggiungere una colonna per l'anno e una colonna per il fuso orario UTC convertito in minuti:

    SELECT

    MyDateTime,

    DATEPART(year, MyDateTime) AS Year,

    DATEPART(tz, MyDateTime) AS OffsetinMinutes

    FROM MyDates

    Il set di risultati contiene tre colonne. La prima colonna indica la data e l'ora, la seconda indica l'anno e la terza indica la differenza UTC espressa in minuti. Nella riga seguente sono riportati dati di esempio:

    2008-07-01 06:05:07 2008 480

Per ulteriori informazioni sui tipi di database SQL Server, vedere Tipi di dati (Motore di database) e Funzioni e tipi di dati di data e ora (Transact-SQL).