Tipos de datos

Nota

Microsoft Power Fx é o novo nome da linguaxe de fórmulas para aplicacións de lenzo. Estes artigos son un traballo en curso a medida que extraemos o idioma das aplicacións de lenzo, o integramos con outros produtos de Microsoft Power Platform e o poñemos a disposición como código aberto. Comece coa Visión xeral de Microsoft Power Fx para ver unha introdución á lingaxe.

A información flúe a través dunha aplicación en valores pequenos e discretos, dun xeito moi parecido ás celas dunha folla de cálculo. Por exemplo, os datos dun campo de Aniversario e un campo de Aniversario fluirían como valor de Data que inclúe o ano, o mes e o día. A aplicación sabe como dar formato a estes valores, restrinxir a entrada ao que é adecuado para cada un e compartir os valores cunha base de datos. Os aniversarios varían respecto dos aniversarios das persoas, pero o sistema os xestiona exactamente do mesmo xeito. Neste caso, Data é un exemplo de tipo de datos.

Este artigo ofrece detalles sobre os tipos de datos que soportan as aplicacións de lenzo. Cando unha aplicación se conecta a un orixe de datos externa, cada tipo de datos desa fonte é atribuído a un tipo de datos para aplicacións de lenzo.

Tipo de datos Descripción Exemplos
Booleano Un valor verdadeiro ou falso. Pódese usar directamente en Se, Filtro e outras funcións sen comparación. true
Color Unha especificación de cor, incluída unha canle alfa. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Moeda Un valor de moeda almacenado nun número de punto flotante. Os valores de moeda son os mesmos que os valores de número con opcións de formato de moeda. 123
4,56
Data Unha data sen hora, no fuso horario do usuario da aplicación. Date( 2019, 5, 16 )
Data e hora Unha data con hora, no fuso horario do usuario da aplicación. DateTimeValue( "May 16, 2019 1:23:09 PM" )
Decimal Un número con alta precisión, operacións de base 10 e alcance limitado. 123
Decimal( "1.2345" )
GUID Un identificador globalmente único. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hiperligazón Cadea de texto que contén unha hiperligazón. "https://powerapps.microsoft.com"
Image Unha cadea de texto de Identificador de recursos universais (URI) a unha imaxe en .jpeg, .png, .svg, .gif ou outro formato común de imaxe web. MyImage engadido como recurso de aplicación
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Multimedia Unha cadea de texto URI para unha gravación de vídeo ou audio. MyVideo engadido como recurso de aplicación
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Número ou flotación Un número con precisión estándar, operacións base 2 e un amplo alcance. 123
8.903e121
- 1.234E200
Opción Unha elección entre un conxunto de opcións, apoiado por un número. Este tipo de datos combina unha etiqueta de texto localizable cun valor numérico. A etiqueta aparece na aplicación e o valor numérico gárdase e úsase para as comparacións. ThisItem.OrderStatus
Rexistro Un rexistro de valores de datos. Este tipo de datos composto contén instancias doutros tipos de datos que se enumeran neste tema. Máis información: Traballar con táboas. { Company: "Northwind Traders",
Persoal: 35,
NonProfit: false }
Referencia do rexistro Unha referencia a un rexistro nunha táboa. Estas referencias úsanse con frecuencia con buscas polimórficas. Máis información: Traballar con referencias. First(Accounts).Owner
Table Táboa de rexistros. Todos os rexistros deben ter os mesmos nomes para os seus campos cos mesmos tipos de datos, e os campos omitidos son tratados como baleiros. Este tipo de datos composto contén instancias doutros tipos de datos que se enumeran neste tema. Máis información: Traballar con táboas. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Texto Unha cadea de texto Unicode. "Ola, mundo"
Hora Unha hora sen data, no fuso horario do usuario da aplicación. Time( 11, 23, 45 )
Dúas opcións Unha elección entre un conxunto de dúas opcións, apoiado por un valor booleano. Este tipo de datos combina unha etiqueta de texto localizable cun valor booleano. A etiqueta aparece na aplicación e o valor booleano gárdase e úsase para as comparacións. ThisItem.Taxable
Obxecto sen escribir Un obxecto de tipo non declarado. O obxecto subxacente pode ser calquera tipo existente e pódese converter en tipos compatibles usando funcións como Boolean(), Value(), Table() etc. Para obter máis información, consulte Obxecto non escrito e Traballar con JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Moitos destes tipos de datos son similares e teñen a mesma representación subxacente, como un campo de Hiperligazón que se está tratando como Texto. Os tipos de datos adicionais proporcionan mellores experiencias predeterminadas en formularios e outros controis.

