Tipi di dati in Power BI DesktopData types in Power BI Desktop

Questo articolo descrive i tipi di dati supportati in Power BI Desktop e Data Analysis Expressions (DAX).This article describes data types supported in Power BI Desktop and Data Analysis Expressions (DAX).

Quando si caricano i dati in Power BI Desktop, verrà eseguito un tentativo di conversione del tipo di dati della colonna di origine in un tipo che supporta meglio e in modo più efficiente l'archiviazione, i calcoli e la visualizzazione dei dati.When you load data into Power BI Desktop, it will attempt to convert the data type of the source column into a data type that better supports more efficient storage, calculations, and data visualization. Se ad esempio una colonna di valori importata da Excel non contiene valori frazionari, Power BI Desktop convertirà l'intera colonna di dati nel tipo di dati Numero intero, che è più appropriato per l'archiviazione di numeri interi.For example, if a column of values you import from Excel has no fractional values, Power BI Desktop will convert the entire column of data to a Whole Number data type, which is better suited for storing integers.

Questo aspetto è importante perché alcune funzioni DAX hanno speciali requisiti per i tipi di dati.This is important because some DAX functions have special data type requirements. Sebbene in molti casi DAX converte implicitamente i dati in automatico, ci sono altri casi in cui tale conversione non viene eseguita.While in many cases DAX will implicitly convert a data type for you, there are some cases where it will not. Ad esempio, se una funzione DAX richiede il tipo di dati Data e il tipo di dati della colonna è Testo, la funzione DAX non funzionerà correttamente.For instance, if a DAX function requires a Date data type and the data type for your column is Text, the DAX function will not work correctly. Per questo motivo è importante ma anche utile usare il tipo di dati corretto per una colonna.So, it’s both important and useful to get the correct data type for a column. Le conversioni implicite vengono descritte più avanti in questo articolo.Implicit conversions are described later in this article.

Determinare e specificare il tipo di dati di una colonnaDetermine and specify a column’s data type

In Power BI Desktop è possibile determinare e specificare il tipo di dati di una colonna nell'Editor di query oppure nella Vista dati o Visualizzazione report.In Power BI Desktop, you can determine and specify a column’s data type in the Query Editor, or in Data View or Report View:

Tipi di dati nell'Editor di queryData types in Query Editor

Tipi di dati nella Vista dati o Visualizzazione reportData types in Data View or Report View

L'elenco a discesa Tipo di dati nell'Editor di query contiene due tipi di dati che attualmente non sono presenti nella Vista dati o nella Visualizzazione report: Data/Ora/Fuso orario e Durata.The Data Type drop down in Query Editor has two data types not currently present in Data or Report View: Date/Time/Timezone and Duration. Quando una colonna con questi tipi di dati viene caricata nel modello e visualizzata nella Vista dati o nella Visualizzazione report, la colonna con il tipo di dati Data/Ora/Fuso orario viene convertita nel tipo Data/Ora mentre la colonna con il tipo di dati Durata viene convertita nel tipo Numero decimale.When a column with these data types are loaded into the model and viewed in Data or Report view, a column with a Date/Time/Timezone data type will be converted into a Date/Time, and a column with a Duration data type is converted into a Decimal Number.

Tipi numericiNumber types

Power BI Desktop supporta tre tipi numerici:Power BI Desktop supports three number types:

Numero decimale : rappresenta un numero a virgola mobile a 64 bit (8 byte).Decimal Number – Represents a 64 bit (eight-byte) floating point number. È il tipo numerico più comune e corrisponde ai numeri come generalmente si immaginano.It’s the most common number type and corresponds to numbers as you usually think of them. Anche se concepito per gestire numeri con valori frazionari, questo tipo gestisce anche numeri interi.Although designed to handle numbers with fractional values, it also handles whole numbers. Il tipo Numero decimale può gestire valori negativi da -1,79E +308 a -2,23E -308, 0 e valori positivi da 2,23E -308 a 1,79E + 308.The Decimal Number type can handle negative values from -1.79E +308 through -2.23E -308, 0, and positive values from 2.23E -308 through 1.79E + 308. Ad esempio, 34, 34,01 e 34,000367063 sono numeri decimali validi.For example, numbers like 34, 34.01, and 34.000367063 are valid decimal numbers. Il valore più grande che può essere rappresentato nel tipo Numero decimale può contenere un massimo di 15 cifre.The largest value that can be represented in a Decimal Number type is 15 digits long. Il separatore decimale può essere inserito in qualsiasi punto del numero.The decimal separator can occur anywhere in the number. Il tipo Numero decimale corrisponde al modo in cui Excel archivia i relativi numeri.The Decimal Number type corresponds to how Excel stores its numbers.

