Tipos de datos

Nota

Microsoft Power Fx es el nuevo nombre del lenguaje de fórmulas para aplicaciones de lienzo. Estos artículos son un trabajo en progreso a medida que extraemos el idioma de las aplicaciones de lienzo, lo integramos con otros productos Microsoft Power Platform y ponerlo a disposición como código abierto. Empiece con Información general de Microsoft Power Fx para una introducción al idioma.

La información fluye a través de Microsoft Power Fx en valores pequeños y discretos, muy parecidos a las celdas de una hoja de cálculo. Por ejemplo, datos en un campo Cumpleaños y un campo Aniversario fluirían como un valor Fecha que incluye el año, el mes y el día. La aplicación sabe cómo formatear estos valores, restringir la entrada a lo que es apropiado para cada uno y compartir los valores con una base de datos. Los cumpleaños difieren de los aniversarios para las personas, pero el sistema los maneja exactamente de la misma manera. En este caso, Fecha es un ejemplo de un tipo de datos.

Este artículo proporciona detalles sobre los tipos de datos que admite Power Fx. Cuando se incorporan datos externos al idioma, cada tipo de datos de esa fuente se asigna a un tipo de datos para Power Fx.

Tipo de datos Descripción Ejemplos
Booleana Un valor verdadero o falso. Se puede usar directamente en If, Filter y otras funciones sin comparación. true
Color Una especificación de color, que incluye un canal alfa. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Divisa Un valor de divisa que se almacena en un número de punto flotante. Los valores de divisa son los mismos que los valores numéricos con opciones de formato de divisa. 123
4.56
Fecha Una fecha sin hora, en la zona horaria del usuario de la aplicación. Date( 2019, 5, 16 )
Fecha y hora Una fecha con hora, en la zona horaria del usuario de la aplicación. DateTimeValue("16 de mayo, 2019 1:23:09 PM")
GUID Un identificador único global (GUID). GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hipervínculo Una cadena de texto que contiene un hipervínculo. "https://powerapps.microsoft.com"
Imagen Un identificador universal de recursos (URI) cadena de texto a una imagen en .jpeg, .png, .svg, .gif u otro formato de imagen web común. MyImage agregado como recurso de aplicación
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Medios Una cadena de texto URI para una grabación de vídeo o audio. MyVideo agregado como recurso de aplicación
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Número Un número de punto flotante. 123
-4,567
8,903e121
Conjunto de opciones Una elección de un conjunto de opciones, respaldado por un número. Este tipo de datos combina una etiqueta de texto localizable con un valor numérico. La etiqueta aparece en la aplicación y el valor numérico se almacena y se utiliza para realizar comparaciones. ThisItem.OrderStatus
Registro Un registro de valores de datos. Este tipo de datos compuesto contiene instancias de otros tipos de datos que se enumeran en este tema. Más información: Trabajar con tablas. { Empresa: "Northwind Traders",
Personal: 35,
Sin fines de lucro: false }
Registro de referencia Una referencia a un registro en una entidad. Tales referencias a menudo se usan con búsquedas polimórficas. Más información: Trabajar con referencias. First(Accounts).Owner
Table Una tabla de registros. Todos los registros deben tener los mismos nombres para sus campos con los mismos tipos de datos, y los campos omitidos se tratan como blank. Este tipo de datos compuesto contiene instancias de otros tipos de datos que se enumeran en este tema. Más información: Trabajar con tablas. Tabla( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Text Una cadena de texto Unicode. "Hola, Mundo"
Hora Una hora sin fecha, en la zona horaria del usuario de la aplicación. Time( 11, 23, 45 )
Dos opciones Una elección de un conjunto de dos opciones, respaldado por un valor booleano. Este tipo de datos combina una etiqueta de texto localizable con un valor booleano. La etiqueta aparece en la aplicación y el valor booleano se almacena y se utiliza para realizar comparaciones. ThisItem.Taxable

Muchos de estos tipos de datos son similares y tienen la misma representación subyacente, como un campo Hipervínculo siendo tratado como Texto. Los tipos de datos adicionales proporcionan mejores experiencias predeterminadas en formularios y otros controles.

Blank

Todos los tipos de datos pueden tener un valor de blank (en otras palabras, sin valor). El término "nulo" se usa a menudo en bases de datos para este concepto.

Use la función Blank con la función Set o Patch para establecer una variable o campo a blank. Por ejemplo, Set (x, Blank() ) elimina cualquier valor en la variable global x.

Prueba para un valor blank usando la función IsBlank. Reemplaza posibles valores blank con valores no-blank utilizando la función Coalesce.

Como todos los tipos de datos son compatibles con blank, los tipos de datos Booleano y Dos opciones tienen efectivamente tres valores posibles.

Los cuatro tipos de datos se basan en una cadena de texto Unicode.

Texto incrustado

Las cadenas de texto incrustadas en una fórmula están entre comillas dobles. Use dos comillas dobles juntas para representar una comilla doble en la cadena de texto. Por ejemplo, usando la siguiente fórmula en la propiedad OnSelect de un control Button:

Notify( "Jane said ""Hello, World!""" )

Da como resultado un banner cuando se presiona el botón, donde se omiten la primera y la última comillas dobles (ya que delimitan la cadena de texto) y las comillas dobles repetidas alrededor ¡Hola Mundo! se reemplazan con una comilla doble simple:

notificación emergente con el mensaje que Jane dijo "Hola, mundo".

Las comillas simples no se utilizan para nombres identificadores que contienen caracteres especiales y no tienen importancia dentro de una cadena de texto.

Recursos de imagen y medios

A través del menú Archivo, puede agregar archivos de imagen, vídeo y audio como recursos de la aplicación. El nombre del archivo importado se convierte en el nombre del recurso en la aplicación. En este gráfico, el logotipo de Northwind Traders, que se llama nwindlogo, se ha agregado a una aplicación:

Recurso de Northwind.

Para usar este recurso en una aplicación, especifíquelo en la propiedad Image de un control Image:

Imagen de Northwind.

URI para imágenes y otros medios

Puede profundizar un poco más en ese último ejemplo configurando la propiedad Text de un control Label a nwindlogo. La etiqueta muestra una cadena de texto:

Texto de Northwind.

Power Fx hace referencia a cada imagen u otro archivo multimedia, ya sea en la nube o agregado como un recurso de la aplicación, mediante una cadena de texto URI.

Por ejemplo, la propiedad Image de un control de imagen acepta no solo recursos de la aplicación sino también enlaces a imágenes en la web, como "https://northwindtraders.com/logo.jpg". La propiedad también acepta imágenes en línea que usan el esquema de URI de datos, como en este ejemplo:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"

Ese URI muestra una versión ampliada de dos diamantes morados:

Diamantes dobles.

Puede mostrar la imagen más reciente capturada en un control Camera si configura la propiedad Image de un control de imagen para la propiedad Photo del control de la cámara. La aplicación guarda la imagen en la memoria y la propiedad Photo del control de la cámara devuelve una referencia de URI a la imagen. Por ejemplo, puede tomar una foto y la propiedad Photo de la cámara podría devolver "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Usa un URI para hacer referencia a una imagen u otro archivo multimedia almacenado en una base de datos. De esa manera, la aplicación no recupera los datos reales hasta que se necesitan. Por ejemplo, un archivo adjunto en una entidad Microsoft Dataverse puede devolver "appres://datasources/Contacts/table/..." Como en el ejemplo de la cámara, puede mostrar esta imagen configurando la propiedad Image de un control de imagen para esta referencia, que recupera los datos binarios.

Cuando guarda un tipo de datos multimedia, como una imagen, en una base de datos, la aplicación envía la imagen real o los datos multimedia, no la referencia de URI.

Límites de tamaño

Como cadenas de texto y URI, estos tipos de datos no tienen un límite preestablecido en su longitud.

Los datos binarios a los que hacen referencia estos tipos de datos tampoco tienen un límite predeterminado de tamaño. Por ejemplo, una imagen capturada a través del control de la cámara que ahora se hace referencia como "appres://..." puede ser tan grande y de alta resolución como la cámara del dispositivo puede alcanzar. La resolución, la velocidad de fotogramas y otros atributos de los archivos multimedia no están limitados por el tipo de datos, pero los controles específicos para reproducir y capturar medios pueden tener sus propias limitaciones.

Sin embargo, todos los tamaños de datos están sujetos a la cantidad de memoria disponible en la aplicación. Los navegadores que se ejecutan en una ordenador de escritorio generalmente admiten más de 100 megabytes de datos. Sin embargo, la cantidad de memoria disponible en un dispositivo, como un teléfono, podría ser mucho menor, típicamente en el rango de 30-70 megabytes. Para determinar si su aplicación se ejecutará dentro de estos límites, pruebe escenarios comunes en todos los dispositivos en los que debería ejecutarse.

Como práctica recomendada, mantenga los datos en la memoria solo el tiempo que sea necesario. Cargue imágenes a una base de datos tan pronto como pueda; descargue imágenes solo cuando el usuario de la aplicación las solicite.

Numero y divisa

Número y Divisa son tipos de datos que usan el estándar de coma flotante de doble precisión IEEE 754. Este estándar proporciona una amplia gama de números en los que trabajar, desde –1,79769 x 10308 a 1,79769 x 10308. El valor más pequeño que se puede representar es 5 x 10–324.

Power Fx puede representar exactamente números enteros (o enteros) entre –9.007.199.254.740.991 (-(253 - 1)) y 9.007.199.254.740.991 (253 - 1), inclusive. Este rango es mayor que los tipos de datos enteros de 32 bits (o 4 bytes) que las bases de datos usan comúnmente. Sin embargo, Power Fx no puede representar tipos de datos enteros de 64 bits (u 8 bytes). Es posible que desee almacenar el número en un campo de texto o utilizar una columna calculada para hacer una copia del número en un campo de texto, de modo que se asigne a un tipo de datos Texto en Power Fx. De esta manera, puede retener, mostrar e ingresar estos valores y compararlos para determinar si son iguales; sin embargo, no puede realizar cálculos numéricos en ellos de esta forma.

La aritmética de punto flotante es aproximada, por lo que a veces puede dar resultados inesperados con muchos ejemplos documentados. Puede esperar que la fórmula 55/100 * 100 devuelva exactamente 55 y (55/100 * 100) - 55 devuelva exactamente cero. Sin embargo, la última fórmula devuelve 7,1054 x 10-15, que es pequeño pero no nulo. Esa pequeña diferencia normalmente no causa un problema y la aplicación lo redondea cuando muestra el resultado. Sin embargo, pequeñas diferencias pueden agravarse en cálculos posteriores y parecen dar una respuesta incorrecta.

Los sistemas de bases de datos a menudo almacenan divisas y realizan cálculos mediante el uso de matemática decimal, que ofrece un rango menor pero un mayor control sobre la precisión. De forma predeterminada, las aplicaciones Power Fx asignan monedas dentro y fuera de valores de punto flotante; por lo tanto, el resultado puede diferir de los cálculos que se realizan en un tipo de datos decimal nativo. Si este tipo de discrepancia causará problemas, es posible que desee trabajar con estos valores como Texto, tal como lo haría con los enteros grandes descritos anteriormente en esta sección.

Fecha, hora y DateTime

Zonas horarias

Los valores de fecha/hora entran en estas categorías:

  • Usuario local: estos valores se almacenan en UTC (hora universal coordinada), pero la zona horaria del usuario de la aplicación afecta cómo la aplicación muestra estos valores y cómo los especifica el usuario de la aplicación. Como ejemplo, el mismo momento parece diferente para un usuario en Canadá que para un usuario en Japón.
  • Zona horaria independiente: la aplicación muestra estos valores de la misma manera y el usuario de la aplicación los especifica de la misma manera, independientemente de la zona horaria. El mismo momento aparece igual para un usuario en Canadá que para un usuario en Japón. Los autores de aplicaciones que no esperan que sus aplicaciones se ejecuten en diferentes zonas horarias usan estos valores porque son más simples en general.

Esta tabla muestra algunos ejemplos:

Tipo fecha/hora Valor almacenado en la base de datos Valor mostrado e introducido 7 horas al oeste de UTC Valor mostrado e introducido 4 horas al este de UTC
Local del usuario Domingo, mayo 19, 2019
4:00 a.m.
Sábado, mayo 18, 2019
9:00 p.m.
Domingo, mayo 19, 2019
8:00 a.m.
Independiente de la zona horaria Domingo, mayo 19, 2019
4:00 a.m.
Domingo, mayo 19, 2019
4:00 a.m.
Domingo, mayo 19, 2019
4:00 a.m.

Cuando se usa en Power Apps, para la fecha/hora de usuario local, Power Fx usa la zona horaria del navegador o dispositivo, pero las aplicaciones basadas en modelos usan la configuración del usuario en Dataverse. Estas configuraciones generalmente coinciden, pero los resultados serán diferentes si estas configuraciones difieren.

Use las funciones DateAdd y TimeZoneInformation para convertir la hora local a UTC y viceversa. Vea los ejemplos al final de la documentación para estas funciones.

Equivalentes numéricos

Power Fx mantiene y calcula todos los valores de fecha / hora, ya sean Usuario local o Independiente de la zona horaria en UTC. La aplicación traduce los valores según la zona horaria del usuario de la aplicación cuando los muestra y cuando el usuario de la aplicación los especifica.

Cuando Power Fx lee un valor Independiente de la zona horaria de un origen de datos o escribe dicho valor en un origen de datos, la aplicación ajusta automáticamente el valor para compensar la zona horaria del usuario de la aplicación. La aplicación luego trata el valor como un valor UTC, consistente con todos los demás valores de fecha/hora en la aplicación. Debido a esta compensación, el valor original Zona horaria independiente aparece cuando la aplicación ajusta el valor UTC para la zona horaria del usuario de la aplicación.

Puede observar este comportamiento más de cerca utilizando la función Value para acceder al valor numérico subyacente para un valor de fecha / hora. Esta función devuelve el valor de fecha/hora como el número de milisegundos desde el 1 de enero, 1970 00:00:00.000 UTC.

Debido a que cada valor de fecha/hora se mantiene en UTC, la fórmula Value (Date(1970, 1, 1) ) no devolverá cero en la mayoría de las partes del mundo porque la función Date devuelve una fecha en UTC. Por ejemplo, la fórmula devolvería 28.800.000 en una zona horaria que se compensa con respecto a UTC en ocho horas. Ese número refleja el número de milisegundos en ocho horas.

Volviendo a nuestro ejemplo superior:

Tipo fecha/hora Valor almacenado en la base de datos Valor mostrado e introducido 7 horas al oeste de UTC La función Value devuelve
Local del usuario Domingo, mayo 19, 2019
4:00 a.m.
Sábado, mayo 18, 2019
9:00 p.m.
1,558,238,400,000
(Domingo, mayo 19, 2019
4:00 a.m. UTC)
Independiente de la zona horaria Domingo, mayo 19, 2019
4:00 a.m.
Domingo, mayo 19, 2019
4:00 a.m.
1,558,263,600,000
(Domingo, mayo 19, 2019
11:00 a.m. UTC)

Convertir tiempos Unix

Los tiempos Unix reflejan el número de segundos desde el 1 de enero, 1970 00:00:00 UTC. Debido a que Power Fx usa milisegundos en lugar de segundos, puede convertir entre los dos multiplicando o dividiendo por 1000.

Por ejemplo, la hora de Unix muestra el 9 de septiembre de 2001 a las 01:46:40 UTC como 1.000.000.000. Para mostrar ese valor de fecha / hora como texto, multiplique ese número por 1000 para convertirlo a milisegundos, y luego úselo en una función Text. La formula Text(1000000000 * 1000, DateTimeFormat.UTC) devuelve la cadena 2001-09-09T01:46:40.000Z.

Sin embargo, esa función devuelve sábado 8 de septiembre, 2001 18:46:40 si usa el formato DateTimeFormat.LongDateTime24 en una zona horaria que esté compensada en -7 horas con respecto a UTC (7 horas al oeste de UTC). Este resultado muestra el valor DateTime correctamente basado en la zona horaria local.

Para convertir a un tiempo Unix, divida el resultado de Valor por 1000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Si necesita el tiempo de Unix en un valor Fecha para cálculos posteriores o visualización dentro de Power Apps, use esta fórmula:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server tiene Datetime, Datetime2 y otros tipos de datos de fecha / hora que no incluyen un desplazamiento de zona horaria y no indican en qué zona horaria se encuentran. Power Fx asume que estos valores se almacenan en UTC y los trata como Usuario local. Si los valores están destinados a ser independientes de la zona horaria, corrija las traducciones UTC utilizando la función TimeZoneOffset.

Power Fx utiliza la información de zona horaria incluida en campos Datetimeoffset al convertir un valor a la representación UTC interna de la aplicación. Las aplicaciones siempre usan UTC como zona horaria (desplazamiento de zona horaria cero) cuando escriben datos.

Power Fx lee y escribe valores del tipo de datos Hora en SQL Server como cadenas de texto en el Formato de duración ISO 8601. Por ejemplo, debe analizar este formato de cadena y usar la función Time para convertir la cadena de texto "PT2H1M39S" a un valor Hora:

With( 
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Mezcla de información de fecha y hora

Fecha, Hora y DateTime tienen nombres diferentes, pero todos contienen la misma información sobre fechas y horas.

Un valor Fecha puede incluir información de hora, que generalmente es medianoche. Un valor Hora puede contener información de fecha, que generalmente es el 1 de enero de 1970. Dataverse también almacena información de hora en un campo Solo fecha pero muestra solo la información de la fecha de forma predeterminada. De forma similar, Power Fx a veces distingue entre estos tipos de datos para determinar formatos y controles predeterminados.

No se recomienda agregar y restar valores de fecha y hora directamente porque la zona horaria y otras conversiones pueden causar resultados confusos. O usa la función Value para convertir los valores de fecha / hora a milisegundos primero y tener en cuenta la zona horaria del usuario de la aplicación, o usa las funciones DateAdd y DateDiff para sumar o restar uno de estos valores.

Conjuntos de opciones y Dos opciones

Los conjuntos de opciones y los tipos de datos de dos opciones proporcionan dos o más opciones para que un usuario de la aplicación seleccione. Por ejemplo, un conjunto de opciones Estado del pedido podría ofrecer las opciones Nuevo, Enviado, Facturado y Cerrado. El tipo de datos de dos opciones ofrece solo dos opciones.

Ambos tipos de datos muestran sus etiquetas en un contexto de cadena de texto. Por ejemplo, un control de etiqueta muestra una de las opciones de estado del pedido si la propiedad del control Text se establece en una fórmula que hace referencia a conjunto de opciones. Las etiquetas de opciones pueden estar localizadas para usuarios de aplicaciones en diferentes ubicaciones.

Cuando un usuario de la aplicación selecciona una opción y guarda ese cambio, la aplicación transmite los datos a la base de datos, que almacena esos datos en una representación que es independiente del idioma. Una opción en un conjunto de opciones se transmite y almacena como un número, y una opción en un tipo de datos de dos opciones se transmite y almacena como un valor booleano.

Las etiquetas son solo para fines de visualización. No puede realizar comparaciones directas con las etiquetas porque son específicas de un idioma. En cambio, cada conjunto de opciones tiene una enumeración que funciona con el número subyacente o el valor booleano. Por ejemplo, no puede usar esta fórmula:

If( ThisItem.OrderStatus = "Active", ...

Pero puede usar esta fórmula:

If( ThisItem.OrderStatus = OrderStatus.Active, ...

Para los conjuntos de opciones globales (qué entidades comparten), el nombre de la enumeración del conjunto de opciones coincide con el nombre del conjunto de opciones global. Para conjuntos de opciones locales (que tienen un alcance a una entidad), el nombre puede contener el nombre de la entidad. Este comportamiento evita conflictos si varias entidades tienen conjuntos de opciones que tienen el mismo nombre. Por ejemplo, la entidad Accounts podría tener un conjunto de opciones OrderStatus, y su nombre podría ser OrderStatus (Cuentas). Ese nombre contiene uno o más espacios y paréntesis, por lo que debe rodearlo con comillas simples si hace referencia a él en una fórmula.

Además, los valores de dos opciones también pueden comportarse como valores booleanos. Por ejemplo, un valor de dos opciones llamado TaxStatus podría tener las etiquetas Taxable y Non-Taxable, que corresponden a true y false respectivamente. Para demostrarlo, puede usar esta fórmula:

If( ThisItem.Taxable = TaxStatus.Taxable, ...

También puede usar esta fórmula equivalente:

If( ThisItem.Taxable, ...