Tipi di dati nelle espressioni (Generatore report e SSRS)Data Types in Expressions (Report Builder and SSRS)

I tipi di dati rappresentano tipologie di dati diversi che possono essere archiviati ed elaborati in modo efficiente.Data types represent different kinds of data so that it can be stored and processed efficiently. I tipi di dati standard includono testo, noto anche come stringhe, numeri con e senza posizioni decimali, date e ore e immagini.Typical data types include text (also known as strings), numbers with and without decimal places, dates and times, and images. I valori in un report devono essere costituiti da un tipo di dati RDL (Report Definition Language).Values in a report must be an Report Definition Language (RDL) data type. È possibile formattare un valore in base alle proprie preferenze quando si lo visualizza in un report.You can format a value according to your preference when you display it in a report. Un campo che rappresenta la valuta, ad esempio, viene archiviato nella definizione del report come numero a virgola mobile, ma può essere visualizzato in diversi formati a seconda della proprietà di formattazione scelta.For example, a field that represents currency is stored in the report definition as a floating point number, but can be displayed in a variety of formats depending on the format property you choose.

Per altre informazioni sui formati di visualizzazione, vedere Formattazione degli elementi del report (Generatore report e SSRS).For more information about display formats, see Formatting Report Items (Report Builder and SSRS).

Nota

È possibile creare e modificare file di definizioni report impaginati (con estensione rdl) in Generatore report e in Progettazione report di SQL Server Data Tools.You can create and modify paginated report definition (.rdl) files in Report Builder and in Report Designer in SQL Server Data Tools. Ogni ambiente di creazione offre modalità differenti per creare, aprire e salvare report ed elementi correlati.Each authoring environment provides different ways to create, open, and save reports and related items.

Tipi di dati RDL (Report Definition Language) e tipi di dati CLR (Common Language Runtime)Report Definition Language (RDL) Data Types and Common Language Runtime (CLR) Data Types

I valori specificati in un file RDL devono essere un tipo di dati RDL.Values that are specified in an RDL file must be an RDL data type. Quando il report viene compilato ed elaborato, i tipi di dati RDL vengono convertiti in tipi di dati CLR.When the report is compiled and processed, RDL data types are converted to CLR data types. Nella tabella seguente viene visualizzata la conversione, contrassegnata come valore predefinito:The following table displays the conversion, which is marked Default:

Tipo RDLRDL Type Tipi CLRCLR Types
StringString Valore predefinito: StringDefault: String

Chart, GUID, TimespanChart, GUID, Timespan
BooleanBoolean Valore predefinito: BooleanDefault: Boolean
Valore interoInteger Valore predefinito: Int64Default: Int64

Int16, Int32, Uint16, Uint64, Byte, SbyteInt16, Int32, Uint16, Uint64, Byte, Sbyte
DateTimeDateTime Valore predefinito: DateTimeDefault: DateTime

DateTimeOffsetDateTimeOffset
FloatFloat Valore predefinito: DoubleDefault: Double

Single, DecimalSingle, Decimal
BinarioBinary Valore predefinito: Byte []Default: Byte[]
VariantVariant Uno qualsiasi tra quelli riportati in precedenza eccetto Byte []Any of the above except Byte[]
VariantArrayVariantArray Matrice di VariantArray of Variant
SerializableSerializable Variant oppure tipi contrassegnati con Serializable o che consentono di implementare ISerializable.Variant or types marked with Serializable or that implement ISerializable.

Informazioni sui tipi di dati e scrittura di espressioniUnderstanding Data Types and Writing Expressions

È importante comprendere 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.It is important to understand data types when you write expressions to compare or combine values, for example, when you define group or filter expressions, or calculate aggregates. Confronti e calcoli sono validi solo tra elementi dello stesso tipo di dati.Comparisons and calculations are valid only between items of the same data type. Se i tipi di dati non corrispondono, è necessario convertire esplicitamente il tipo di dati nell'elemento del report utilizzando un'espressione.If the data types do not match, you must explicitly convert the data type in the report item by using an expression.