En branco

Todos os tipos de datos poden ter un valor de baleiro (noutras palabras, ningún valor). O termo "nulo" úsase con frecuencia en bases de datos para este concepto.

Use a función Baleiro coa función Conxunto ou Parche para definir unha variable ou campo en baleiro. Por exemplo, Set( x, Blank() ) elimina calquera valor da variable global x.

Proba para un valor en branco usando a función IsBlank. Substitúa posibles valores en branco por valores que non estean en branco usando a función Coalesce.

Porque todos os tipos de datos son compatibles con en branco, os tipos de datos Booleano e Dúas opcións teñen efectivamente tres valores posibles.

Os catro tipos de datos están baseados nunha cadea de texto Unicode.

Texto incrustado

As cadeas de texto incrustadas nunha fórmula están incluídas entre comiñas dobres. Use dúas comiñas dobres xuntas para representar unha única comiña dobre na cadea de texto. Por exemplo, usando a seguinte fórmula na propiedade OnSelect dun control Botón:

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

permite ver unha faixa cando se preme o botón, onde se omiten a primeira e a última comiñas dobres (xa que delimitan a cadea de texto) e as comiñas dobres repetidas arredor de Ola, mundo! son substituídas por unhas dobres comiñas sinxelas:

notificación emerxente coa mensaxe Jane dixo

Non se usan comiñas individuais para nomes de identificador que conteñen caracteres especiais e non teñen importancia especial dentro dunha cadea de texto.

Interpolación de cadeas

Use a interpolación de cadeas para inserir fórmulas nunha cadea de texto. Isto adoita ser máis fácil de traballar e visualizar a saída que usar a función concatenadaou operador.

Coloque como prefixo na cadea de texto un signo de dólar $ e engada a fórmula que se vai incrustar con chaves { }. Para incluír unha chave na cadea de texto, utilice chaves repetidas: {{ ou }}. A interpolación de cadeas pódese usar en calquera lugar onde se poida usar unha cadea de texto estándar.

Por exemplo, considere esta fórmula con variables globais Mazás establecido en 3 e Plátanos axustado en 4:

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

Esta fórmula devolve a cadea de texto Temos 3 mazás, 4 plátanos, un total de 7 froitas. As variables Mazás e Plátanos insírense no texto substituíndo as chaves, xunto co resultado da fórmula matemática Mazás+Plátanos. Os espazos e outros caracteres arredor das chaves consérvanse tal e como están.

As fórmulas incorporadas poden incluír calquera función ou operador. Todo o que se require é que o resultado da fórmula poida ser forzado a unha cadea de texto. Por exemplo, esta fórmula inserirá NickName se se fornece, ou o FirstName do contrario, nun saúdo:

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

Se NickName está axustado en "Joe", esta fórmula producirá a cadea de texto Dámoslle a benvida, Joe, encantado de coñecelo. Pero se NickName está baleiro e FirstName é "Joseph", esta fórmula produce Estimado Joseph, encantado de coñecelo no seu lugar.

A interpolación de cadeas pode incluír cadeas de texto estándar na fórmula incrustada. Por exemplo, se non se forneceu nin NickName ou FirstName, aínda podemos fornecer "Friend" como substituto:

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

