Compartir a través de


Tipos de datos

La información fluye a través de Power Fx en valores pequeños y discretos, como las celdas de una hoja de cálculo. Por ejemplo, los datos de un campo Cumpleaños y un campo Aniversario fluyen como un valor date que incluye el año, el mes y el día. Power Fx da formato a estos valores, restringe la entrada a lo que es adecuado para cada uno y comparte los valores con una base de datos. Los cumpleaños y aniversarios pueden diferir de las personas, pero el sistema los controla de la misma manera. En este caso, Fecha es un ejemplo de un tipo de datos.

En este artículo se explica cada tipo de datos en Power Fx, cómo funcionan y cómo se asignan a orígenes de datos externos.

Tipo de datos Description Ejemplos
Booleana Un valor true o false. Puede usarlo directamente en If, Filter y otras funciones sin una comparación. true
Opción 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. La función Type admite este tipo de datos si usa una instancia de un campo Choice por nombre. ThisItem.OrderStatus
Color Especificación de color que incluye un canal alfa. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Divisa Valor de moneda almacenado 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. La función Type no admite el tipo de datos Currency . 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 una hora, en la zona horaria del usuario de la aplicación. DateTimeValue("16 de mayo, 2019 1:23:09 PM")
Decimal Un número con operaciones de alta precisión, base 10 y un intervalo limitado. 123
Decimal( "1,2345" )
Dynamic (anteriormente UntypedObject) El tipo del valor es dinámico y puede variar en tiempo de ejecución. Un valor dinámico podría ser cualquier tipo existente y se puede convertir en tipos compatibles mediante funciones como Boolean(), Value(), Table(), etc. Para obtener más información, consulte Valores dinámicos y Trabajar con JSON. ParseJSON("{ ""Field"" : 1234 }"). Campo
Float Un número con precisión estándar, operaciones de base 2 y alcance amplio. 123
8,903e121
1,234E-200
GUID Identificador único global. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hipervínculo Cadena de texto que contiene un hipervínculo. "https://powerapps.microsoft.com"
Imagen Cadena de texto de identificador de recurso universal (URI) en una imagen en .jpeg, .png, .svg, .gifu otro formato común de imagen web. La función Type no admite el tipo de datos Image . 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. La función Type no admite el tipo de datos Media . MyVideo agregado como recurso de aplicación
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Número Un alias para Decimal (la mayoría hosts de Power Fx) o Float (aplicaciones de lienzo). Si puede usar una variedad de números para una situación, use Number para obtener la máxima compatibilidad. 123
0.0123
1e4
Grabar Un registro de valores de datos. Este tipo de datos compuesto contiene instancias de otros tipos de datos enumerados en este artículo. Para obtener más información, vea Trabajar con tablas. La función Type admite este tipo de datos si usa una instancia de un objeto Record. { Empresa: "Northwind Traders",
Personal: 35,
NonProfit: false }
Registro de referencia Una referencia a un registro en una tabla. Estas referencias se suelen usar con búsquedas polimórficas. Para obtener más información, vea Trabajar con referencias. La función Type no admite este tipo de datos. First(Accounts).Owner
Tabla Una tabla de registros. Todos los registros deben tener los mismos nombres de campo y tipos de datos y los campos omitidos se tratan como en blanco. Este tipo de datos compuesto contiene instancias de otros tipos de datos enumerados en este artículo. Para obtener más información, vea Trabajar con tablas. La función Type admite este tipo de datos si usa una instancia de table. Table( { 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 )
Anulado Utilizado solo por las funciones definidas por el usuario de comportamiento, indica que una función no tiene un tipo de valor devuelto. La función Type no admite este tipo de datos. Aunque una función no tiene un tipo o valor devuelto, siempre puede devolver un error. Hi(): Void = { Notify( "¡Hola!" ) }
Sí/no 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. La función Type admite este tipo de datos si usa una instancia de un campo Sí/No por nombre. ThisItem.Taxable

Muchos de estos tipos de datos son similares y tienen la misma representación subyacente, como un campo Hyperlink que se trata 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 en blanco (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() ) quita el valor de la variable global x.

Pruebe un valor en blanco con la función IsBlank . Reemplaza posibles valores blank con valores no blank utilizando la función Coalesce.

Dado que todos los tipos de datos admiten en blanco, los tipos de datos Boolean y Two tienen 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 las comillas dobles primera y última (ya que delimitan la cadena de texto) y las comillas dobles repetidas alrededor de Hello, World! se reemplazan por una sola comilla doble:

notificación emergente con el mensaje que Jane dijo

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

Interpolación de cadenas

Utilice la interpolación de cadenas para incrustar fórmulas dentro de una cadena de texto. Este enfoque suele ser más fácil para trabajar con esto y visualizar el resultado que usar la función Concatenate o el operador &.

Prefije la cadena de texto con un signo de dólar $ y encierre la fórmula que se incrustará con llaves { }. Para incluir una llave en la cadena de texto, use llaves repetidas: {{ o }}. La interpolación de cadenas se puede usar en cualquier lugar donde se pueda usar una cadena de texto estándar.

Por ejemplo, considere esta fórmula con variables globales Manzanas en 3 y Plátanos en 4:

$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."

Esta fórmula devuelve la cadena de texto Tenemos 3 manzanas, 4 plátanos, dando un total de 7 frutas. Las variables Manzanas y Plátanos se insertan en el texto reemplazando las llaves, junto con el resultado de la fórmula matemática Manzanas+Plátanos. Los espacios y otros caracteres alrededor de las llaves se conservan tal como están.

Las fórmulas incrustadas pueden incluir cualquier función u operador. Todo lo que se requiere es que el resultado de la fórmula se pueda coercción en una cadena de texto. Por ejemplo, esta fórmula insertará NickName si se suministra, o FirstName si no, en un saludo:

$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!"

Si NickName se establece en "Joe", entonces esta fórmula produce la cadena de texto ¡Bienvenido Joe, es un placer conocerte!. Pero si NickName es espacio en blanco y FirstName es "Joseph", entonces esta fórmula produce Querido Joseph, ¡encantado de conocerte!.

La interpolación de cadenas puede incluir cadenas de texto estándar en la fórmula incrustada. Por ejemplo, si no se suministra ni NickName ni FirstName fueron suministrados, todavía podríamos proporcionar "Amigo" como sustituto:

$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"

Las interpolaciones de cadenas incluso se pueden anidar. Considere este ejemplo donde los nombres First, Middle, y Last se combinan en un saludo. Incluso si uno o dos de estos valores son espacio en blanco, el número correcto de espacios estará entre las partes del nombre. Si no se proporciona ninguna de las partes, la interpolación de la cadena interna colapsará en una cadena vacía y será reemplazada por la función Coalesce por "Amigo".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First Middle Last Resultado
John Qunicy Doe Welcome John Quincy Doe!
John blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

Nuevas líneas

Las cadenas de texto incrustadas pueden contener saltos de línea. Por ejemplo, considere establecer la propiedad Text de un control Label a lo siguiente:

"Line 1
Line 2
Line 3"

Esta fórmula da como resultado tres líneas que se muestran en el control label:

Cadena de texto incrustada y control de etiqueta que muestra tres líneas con Línea 1, Línea 2 y Línea 3.

Las líneas nuevas también son compatibles con la interpolación de cadenas:

$"Line {1}
Line {1+1}
Line {1+1+1}"

Que resulta en la misma salida:

Fórmula de interpolación de cadena y control label que muestra tres líneas con Línea 1, Línea 2 y Línea 3.

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.

Las aplicaciones de lienzo hacen referencia a cada imagen u otro archivo multimedia, ya sea en la nube o agregado como recurso de 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 tabla de Microsoft Dataverse podría 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 a 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 a la que se hace referencia como "appres://..." puede tener el tamaño y la resolución máximas de la cámara del dispositivo. 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.

Números

Nota

Power Apps solo admite Float hoy en día y es el tipo de todos los números. Pronto se agregará compatibilidad con decimales.

Power Fx admite dos tipos de números: Decimales y Flotantes (con sinónimos Número y Moneda).

Decimal es mejor para la mayoría de los cálculos comerciales. Puede representar con precisión números en base 10, lo que significa que 0.1 se puede representar exactamente y evitará errores de redondeo durante los cálculos. Tiene un rango lo suficientemente amplio para cualquier necesidad empresarial, hasta 1028 con hasta 28 dígitos de precisión. Decimal es el tipo de datos numéricos predeterminado para la mayoría de los hosts de Power Fx y se utiliza si uno simplemente escribe 2*2.

Flotante es mejor para cálculos científicos. Puede representar números en un rango mayor, hasta 10308. La precisión se limita a 15 posiciones decimales y las matemáticas se basan en la base 2, por lo que no puede representar con precisión algunos valores decimales comunes. Float también tiene un mayor rendimiento y se favorece si es un factor y la precisión no es crítico.

Números decimales

El tipo de datos Decimal utiliza con mayor frecuencia el tipo de datos decimal .NET. Algunos hosts, como las columnas de fórmulas de Dataverse que se ejecutan en SQL Server, usan el tipo de datos decimal de SQL Server.

Decimal hace las matemáticas de la forma en que aprendiste en la escuela, usando dígitos en base 10, lo que es importante para evitar errores de redondeo de diferencias muy pequeñas que pueden acumularse cuando se usan matemáticas en base 2 (como las que usa Float).

El rango va de positivo 79,228,162,514,264,337,593,543,950,335 a negativo 79,228,162,514,264,337,593,543,950,335. El separador decimal se puede colocar en cualquier lugar dentro de estos números, lo que proporciona hasta 28 dígitos de precisión y aún se puede representar con precisión. Por ejemplo, 79,228,162,514,264.337593543950335 se puede representar exactamente, al igual que 7.9228162514264337593543950335.

Números de punto flotante

El tipo de datos Flotante, también conocido como Número o Divisa, utiliza el estándar de coma flotante de doble precisión IEEE 754. Este estándar proporciona una gran variedad 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.

Float 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, las aplicaciones de lienzo no pueden 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 usar 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 la aplicación de lienzo. 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 muy pequeño pero no cero. 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. Por defecto, las aplicaciones de lienzo asignan divisas 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 decimales nativo. Dependiendo de las necesidades de precisión de la aplicación, es posible que quieras trabajar con estos valores como Text, como se describe para enteros grandes anteriormente.

Valores predeterminados y conversiones

Nota

Power Apps solo admite Float hoy en día y es el tipo de todos los números. Pronto se agregará compatibilidad con decimales.

La mayoría de los hosts de Power Fx usan Decimal de forma predeterminada. Tener este valor predeterminado significa:

  • Números literales en fórmulas. El número 1.234 se interpreta como un valor Decimal. Por ejemplo, la fórmula 1.234 * 2 interpreta el 1.234 y 2 como Decimal y devuelve un resultado Decimal.
  • Función Value. Value( "1.234" ) devuelve un valor Decimal. Por ejemplo, en la fórmula Value( "1.234" ) * 2, la función Value interpreta el contenido de la cadena "1.234" de texto como un decimal.

Para trabajar con valores Flotantes, se utiliza la función Float. Extendiendo nuestro ejemplo, Float( 1.234 ) convierte el Decimal1.234 en Float. Float también se puede utilizar como reemplazo de Valor para convertir una cadena que contiene un número de punto flotante como Float( "1.234" ) a un valor flotante , que es necesario si el número no se puede representar como un decimal.

En resumen:

Uso Decimal Float
Números literales en fórmulas 1.234 Float( 1.234 )
Float( "1.234" )
Conversión de cadena de texto Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Conversión entre tipos numéricos Decimal( float ) Float( decimal )
Conversión a cadena de texto Text( decimal ) Text( float )

Mezclar tipos numéricos

Los valores flotantes y decimales se pueden mezclar libremente. Cuando se mezclan, los valores decimales se convierten en valores flotantes debido al rango más amplio. Dado que esta conversión puede dar lugar a una pérdida de precisión, es importante no mezclar los dos de forma innecesaria. Dado que Decimal es el tipo de datos literal predeterminado y la mayoría de las funciones numéricas conservan el tipo, es relativamente fácil evitar pasar a Float sin desearlo.

Por ejemplo, considere el siguiente cálculo utilizando pac power-fx repl después de instalar Power Platform CLI. Dado que ambos números son Decimal, el cálculo se realiza en Decimal y el resultado conserva total precisión:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Si en cambio, el segundo operando se cambiara a Flotante, todo el cálculo se haría en Flotante y se perdería la pequeña parte fraccionaria:

>> 1.0000000000000000000000000001 * Float(2)
2

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,mayo19,2019
4:00 a.m.
Sábado,mayo18,2019
9:00 p.m.
Domingo,mayo19,2019
8:00 a.m.
Independiente de la zona horaria Domingo,mayo19,2019
4:00 a.m.
Domingo,mayo19,2019
4:00 a.m.
Domingo,mayo19,2019
4:00 a.m.

Para las fechas/horas Usuario local, las aplicaciones de lienzo utilizan la zona horaria del navegador o dispositivo, pero las aplicaciones basadas en modelos utilizan la configuración del usuario en Dataverse. Esta configuración suele coincidir, pero los resultados difieren si esta configuración difiere.

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

Las aplicaciones de lienzo mantienen y calculan todos los valores de fecha/hora, ya sea Local del usuario o Zona horaria independiente 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 una aplicación de lienzo lee un valor Zona horaria independiente 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:

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,mayo19,2019
4:00 a.m.
Sábado,mayo18,2019
9:00 p.m.
1,558,238,400,000
(Domingo,mayo19,2019
4:00 a.m. UTC)
Independiente de la zona horaria Domingo,mayo19,2019
4:00 a.m.
Domingo,mayo19,2019
4:00 a.m.
1,558,263,600,000
(Domingo,mayo19,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 las aplicaciones de lienzo usan 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 en una aplicación de lienzo, 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. Las aplicaciones de lienzo asumen que estos valores se almacenan en UTC y los tratan como Local del usuario. Si los valores están destinados a ser independientes de la zona horaria, corrija las traducciones UTC utilizando la función TimeZoneOffset.

Las aplicaciones de lienzo utilizan 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.

Las aplicaciones de lienzo leen y escriben valores de 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. Del mismo modo, las aplicaciones de lienzo a veces distinguen entre estos tipos de datos para determinar los 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.

Opciones y Sí/No

Las 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, una opción Estado de la orden puede ofrecer las opciones Nuevo, Enviado, Facturado y Cerrado. El tipo de datos de dos opciones solo ofrece dos opciones.

Ambos tipos de datos muestran sus etiquetas como 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 esa elección. Las etiquetas de opción se pueden localizar para los usuarios de la aplicación en diferentes ubicaciones.

Cuando un usuario de la aplicación selecciona una opción y guarda el cambio, la aplicación envía los datos a la base de datos, que lo almacena de forma independiente del idioma. Una opción de una opción se envía y almacena como un número, y una opción en un tipo de datos de dos opciones se envía y almacena como un valor booleano.

Las etiquetas son solo para mostrar. No se pueden comparar las etiquetas directamente porque son específicas de un idioma. En cambio, cada opción 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 las opciones globales (qué tablas comparten), el nombre de la enumeración del conjunto de opciones coincide con el nombre de la elección global. Para las opciones locales (cuyo ámbito es una tabla), el nombre puede incluir el nombre de la tabla. Este comportamiento evita conflictos si varias tablas tienen opciones con el mismo nombre. Por ejemplo, la tabla Cuentas puede tener una opción OrderStatus y su nombre podría ser OrderStatus (cuentas). Ese nombre tiene espacios y paréntesis, por lo que debe rodearlo con comillas simples si hace referencia a él en una fórmula.

Los valores de dos opciones también se comportan como valores booleanos. Por ejemplo, un valor de dos opciones denominado TaxStatus podría tener las etiquetas Sujeto pasivo y No sujeto pasivo, que corresponden a true y false. Para mostrar esto, use esta fórmula:

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

También puede usar esta fórmula:

If( ThisItem.Taxable, ...