Nell'elenco seguente sono descritti i casi in cui potrebbe essere necessario convertire i dati in un altro tipo di dati:The following list describes cases when you may need to convert data to a different data type:

  • 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.Comparing the value of a report parameter of one data type to a dataset field of a different data type.

  • Scrittura di espressioni di filtro che confrontano valori di tipi di dati differenti.Writing filter expressions that compare values of different data types.

  • Scrittura di espressioni di ordinamento che combinano campi di tipi di dati diversi.Writing sort expressions that combine fields of different data types.

  • Scrittura di espressioni di raggruppamento che combinano campi di tipi di dati diversi.Writing group expressions that combine fields of different data types.

  • Conversione da un tipo di dati a un altro tipo di dati di un valore recuperato dall'origine dati.Converting a value retrieved from the data source from one data type to a different data type.

Determinazione del tipo di dati del reportDetermining the Data Type of Report Data

Per determinare il tipo di dati di un elemento del report è possibile scrivere un'espressione.To determine the data type of a report item, you can write an expression that returns its data type. Ad esempio, per visualizzare il tipo di dati del campo MyField, aggiungere l'espressione =Fields!MyField.Value.GetType().ToString()a una cella della tabella.For example, to show the data type for the field MyField, add the following expression to a table cell: =Fields!MyField.Value.GetType().ToString(). Il risultato indica il tipo di dati CLR usato per rappresentare MyField, ad esempio System.String o System.DateTime.The result displays the CLR data type used to represent MyField, for example, System.String or System.DateTime.

Conversione dei campi del set di dati in un altro tipo di datiConverting Dataset Fields to a Different Data Type

È inoltre possibile convertire i campi del set di dati prima di utilizzarli in un report.You can also convert dataset fields before you use them in a report. Nell'elenco seguente vengono descritte le modalità di conversione di un campo del set di dati esistente:The following list describes ways that you can convert an existing dataset field:

  • Modificare la query del set di dati in modo da aggiungere un nuovo campo di query con i dati convertiti.Modify the dataset query to add a new query field with the converted data. Per le origini dati relazionali o multidimensionali, per eseguire la conversione vengono utilizzate le risorse dell'origine dati.For relational or multidimensional data sources, this uses data source resources to perform the conversion.

  • 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.Create a calculated field based on an existing report dataset field by writing an expression that converts all the data in one result set column to a new column with a different data type. 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).For example, the following expression converts the field Year from an integer value to a string value: =CStr(Fields!Year.Value). Per altre informazioni, vedere Aggiungere, modificare e aggiornare i campi nel riquadro dei dati del report (Generatore report e SSRS).For more information, see Add, Edit, Refresh Fields in the Report Data Pane (Report Builder and SSRS).

  • Controllare se l'estensione per l'elaborazione dati in uso include metadati per il recupero dei dati preformattati.Check whether the data processing extension you are using includes metadata for retrieving preformatted data. Una query MDX di SQL ServerSQL Server Analysis ServicesAnalysis Services include ad esempio una proprietà estesa FORMATTED_VALUE per i valori del cubo già formattati durante l'elaborazione del cubo.For example, a SQL ServerSQL Server Analysis ServicesAnalysis Services MDX query includes a FORMATTED_VALUE extended property for cube values that have already been formatted when processing the cube. Per altre informazioni, vedere Proprietà di campo estese per un database di Analysis Services (SSRS).For more information, see Extended Field Properties for an Analysis Services Database (SSRS).

Informazioni sui tipi di dati dei parametriUnderstanding Parameter Data Types

I parametri del report devono essere di uno dei cinque tipi di dati seguenti: Boolean, DateTime, Integer, Float o Text (anche noto come String).Report parameters must be one of five data types: Boolean, DateTime, Integer, Float, or Text (also known as 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.When a dataset query includes query parameters, report parameters are automatically created and linked to the query parameters. Il tipo di dati predefinito per un parametro di report è String.The default data type for a report parameter is 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 .To change the default data type of a report parameter, select the correct value from the Data type drop-down list on the General page of the Report Parameter Properties dialog box.

Nota

I parametri di report di tipo DateTime non supportano i millisecondi.Report parameters that are DateTime data types do not support milliseconds. 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.Although you can create a parameter based on values that include milliseconds, you cannot select a value from an available values drop-down list that includes Date or Time values that include milliseconds.

Scrittura di espressioni che convertono tipi di dati o estraggono parti di datiWriting Expressions that Convert Data Types or Extract Parts of Data

Quando si combinano testo e campi del set di dati utilizzando l'operatore di concatenazione (&), Common Language Runtime (CLR) fornisce in genere formati predefiniti.When you combine text and dataset fields using the concatenation operator (&), the common language runtime (CLR) generally provides default formats. 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.When you need to explicitly convert a dataset field or parameter to a specific data type, you must use a CLR method or a Visual Basic runtime library function to convert the data.

Nella tabella seguente sono riportati alcuni esempi di conversione dei tipi di dati.The following table shows examples of converting data types.

Tipo di conversioneType of conversion EsempioExample
Da DateTime a StringDateTime to String =CStr(Fields!Date.Value)
Da String a DateTimeString to DateTime =DateTime.Parse(Fields!DateTimeinStringFormat.Value)
Da String a DateTimeOffsetString to DateTimeOffset =DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value)
Estrazione dell'annoExtracting the Year =Year(Fields!TimeinStringFormat.Value)