Incluso se poden aniñar as interpolacións de cadeas. Considere este exemplo no que se combinan o Nome, Segundo nome e Apelido nun saúdo. Aínda que un ou dous destes valores estean en branco, o número correcto de espazos estará entre as partes do nome. Se non se proporciona ningunha das partes, a interpolación da cadea interna contraerase nunha cadea baleira e substituirase pola función Fusionar por "Amigo".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Primeira Centro Última Resultado
Xoán Qunicy Doe Welcome John Quincy Doe!
Xoán blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

Newlines

As cadeas de texto incrustadas poden conter novas liñas. Por exemplo, considere axustar a propiedade Text dun control de Etiqueta para o seguinte:

"Line 1
Line 2
Line 3"

A fórmula anterior dá lugar a tres liñas que aparecen no control de etiquetas:

Corda de texto incrustada e control de etiquetas mostrando tres liñas coa liña 1, a liña 2 e a liña 3.

As novas liñas tamén son compatibles coa interpolación de cadeas, como se mostra a continuación:

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

A fórmula anterior dá o mesmo resultado:

Fórmula de interpolación de cordas e control de etiquetas mostrando tres liñas coa liña 1, a liña 2 e a liña 3.

Recursos de imaxe e multimedia

A través do menú Ficheiro, pode engadir ficheiros de imaxe, vídeo e audio como recursos de aplicación. O nome do ficheiro importado convértese no nome do recurso na aplicación. Neste gráfico, o logotipo de Northwind Traders, que leva o nome nwindlogo, engadiuse a unha aplicación:

Recursos do vento do Norte.

Para empregar este recurso nunha aplicación, especifíqueo na propiedade Imaxe dun control de Imaxe:

Imaxe de Northwind.

URI de imaxes e outros soportes

Pode investigar un pouco máis neste último exemplo, definindo a propiedade Text dun control de Etiqueta en nwindlogo. A etiqueta mostra unha cadea de texto:

Texto northwind.

As aplicacións de lenzo fan referencia a cada imaxe ou outro ficheiro multimedia, xa sexa na nube ou se engada como recurso de aplicación por parte dunha cadea de texto de URI.

Por exemplo, a propiedade Image dun control de imaxe non só acepta recursos da aplicacións, senón que tamén liga con imaxes da web, como "https://northwindtraders.com/logo.jpg". A propiedade tamén acepta imaxes en liña que usan o esquema da URI de datos como neste exemplo:

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

Esta URI mostra unha versión reducida de dous diamantes púrpura:

Diamantes dobres.

Pode amosar a imaxe máis recente capturada nun control de Cámara se establece a propiedade Imaxe dun control de imaxe á propiedade Foto do control da cámara. A aplicación garda a imaxe na memoria e a propiedade Foto do control da cámara devolve unha referencia URI á imaxe. Por exemplo, pode facer unha foto e a propiedade Foto da cámara podería devolver "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Empregue un URI para facer referencia a unha imaxe ou outro ficheiro multimedia almacenado nunha base de datos. Deste xeito, a aplicación non recupera os datos reais ata que realmente sexa necesaria. Por exemplo, un anexo nunha táboa de Microsoft Dataverse pode devolver "appres://datasources/Contacts/table/...". Como no exemplo da cámara, pode amosar esta imaxe establecendo a propiedade Image dun control de imaxe nesta referencia, que recupera os datos binarios.

Cando garda un tipo de datos multimedia, como unha imaxe, nunha base de datos, a aplicación envía a imaxe real ou os datos multimedia, e non a referencia URI.

Límites de tamaño

Igual que cadeas de texto e URI, estes tipos de datos non teñen límite preestablecido na súa lonxitude.

Os datos binarios aos que se refiren estes tipos de datos tampouco teñen límite preestablecido de tamaño. Por exemplo, unha imaxe capturada a través do control da cámara á que agora se fai referencia como "appres://..." pode ser de tan grande e de alta resolución como admita a cámara do dispositivo. A resolución, a velocidade de fotogramas e outros atributos dos ficheiros multimedia non están limitados polo tipo de datos, pero os controis específicos para reproducir e capturar ficheiros multimedia poden ter as súas propias limitacións.