Numero decimale fisso : contiene una posizione fissa per il separatore decimale.Fixed Decimal Number – Has a fixed location for the decimal separator. Il separatore decimale ha sempre quattro cifre a destra e consente 19 cifre significative.The decimal separator always has four digits to its right and allows for 19 digits of significance. Il valore più grande che può rappresentare è 922.337.203.685.477,5807 (positivo o negativo).The largest value it can represent is 922,337,203,685,477.5807 (positive or negative). Il tipo Numero decimale fisso è utile nei casi in cui l'arrotondamento potrebbe introdurre errori.The Fixed Decimal Number type is useful in cases where rounding might introduce errors. Quando si lavora con molti numeri che hanno piccoli valori frazionari, talvolta questi possono accumularsi forzando un numero a non essere propriamente corretto.When you work with many numbers that have small fractional values they can sometimes accumulate and force a number to be just slightly off. Poiché i valori dopo le quattro cifre a destra del separatore decimale vengono troncati, il tipo Numero decimale fisso può consentire di evitare questi tipi di errori.Since the values past the four digits to the right of decimal separator are truncated, the Fixed Decimal type can help you avoid these kinds of errors. Se si ha familiarità con SQL Server, questo tipo di dati corrisponde al tipo Decimale di SQL Server (19,4) o al tipo di dati Valuta in Power Pivot.If you’re familiar with SQL Server, this data type corresponds to SQL Server’s Decimal (19,4), or the Currency Data type in Power Pivot.

Numero intero : rappresenta un valore intero a 64 bit (8 byte).Whole Number – Represents a 64 bit (eight-byte) integer value. Poiché si tratta di un numero intero, non ci sono cifre a destra della posizione decimale.Because it’s an integer, it has no digits to the right of the decimal place. Consente 19 cifre e ammette numeri interi positivi o negativi compresi tra -9.223.372.036.854.775.808 (-2^63) e 9.223.372.036.854.775.807 (2^63-1).It allows for 19 digits; positive or negative whole numbers between -9,223,372,036,854,775,808 (-2^63) and 9,223,372,036,854,775,807 (2^63-1). Può rappresentare il numero più grande possibile dei vari tipi di dati numerici.It can represent the largest possible number of the various numeric data types. Analogamente al tipo Numero decimale fisso, il tipo Numero intero può essere utile nei casi in cui sia necessario controllare l'arrotondamento.As with the Fixed Decimal type, the Whole Number type can be useful in cases where you need to control rounding.

Tipi Data/OraDate/time types

Power BI Desktop supporta cinque tipi di dati Data/ora in Visualizzazione query e tre nel modello e in Visualizzazione report.Power BI Desktop supports five Date/Time data types in Query View and three in the Report View and model. I tipi Data/Ora/Fuso orario e Durata vengono convertiti durante il caricamento nel modello.Both Date/Time/Timezone and Duration are converted during load into the model.

Data/Ora: rappresenta un valore di data e di ora.Date/Time – Represents both a date and time value. Nel sistema il valore Data/Ora viene archiviato come tipo Numero decimale,Underneath the covers, the Date/Time value is stored as a Decimal Number Type. per cui in effetti è possibile eseguire una conversione tra i due tipi.So you can actually convert between the two. La parte relativa all'ora di una data viene archiviata come frazione in multipli interi di 1/300 secondi (3,33 ms).The time portion of a date is stored as a fraction to whole multiples of 1/300 seconds (3.33ms). Sono supportate le date comprese tra gli anni 1900 e 9999.Dates between years 1900 and 9999 are supported.