-- or --

=Year(Fields!TimeinDateTimeFormat.Value)
Da Boolean a IntegerBoolean to Integer =CInt(Parameters!BooleanField.Value)

- 1 è True e 0 è False.-1 is True and 0 is False.
Da Boolean a IntegerBoolean to Integer =System.Convert.ToInt32(Fields!BooleanFormat.Value)

1 è True e 0 è False.1 is True and 0 is False.
Solo la parte DateTime di un valore DateTimeOffsetJust the DateTime part of a DateTimeOffset value =Fields!MyDatetimeOffset.Value.DateTime
Solo la parte Offset di un valore DateTimeOffsetJust the Offset part of a DateTimeOffset value =Fields!MyDatetimeOffset.Value.Offset

È inoltre possibile utilizzare la funzione Format per controllare il formato di visualizzazione del valore.You can also use the Format function to control the display format for value. Per altre informazioni, vedere Funzioni (Visual Basic).For more information, see Functions (Visual Basic).

Esempi avanzatiAdvanced Examples

Quando ci si connette a un'origine dati con un provider di dati che non fornisce il supporto di conversione per tutti i tipi di dati dell'origine dati, il tipo di dati predefinito per i tipi di origine dati non supportati corrisponde a String.When you connect to a data source with a data provider that does not provide conversion support for all the data types on the data source, the default data type for unsupported data source types is String. Negli esempi seguenti sono fornite le soluzioni per i tipi di dati specifici restituiti come stringa.The following examples provide solutions to specific data types that are returned as a string.

Concatenazione di una stringa e di un tipo di dati DateTimeOffset CLRConcatenating a String and a CLR DateTimeOffset Data Type

Per la maggior parte dei tipi di dati, CLR fornisce conversioni predefinite in modo da consentire la concatenazione di valori con tipi di dati diversi in una stringa mediante l'operatore &.For most data types, the CLR provides default conversions so that you can concatenate values that are different data types into one string by using the & operator. 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 DateTime: ="The date and time are: " & Fields!StartDate.Value.For example, the following expression concatenates the text "The date and time are: " with a dataset field StartDate, which is a DateTime value: ="The date and time are: " & Fields!StartDate.Value.

Per alcuni tipi di dati, potrebbe essere necessario includere la funzione ToString.For some data types, you may need to include the ToString function. Ad esempio, l'espressione seguente viene illustrato lo stesso esempio con il tipo di dati CLR DateTimeOffset, che includono la data e l'ora di un fuso orario offset rispetto al fuso orario UTC: ="The time is: " & Fields!StartDate.Value.ToString().For example, the following expression shows the same example using the CLR data type DateTimeOffset, which include the date, the time, and a time-zone offset relative to the UTC time zone: ="The time is: " & Fields!StartDate.Value.ToString().

Conversione del tipo di dati String in un tipo di dati DateTime CLRConverting a String Data Type to a CLR DateTime Data Type

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.If a data processing extension does not support all data types defined on a data source, the data may be retrieved as text. Un valore del tipo di dati datetimeoffset(7) può essere, ad esempio, recuperato come dati di tipo String.For example, a datetimeoffset(7) data type value may be retrieved as a String data type. A Perth, in Australia, il valore stringa per il 1 luglio 2008, alle 6:05:07.9999999 AMIn Perth, Australia, the string value for July 1, 2008, at 6:05:07.9999999 A.M. è simile al seguente:would resemble:

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).This example shows the date (July 1, 2008), followed by the time to a 7-digit precision (6:05:07.9999999 A.M.), followed by a UTC time zone offset in hours and minutes (plus 8 hours, 0 minutes). Per l'esempio seguente, questo valore è stato inserito in un campo String denominato MyDateTime.Value.For the following examples, this value has been placed in a String field called MyDateTime.Value.