Non obstante, todos os tamaños de datos están suxeitos á cantidade de memoria dispoñible na aplicación. Os navegadores que se executan nun computador de escritorio normalmente admiten máis de 100 megabytes de datos. Non obstante, a cantidade de memoria dispoñible dun dispositivo como un teléfono pode ser moi inferior, normalmente nun rango de 30-70 megabytes. Para determinar se a súa aplicación se executará dentro destes límites, probe escenarios comúns en todos os dispositivos nos que se debe executar.

Como práctica recomendada, conserve os datos na memoria só o tempo que sexa necesario. Cargue imaxes nunha base de datos o máis rápido posible; descargue imaxes só cando o usuario da aplicación as solicite.

Números

Nota

Power Apps Só soporta Float hoxe e é o tipo de todos os números. O apoio decimal engadirase proximamente.

Power Fx soporta dous tipos de números: Decimal e Float (con sinónimos Número eMoeda).

O decimal é mellor para a maioría dos cálculos empresariais. Pode representar con precisión os números na base 10, o que significa que 0.1 pode representarse exactamente e non será propenso a erros de redondeamento durante os cálculos. Ten un rango suficientemente grande para calquera necesidade empresarial, ata 1028 con ata 28 díxitos de precisión. Decimal é o tipo de datos numéricos por defecto para a maioría Power Fx dos hóspedes, usado se un simplemente escribe 2*2.

Float é mellor para cálculos científicos. Pode representar números nun rango moito maior, ata 10308. A precisión está limitada a 15 lugares decimais e as matemáticas baséanse na base 2 polo que non pode representar algúns valores decimais comúns precisamente. Float tamén ten maior rendemento e é favorecido se iso é un factor e a precisión non é crítica.

Números decimais

O tipo de datos decimais usa con máis frecuencia o tipo de datos decimais da NET. Algúns hosts, como Dataverse as columnas de fórmula que se executan en SQL Serer, usan o tipo de datos decimais de SQL Server.

Decimal fai matemáticas como aprendeu na escola, usando a base 10 díxitos. Isto é moi importante para evitar erros de redondeamento de diferenzas moi pequenas que poden acumularse ao usar matemáticas base 2 (como usa Float).

O rango é de positivo 79,228,162,514,264,337,593,543,950,335 a negativo 79,228,162,514,264,337,593,543,950,335. O separador decimal pode situarse en calquera lugar dentro destes números, proporcionando ata 28 díxitos de precisión, e aínda se representa con precisión. Por exemplo, 79,228,162,514,264.337593543950335 pode representarse exactamente, do mesmo xeito que 7.9228162514264337593543950335.

Números de punto flotante

O tipo de datos Float , tamén coñecido como Número ou Moeda, usa o estándar IEEE 754 de dobre precisión de punto flotante. Este estándar proporciona unha gama moi grande de números nos que traballar, desde –1.79769 x 10308 ata 1.79769 x 10308. O menor valor que se pode representar é 5 x 10–324.

Float pode representar exactamente números enteiros (ou enteiros) entre –pii21084572314 (–(253 – 1)) e pii1943273677553 – 1), inclusive. Este rango é superior aos tipos de datos enteiros de 32 bits (ou 4 bytes) que as bases de datos usan habitualmente. Non obstante, as aplicacións de lenzo non poden representar tipos de datos enteiros de 64 bits (ou 8 bytes). Pode almacenar o número nun campo de texto ou usar unha columna calculada para facer unha copia do número nun campo de texto, para que estea asignado a un tipo de datos de Texto na aplicación de lenzo. Deste xeito, pode manter, amosar e introducir estes valores, ademais de comparalos para determinar se son iguais; non obstante, non pode realizar cálculos numéricos sobre eles neste formulario.

A aritmética de punto flotante é aproximada, polo que ás veces pode dar resultados inesperados con moitos exemplos documentados. Pode esperar que a fórmula 55 / 100 * 100 devolva exactamente 55 e que (55 / 100 * 100) - 55 devolva exactamente cero. Non obstante, esta última fórmula devolve 7.1054 x 10–15, que é moi pequeno, pero non cero. Esta pequena diferenza normalmente non causa ningún problema e a aplicación arredóndaa cando amosa o resultado. Non obstante, pequenas diferenzas poden realizarse nos cálculos posteriores e parecer que ofrecen unha resposta incorrecta.