Data : rappresenta solo una data (senza la parte dell'ora).Date – Represents just a Date (no time portion). Una data quando viene convertita nel modello corrisponde al valore Data/Ora con il valore frazionario uguale a zero.When converted into the model, a Date is the same as a Date/Time value with zero for the fractional value.

Ora : rappresenta solo l'ora (senza la parte della data).Time – Represents just Time (no Date portion). Un valore Ora quando viene convertito nel modello corrisponde al valore Data/Ora senza cifre a sinistra della posizione decimale.When converted into the model, a Time value is the same as a Date/Time value with no digits to the left of the decimal place.

Data/Ora/Fuso orario : rappresenta la data/ora in formato UTC.Date/Time/Timezone – Represents a UTC Date/Time. Attualmente viene convertito in Data/Ora quando viene caricato nel modello.Currently, it’s converted into Date/Time when loaded into the model.

Durata : rappresenta la quantità di tempo.Duration – Represents a length of time. Viene convertito nel tipo Numero decimale quando viene caricato nel modello.It’s converted into a Decimal Number Type when loaded into the model. Analogamente al tipo Numero decimale, può essere aggiunto o sottratto da un campo Data/Ora con risultati corretti.As a Decimal Number type it can be added or subtracted from a Date/Time field with correct results. Può inoltre essere facilmente usato nelle visualizzazioni che mostrano un ordine di grandezza.As a Decimal Number type, you can easily use it in visualizations that show magnitude.

Tipo testoText type

Testo : stringa di dati di tipo carattere Unicode.Text - A Unicode character data string. Può trattatasi di stringhe, numeri o date rappresentati in un formato di testo.Can be strings, numbers or dates represented in a text format. La lunghezza massima della stringa è 268.435.456 caratteri Unicode (256 Mega caratteri) o 536.870.912 byte.Maximum string length is 268,435,456 Unicode characters (256 mega characters) or 536,870,912 bytes.

Tipo True/FalseTrue/false type

True/False : valore booleano True o False.True/False – A Boolean value of either a True or False.

Tipo spazi vuoti/valori NullBlanks/nulls type

Vuoto : è un tipo di dati in DAX che rappresenta e sostituisce i valori Null di SQL.Blank - Is a data type in DAX that represents and replaces SQL nulls. È possibile creare uno spazio vuoto usando la funzione BLANK, nonché verificare la presenza di spazi vuoti usando la funzione logica ISBLANK.You can create a blank by using the BLANK function, and test for blanks by using the ISBLANK logical function.

Tipo di dati tabellaTable data type

DAX usa il tipo di dati tabella in molte funzioni, ad esempio aggregazioni e calcoli della funzionalità di Business Intelligence per le gerarchie temporali.DAX uses a table data type in many functions, such as aggregations and time intelligence calculations. Alcune funzioni richiedono un riferimento a una tabella, mentre altre restituiscono una tabella che può quindi essere usata come input per altre funzioni.Some functions require a reference to a table; other functions return a table that can then be used as input to other functions. In alcune funzioni che richiedono una tabella come input è possibile specificare un'espressione che restituisce una tabella. Per alcune funzioni è necessario un riferimento a una tabella di base.In some functions that require a table as input, you can specify an expression that evaluates to a table; for some functions, a reference to a base table is required. Per informazioni sui requisiti di funzioni specifiche, vedere Riferimento alle funzioni DAX.For information about the requirements of specific functions, see DAX Function Reference.

Conversione implicita ed esplicita dei tipi di dati nelle formule DAXImplicit and explicit data type conversion in DAX formulas

Ogni funzione DAX prevede requisiti specifici relativi ai tipi di dati usati come input e output.Each DAX function has specific requirements as to the types of data that are used as inputs and outputs. Alcune funzioni, ad esempio, richiedono numeri interi per determinati argomenti e date per altri. Altre funzioni richiedono testo o tabelle.For example, some functions require integers for some arguments and dates for others; other functions require text or tables.

Se i dati nella colonna specificata come argomento non sono compatibili con il tipo di dati richiesto dalla funzione, DAX in molti casi restituirà un errore.If the data in the column you specify as an argument is incompatible with the data type required by the function, DAX in many cases will return an error. Quando possibile, tuttavia, DAX proverà a eseguire una conversione implicita dei dati nel tipo di dati richiesto.However, wherever possible DAX will attempt to implicitly convert the data to the required data type. ad esempio:For example:

  • Se si digita una data come stringa, DAX analizzerà la stringa e proverà a eseguirne il cast in uno dei formati di data e ora di Windows.You can type a date as a string, and DAX will parse the string and attempt to cast it as one of the Windows date and time formats.
  • È possibile aggiungere TRUE + 1 e ottenere il risultato 2, in quanto TRUE viene convertito in modo implicito nel numero 1 e viene eseguita l'operazione 1+1.You can add TRUE + 1 and get the result 2, because TRUE is implicitly converted to the number 1 and the operation 1+1 is performed.
  • Se si aggiungono valori in due colonne e un valore è rappresentato come testo ("12"), mentre l'altro come numero (12), DAX converte la stringa in modo implicito in un numero e quindi esegue la somma per ottenere un risultato numerico.If you add values in two columns, and one value happens to be represented as text ("12") and the other as a number (12), DAX implicitly converts the string to a number and then does the addition for a numeric result. L'espressione seguente restituisce 44: = "22" + 22.The following expression returns 44: = "22" + 22.
  • Se si prova a concatenare due numeri, Excel li visualizzerà come stringhe e quindi li concatenerà.If you attempt to concatenate two numbers, Excel will present them as strings and then concatenate. L'espressione seguente restituisce "1234": = 12 & 34.The following expression returns "1234": = 12 & 34.

Tabella delle conversioni implicite dei datiTable of implicit data conversions

Il tipo di conversione eseguito è determinato dall'operatore, che esegue il cast dei valori necessari prima di eseguire l'operazione richiesta.The type of conversion that is performed is determined by the operator, which casts the values it requires before performing the requested operation. Queste tabelle elencano gli operatori e indicano la conversione eseguita per ogni tipo di dati nella colonna quando viene abbinato con il tipo di dati nella riga con cui avviene l'intersezione.These tables list the operators, and indicate the conversion that is performed on each data type in the column when it is paired with the data type in the intersecting row.

Nota

I tipi di dati di testo non sono inclusi in queste tabelle.Text data types are not included in these tables. Quando un numero viene rappresentato in un formato di testo, in alcuni casi PowerPivot proverà a determinare il tipo numerico e a rappresentarlo come numero.When a number is represented as in a text format, in some cases Power BI will attempt to determine the number type and represent it as a number.

Addizione (+)Addition (+)

Operatore (+)Operator(+) INTEGERINTEGER CURRENCYCURRENCY REALREAL Data/OraDate/time
INTEGERINTEGER INTEGERINTEGER CURRENCYCURRENCY REALREAL Data/OraDate/time
CURRENCYCURRENCY CURRENCYCURRENCY CURRENCYCURRENCY REALREAL Data/OraDate/time
REALREAL REALREAL REALREAL REALREAL Data/OraDate/time
Data/OraDate/time Data/OraDate/time Data/OraDate/time Data/OraDate/time Data/OraDate/time

Se, ad esempio, in un'operazione di addizione viene usato un numero reale in combinazione con dati di valuta, entrambi i valori vengono convertiti nel tipo REAL e il risultato viene restituito come tipo REAL.For example, if a real number is used in an addition operation in combination with currency data, both values are converted to REAL, and the result is returned as REAL.

Sottrazione (-)Subtraction (-)

Nella tabella seguente l'intestazione di riga rappresenta il minuendo (lato sinistro) mentre l'intestazione di colonna il sottraendo (lato destro).In the following table the row header is the minuend (left side) and the column header is the subtrahend (right side).

Operatore (-)Operator(-) INTEGERINTEGER CURRENCYCURRENCY REALREAL Data/OraDate/time
INTEGERINTEGER INTEGERINTEGER CURRENCYCURRENCY REALREAL REALREAL
CURRENCYCURRENCY CURRENCYCURRENCY CURRENCYCURRENCY REALREAL REALREAL
REALREAL REALREAL REALREAL REALREAL REALREAL
Data/OraDate/time Data/OraDate/time Data/OraDate/time Data/OraDate/time Data/OraDate/time

Se, ad esempio, in un'operazione di sottrazione viene usata una data con qualsiasi altro tipo di dati, entrambi i valori vengono convertiti in date e anche il valore restituito è una data.For example, if a date is used in a subtraction operation with any other data type, both values are converted to dates, and the return value is also a date.

Nota

I modelli di dati supportano anche l'operatore unario, - (segno negativo), ma questo operatore non modifica il tipo di dati dell'operando.Data models also support the unary operator, - (negative), but this operator does not change the data type of the operand.

Moltiplicazione(*)Multiplication(*)

Operatore()Operator() INTEGERINTEGER CURRENCYCURRENCY REALREAL Data/OraDate/time
INTEGERINTEGER INTEGERINTEGER CURRENCYCURRENCY REALREAL INTEGERINTEGER
CURRENCYCURRENCY CURRENCYCURRENCY REALREAL CURRENCYCURRENCY CURRENCYCURRENCY
REALREAL REALREAL CURRENCYCURRENCY REALREAL REALREAL

Se, ad esempio, un numero intero viene combinato con un numero reale in un'operazione di moltiplicazione, entrambi i numeri vengono convertiti in numeri reali e anche il valore restituito è di tipo REAL.For example, if an integer is combined with a real number in a multiplication operation, both numbers are converted to real numbers, and the return value is also REAL.

Divisione (/)Division (/)

Nella tabella seguente l'intestazione di riga rappresenta il numeratore mentre l'intestazione di colonna il denominatore.In the following table, the row header is the numerator and the column header is the denominator.

Operatore (/) (Riga/Colonna)Operator(/) (Row/Column) INTEGERINTEGER CURRENCYCURRENCY REALREAL Data/OraDate/time
INTEGERINTEGER REALREAL CURRENCYCURRENCY REALREAL REALREAL
CURRENCYCURRENCY CURRENCYCURRENCY REALREAL CURRENCYCURRENCY REALREAL
REALREAL REALREAL REALREAL REALREAL REALREAL
Data/OraDate/time REALREAL REALREAL REALREAL REALREAL

Se, ad esempio, un numero intero viene combinato con un valore di valuta in un'operazione di divisione, entrambi i valori vengono convertiti in numeri reali e anche il risultato è un numero reale.For example, if an integer is combined with a currency value in a division operation, both values are converted to real numbers, and the result is also a real number.

Operatori di confrontoComparison operators

Nelle espressioni di confronto i valori booleani sono considerati superiori ai valori stringa e i valori stringa superiori ai valori numerici o di data/ora; i numeri e i valori di data/ora vengono considerati dello stesso rango.In comparison expressions, Boolean values are considered greater than string values and string values are considered greater than numeric or date/time values; numbers and date/time values are considered to have the same rank. Non viene eseguita alcuna conversione implicita per i valori booleani o stringa; BLANK o un valore spazio vuoto viene convertito in 0/""/false a seconda del tipo di dati dell'altro valore confrontato.No implicit conversions are performed for Boolean or string values; BLANK or a blank value is converted to 0/""/false depending on the data type of the other compared value.

Le espressioni DAX seguenti illustrano questo comportamento:The following DAX expressions illustrate this behavior:

=IF(FALSE()>"true","Expression is true", "Expression is false"), restituisce "Expression is true"=IF(FALSE()>"true","Expression is true", "Expression is false"), returns "Expression is true"

=IF("12">12,"Expression is true", "Expression is false"), restituisce "Expression is true".=IF("12">12,"Expression is true", "Expression is false"), returns "Expression is true".

=IF("12"=12,"Expression is true", "Expression is false"), restituisce "Expression is false"=IF("12"=12,"Expression is true", "Expression is false"), returns "Expression is false"

Le conversioni vengono eseguite in modo implicito per i tipi numerici o di data/ora come descritto nella tabella seguente:Conversions are performed implicitly for numeric or date/time types as described in the following table:

Operatore di confrontoComparison Operator INTEGERINTEGER CURRENCYCURRENCY REALREAL Data/OraDate/time
INTEGERINTEGER INTEGERINTEGER CURRENCYCURRENCY REALREAL REALREAL
CURRENCYCURRENCY CURRENCYCURRENCY CURRENCYCURRENCY REALREAL REALREAL
REALREAL REALREAL REALREAL REALREAL REALREAL
Data/OraDate/time REALREAL REALREAL REALREAL Data/OraDate/Time

Gestione di spazi vuoti, stringhe vuote e valori zeroHandling blanks, empty strings, and zero values

In DAX un valore Null, un valore spazio vuoto, una cella vuota o un valore mancante sono tutti rappresentati dallo stesso nuovo tipo di valore, cioè BLANK.In DAX, a null, blank value, empty cell, or a missing value are all represented by the same new value type, a BLANK. È anche possibile generare spazi vuoti usando la funzione BLANK, nonché verificare la presenza di spazi vuoti usando la funzione ISBLANK.You can also generate blanks by using the BLANK function, or test for blanks by using the ISBLANK function.

La modalità di gestione degli spazi vuoti nelle operazioni, ad esempio addizione o concatenazione, dipende dalla singola funzione.How blanks are handled in operations such as addition or concatenation depends on the individual function. La tabella seguente riepiloga le differenze tra le formule DAX e di Microsoft Excel per quanto riguarda la gestione degli spazi vuoti.The following table summarizes the differences between DAX and Microsoft Excel formulas, in the way that blanks are handled.

EspressioneExpression DAXDAX ExcelExcel
BLANK + BLANKBLANK + BLANK BLANKBLANK 0 (zero)0(zero)
BLANK + 5BLANK + 5 55 55
BLANK * 5BLANK * 5 BLANKBLANK 0 (zero)0(zero)
5/BLANK5/BLANK InfinitoInfinity ErroreError
0/BLANK0/BLANK NaNNaN ErroreError
BLANK/BLANKBLANK/BLANK BLANKBLANK ErroreError
FALSE OR BLANKFALSE OR BLANK FALSEFALSE FALSEFALSE
FALSE AND BLANKFALSE AND BLANK FALSEFALSE FALSEFALSE
TRUE OR BLANKTRUE OR BLANK TRUETRUE TRUETRUE
TRUE AND BLANKTRUE AND BLANK FALSEFALSE TRUETRUE
BLANK OR BLANKBLANK OR BLANK BLANKBLANK ErroreError
BLANK AND BLANKBLANK AND BLANK BLANKBLANK ErroreError