Per convertire questi dati in uno o più valori CLR, è possibile adottare una delle strategie seguenti:You can use one of the following strategies to convert this data to one or more CLR values:

  • In una casella di testo utilizzare un'espressione per estrarre parti della stringa.In a text box, use an expression to extract parts of the string. Esempio:For example:

    • 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)) * 60The following expression extracts just the hour part of the UTC time zone offset and converts it to minutes: =CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60

      Il risultato è 480.The result is 480.

    • Nell'espressione seguente la stringa viene convertita in un valore di data e ora: =DateTime.Parse(Fields!MyDateTime.Value)The following expression converts the string to a date and time value: =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,If the MyDateTime.Value string has a UTC offset, the DateTime.Parse function first adjusts for the UTC offset (7 A.M. - [+08:00] con l'ora UTC 11 PM.- [+08:00] to the UTC time of 11 P.M. della notte precedente).the night before). 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.The DateTime.Parse function then applies the local report server UTC offset and, if necessary, adjusts the time again for Daylight Saving Time. Ad esempio, a Redmond, Washington, la differenza tra ora locale e ora legale è [-07:00], ovvero 7 ore prima delle 23.00.For example, in Redmond, Washington, the local time offset adjusted for Daylight Saving Time is [-07:00], or 7 hours earlier than 11 PM. Il risultato è il valore DateTime seguente: 2007-07-06 04:07:07 PM (6 luglio 2007 alle 16.07).The result is the following DateTime value: 2007-07-06 04:07:07 PM (July 6, 2007 at 4:07 P.M).

    Per altre informazioni sulla conversione di stringhe in tipi di dati DateTime , vedere Analisi delle stringhe di data e ora, Formattazione di data e ora per impostazioni cultura specifichee Scelta tra DateTime, DateTimeOffset e TimeZoneInfo in MSDN.For more information about converting strings to DateTime data types, see Parsing Date and Time Strings, Formatting Date and Time for a Specific Culture, and Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo on MSDN.

  • Aggiungere un nuovo campo calcolato al set di dati del report che utilizza un'espressione per estrarre parti della stringa.Add a new calculated field to the report dataset that uses an expression to extract parts of the string. Per altre informazioni, vedere Aggiungere, modificare e aggiornare i campi nel riquadro dei dati del report (Generatore report e SSRS).For more information, see Add, Edit, Refresh Fields in the Report Data Pane (Report Builder and SSRS).

  • Modificare la query del set di dati del report per utilizzare le funzioni Transact-SQLTransact-SQL per estrarre i valori di data e ora indipendentemente in modo da creare colonne separate.Change the report dataset query to use Transact-SQLTransact-SQL functions to extract the date and time values independently to create separate columns. L'esempio seguente illustra come usare la funzione DatePart per aggiungere una colonna per l'anno e una colonna per il fuso orario UTC convertito in minuti:The following example shows how to use the function DatePart to add a column for the year and a column for the UTC time zone converted to minutes:

    SELECT

    MyDateTime,

    DATEPART(year, MyDateTime) AS Year,

    DATEPART(tz, MyDateTime) AS OffsetinMinutes

    FROM MyDates

    Il set di risultati contiene tre colonne.The result set has three columns. La prima colonna indica la data e l'ora, la seconda indica l'anno e la terza indica la differenza UTC espressa in minuti.The first column is the date and time, the second column is the year, and the third column is the UTC offset in minutes. Nella riga seguente sono riportati dati di esempio:The following row shows example data:

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

    Per altre informazioni sui tipi di database di SQL ServerSQL Server, vedere Tipi di dati (Transact-SQL) e Funzioni e tipi di dati di data e ora (Transact-SQL) nella documentazione online di SQL Server.For more information about SQL ServerSQL Server database data types, see Data Types (Transact-SQL), and Date and Time Data Types and Functions (Transact-SQL) in SQL Server Books Online.

    Per altre informazioni sui tipi di dati di SQL ServerSQL Server Analysis ServicesAnalysis Services, vedere Tipi di dati in Analysis Services nella documentazione online di SQL Server.For more information about SQL ServerSQL Server Analysis ServicesAnalysis Services data types, see Data Types in Analysis Services in SQL Server Books Online.

Vedere ancheSee Also

Formattazione degli elementi del report (Generatore report e SSRS)Formatting Report Items (Report Builder and SSRS)