Os sistemas de bases de datos adoitan almacenar moedas e realizar cálculos mediante matemáticas decimais, o cal ofrece un rango máis pequeno pero un maior control sobre a precisión. De xeito predeterminado, as aplicacións de lenzo atribúen moedas dentro e fóra dos valores de punto flotante; polo tanto, o resultado pode variar dos cálculos que se fan nun tipo de datos decimal nativo. Se este tipo de discrepancia causa problemas, poderá traballar con estes valores como Texto, do mesmo xeito que pode facelo con números enteiros descritos anteriormente nesta sección.

Predefinicións e conversións

Nota

Power Apps Só soporta Float hoxe e é o tipo de todos os números. O apoio decimal engadirase proximamente.

A maioría dos Power Fx hóspedes usan decimal por defecto. Isto repercute:

  • Números literais en fórmulas. O número 1.234 interpretarase como un valor decimal . Por exemplo, a fórmula 1.234 * 2 interpretará o 1.234 e como 2 decimal e devolverá un resultado decimal .
  • Función de valor. Value( "1.234" ) Devolverá un valor decimal . Por exemplo, a fórmula Value( "1.234" ) * 2 a función Valor interpretará os contidos da cadea "1.234" de texto como un decimal.

Para traballar con valores Float, utilízase a función Float . Ampliando o exemplo anterior, Float( 1.234 ) converterá o decimal1.234 en flotar. Float tamén se pode usar como substituto do valor para converter unha cadea que conteña un número de punto flotante como un Float( "1.234" )valor flotante, que se require se o número non pode ser representado como decimal .

En resumo:

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

Mestura de tipos numéricos

Os valores flotantes e decimais poden mesturarse libremente. Cando se mesturan, os valores decimais convértense en valores flotantes debido ao rango máis grande. Dado que isto pode producir unha perda de precisión, é importante non mesturar os dous sen necesidade. Dado que o decimal é o tipo de datos literal por defecto e a maioría das funcións numéricas preservarán o tipo, é relativamente fácil evitar moverse a Float sen desexalo.

Por exemplo, considere o seguinte cálculo usando pac power-fx repl despois de instalar o Power Platform CLI. Dado que ambos os números son decimais, o cálculo faise en decimal, e o resultado conserva toda precisión:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Se pola contra, o segundo operando foi cambiado a Float, entón todo o cálculo faríase en Floate perderíase a pequena parte fraccionaria:

>> 1.0000000000000000000000000001 * Float(2)
2

Data, hora e DataeHora

Fusos horarios

Os valores de data e hora inclúense nestas categorías:

  • Hora local do usuario: estes valores almacénanse en UTC (Hora Universal Coordinada), pero o fuso horario do usuario da aplicación afecta a como a aplicación amosa estes valores e como os especifica o usuario da aplicación. Como exemplo, o mesmo momento aparece de forma diferente a un usuario de Canadá que a un usuario de Xapón.
  • Fuso horario independente: a aplicación mostra estes valores do mesmo xeito e o usuario da aplicación especifícaos do mesmo xeito, independentemente da zona horaria. O mesmo momento aparece da mesma maneira para un usuario de Canadá que para un usuario de Xapón. Os autores das aplicacións que non esperan que as súas aplicacións funcionen en zonas horarias diferentes usan estes valores porque son máis sinxelos.

Esta táboa mostra algúns exemplos:

Tipo de data/hora Valor almacenado na base de datos Valor mostrado e inserido 7 horas ao oeste do UTC Valor mostrado e inserido 4 horas ao leste do UTC
Hora local do usuario Domingo,Maio19,2019
4:00 a.m.
Sábado 18 demaio,2019
9:00 p.m.
Domingo,Maio19,2019
8:00 a.m.
Independente do fuso horario Domingo,Maio19,2019
4:00 a.m.
Domingo,Maio19,2019
4:00 a.m.
Domingo,Maio19,2019
4:00 a.m.

Para a data/horas da Hora local do usuario, as aplicacións de lenzo usan a zona horaria do navegador ou o dispositivo, pero as aplicacións baseadas en modelos utilizan a configuración do usuario en Dataverse. Esta configuración coincide normalmente, pero os resultados difiren se esta configuración non coincide.

Use as funcións DateAdd e TimeZoneInformation para converter a hora local en UTC e viceversa. Consulte os exemplos ao final da documentación para estas funcións.

Equivalentes numéricos

As aplicacións de lenzo manteñen e calculan todos os valores de data e hora, Hora local do usuario ou Fuso horario independente en UTC. A aplicación traduce os valores en función da zona horaria do usuario da aplicación cando os amosa e cando o usuario da aplicación os especifica.

Cando unha aplicación de lenzo le un valor de Fuso horario independente dunha orixe de datos ou escribe ese valor nunha orixe de datos, a aplicación axusta automaticamente o valor para compensar o fuso horario do usuario da aplicación. A aplicación trata entón o valor como un valor UTC, de acordo con todos os demais valores de data/hora da aplicación. Por mor desta compensación, o valor do Fuso horario independente orixinal aparece cando a aplicación axusta o valor UTC para a zona horaria do usuario da aplicación.

Pode observar este comportamento máis de preto empregando a función Value para acceder ao valor numérico subxacente para un valor de data/hora. Esta función devolve o valor da data/hora como número de milisegundos desde o 1 de xaneiro, 1970 00:00:00.000 UTC.

Debido a que cada valor da data/hora mantense en UTC, a fórmula Value( Date( 1970, 1, 1 ) ) non volverá cero na maioría das partes do mundo porque a función Data devolve unha data en UTC. Por exemplo, a fórmula devolvería 28,800,000 nunha zona horaria compensada desde UTC en oito horas. Ese número reflicte o número de milisegundos en oito horas.

Volvendo ao noso exemplo anterior:

Tipo de data/hora Valor almacenado na base de datos Valor mostrado e inserido 7 horas ao oeste do UTC A función Valor devolve
Hora local do usuario Domingo,Maio19,2019
4:00 a.m.
Sábado 18 demaio,2019
9:00 p.m.
1,558,238,400,000
(Domingo,Maio19,2019
4:00 AM UTC)
Independente do fuso horario Domingo,Maio19,2019
4:00 a.m.
Domingo,Maio19,2019
4:00 a.m.
1,558,263,600,000
(Domingo,Maio19,2019
11:00 AM UTC)

Converter tempos Unix

Os tempos Unix reflicten o número de segundos desde o 1 de xaneiro, 1970 00:00:00 UTC. Debido a que as aplicacións de lenzo usan milisegundos en vez de segundos, pode facer a conversión entre ambas multiplicando ou dividindo por 1.000.

Por exemplo, o tempo Unix mostra o 9 de setembro do 2001 ás 01:46:40 UTC como 1,000,000,000. Para amosar ese valor de data/hora nunha aplicación de lenzo, multiplique ese número por 1.000 para convertelo en milisegundos e logo utilíceo nunha función de Text. A fórmula Text( 1000000000 * 1000, DateTimeFormat.UTC ) devolve a cadea 2001-09-09T01:46:40.000Z.

Non obstante, esa función devolve Sábado, 8 de setembro, 2001 18:46:40 se usa o formato DateTimeFormat.LongDateTime24 nunha zona horaria cunha compensación de -7 horas respecto ao horario UTC (7 horas ao oeste de UTC). Este resultado mostra o valor DataTime correctamente en función da zona horaria local.

Para converter a unha hora Unix, divida o resultado do Valor entre 1.000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Se precisa a hora Unix nun valor Data para facer máis cálculos ou mostrar dentro de Power Apps, use esta fórmula:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server ten DataHora, Datahora2e outros tipos de datos de data/hora que non inclúen unha compensación de zona horaria e non indican en que zona horaria están. As aplicacións de lenzo asumen que estes valores están almacenados en UTC e trátaos como Hora local do usuario. Se os valores son independentes do fuso horario, corrixa para as traducións UTC usando TimeZoneOffset.

As aplicacións de lenzo utilizan a información do fuso horario incluída nos campos Datetimeoffset ao converter un valor na representación de UTC interna da aplicación. As aplicacións sempre usan UTC como fuso horario (compensación cero de zona horaria) cando escriben datos.

As aplicacións de lenzo len e escriben valores do tipo de datos Hora en SQL Server como cadeas de texto no Formato de duración ISO 8601. Por exemplo, ten que analizar este formato de cadea e usar a función Time para converter a cadea de texto "PT2H1M39S" nun valor de 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)

Información de data e hora mesturada

Data, Hora e DataHora teñen diferentes nomes, pero todos eles conteñen a mesma información sobre datas e horas.

O valor de Data pode incluír información de hora con el, que normalmente corresponde á medianoite. O valor Hora pode levar información da data, que normalmente corresponde ao 1 de xaneiro de 1970. Dataverse tamén almacena información da hora cun campo Só data pero só mostra por defecto a información de data. De xeito parecido, as aplicacións de lenzo ás veces distinguen entre estes tipos de datos para determinar formatos e controis predeterminados.

Non se recomenda engadir e restar valores de data e hora directamente porque o fuso horario e outras conversións poden provocar resultados confusos. Use a función Valor para converter os valores de data/hora en milisegundos primeiro e teña en conta a zona horaria do usuario da aplicación ou empregue as funcións DateAdd e DateDiff para sumar ou restar a un destes valores.

Eleccións e Si/Non

As eleccións e os tipos de datos de dúas opcións proporcionan dúas ou máis eleccións para que un usuario da aplicación seleccione. Por exemplo, unha elección Estado do pedido pode ofrecer as eleccións Novo, Enviado, Facturado e Pechado. O tipo de datos de dúas opcións só ofrece dúas opcións.

Estes dous tipos de datos mostran as súas etiquetas nun contexto de cadea de texto. Por exemplo, un control de etiqueta mostra unha das opcións de estado do pedido se a propiedade Text do control se establece nunha fórmula que fai referencia a esa elección. As etiquetas de opcións poden localizarse para usuarios de aplicacións en diferentes situacións.

Cando o usuario dunha aplicación selecciona unha opción e garda ese cambio, a aplicación transmite os datos á base de datos, que almacena eses datos nunha representación independente do idioma. Unha opción nunha elección transmítese e almacénase como un número e unha opción nun tipo de datos de dúas opcións transmítese e almacénase como un valor booleano.

As etiquetas son exclusivamente para visualizarse. Non pode realizar comparacións directas coas etiquetas porque son específicas dun idioma. Pola contra, cada elección ten unha enumeración que funciona co valor booleano ou número subxacente. Por exemplo, non pode usar esta fórmula:

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

Pero pode usar esta fórmula:

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

Para as eleccións globais (que comparten as táboas), o nome da enumeración do conxunto de opcións coincide co nome da elección global. Para as eleccións locais (que se centran nunha táboa), o nome pode conter o nome da táboa. Este comportamento evita conflitos se varias táboas teñen eleccións que teñen o mesmo nome. Por exemplo, a táboa Contas pode ter unha elección Estado do pedido e o seu nome podería ser Estado do pedido (contas). Este nome contén un ou máis espazos e parénteses, polo que debe rodealo con comiñas simples se fai referencia a el nunha fórmula.

Ademais, os valores de dúas opcións tamén poden comportarse como valores booleanos. Por exemplo, un valor de dúas opcións chamado EstadoFiscal pode ter as etiquetas Impoñible e Non impoñible, que corresponden a verdadeiro e falso respectivamente. Para demostralo, pode usar esta fórmula:

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

Tamén pode usar esta fórmula equivalente:

If( ThisItem.Taxable, ...