Datatyper
Oplysninger strømmer gennem Power Fx i små, separate værdier, næsten på samme måde som cellerne i et regneark. Data i feltet Fødselsdag og feltet Mærkedag vil f.eks. flyde som en Dato-værdi, der omfatter årstallet, måneden og dagen. Power Fx ved, hvordan disse værdier formateres, begrænser input til det, der er passende for hver enkelt, og dele værdierne med en database. Fødselsdage adskiller sig fra personers mærkedage, men systemet håndterer dem på præcis samme måde. I dette tilfælde er Dato et eksempel på en datatype.
Denne artikel indeholder oplysninger om de datatyper, som Power Fx understøtter. Når Power Fx opretter forbindelse til en ekstern datakilde, knyttes alle datatyper i denne kilde til en datatype i Power Fx.
Datatype | Description | Eksempler |
---|---|---|
Boolean | En sand- eller falsk-værdi. Kan bruges direkte i If, Filter og andre funktioner uden en sammenligning. | sand |
Valg | En valg fra et sæt af indstillinger, der er baseret på et tal. Denne datatype kombinerer en tekstetiket, der er lokaliseret, med en numerisk værdi. Etiketten vises i appen, og den numeriske værdi gemmes og bruges til sammenligninger. Denne datatype understøttes af funktionen Type, hvis en forekomst af et Valgfelt bruges ved navn. | ThisItem.OrderStatus |
Farve | En farvespecifikation, der inkluderer en alfakanal. |
Color.Red ColorValue( "#102030" ) RGBA( 255, 128, 0, 0.5 ) |
Valuta | En valutaværdi, der gemmes i et flydende tal. Valutaværdier er de samme som talværdier med indstillinger for valutaformatering. Datatypen Valuta understøttes ikke af Type-funktionen. |
123 4.56 |
Dato | En dato uden et tidspunkt i tidszonen for appens bruger. | Date( 2019, 5, 16 ) |
DateTime | En dato med et klokkeslæt i tidszonen for appens bruger. | DateTimeValue( "May 16, 2019 1:23:09 PM" ) |
Decimaltal | Et tal med høj præcision, basis 10 handlinger og begrænset område. |
123 Decimal( "1.2345" ) |
Float | Et tal med standardpræcision, basis 2 handlinger og et bredt omfang. |
123 8,903e121 1.234E-200 |
GUID | En Globally Unique Identifier. |
GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
Link | En tekststreng, der indeholder et link. | "https://powerapps.microsoft.com" |
Billede | En URI-adressetekststreng (Universal Resource Identifier) til et billede i .jpeg-, .png-, .SVG-, .gif- eller andre almindelige webbilledformater. Datatypen Image understøttes ikke af Type-funktionen. |
MyImage tilføjet som en appressource "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
Medier | En URI-adressetekststreng til en video- eller lydoptagelse. Datatypen Medie understøttes ikke af Type-funktionen. |
MyVideo tilføjet som en appressource "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
Antal | Et alias for Decimal (de fleste Power Fx-værter) eller Flydende (Lærredapps). Hvis en af talvarianterne kan bruges til en given situation, skal du bruge Tal for at opnå maksimal kompatibilitet. |
123 0.0123 1e4 |
Post | En post med dataværdier. Denne sammensatte datatype indeholder forekomster af andre datatyper, der er angivet i denne emne. Flere oplysninger: Arbejde med tabeller. Denne datatype understøttes af funktionen Type, hvis en forekomst af et Post anvendes. |
{ Virksomhed: "Northwind Traders", Medarbejder: 35, NonProfit: false } |
Postreference | En reference til en post i en tabel. Sådanne referencer bruges ofte sammen med polymorfe opslag. Flere oplysninger: Arbejde med referencer. Denne datatypen understøttes ikke af Type-funktionen. | First(Accounts).Owner |
Tabel | En tabel med poster. Alle poster skal have de samme navne til deres felter med de samme datatyper, og de udeladte felter behandles som tomme. Denne sammensatte datatype indeholder forekomster af andre datatyper, der er angivet i denne emne. Flere oplysninger: Arbejde med tabeller. Denne datatype understøttes af funktionen Type, hvis en forekomst af et Tabel anvendes. |
Tabel( { FirstName: "Sidney", Efternavn: "Higa" }, { Fornavn: "Nancy", Efternavn: "Anderson" } ) |
Tekst | En Unicode-tekststreng. | "Hello, World" |
Klokkeslæt | Et klokkeslæt uden en dato i tidszonen for appens bruger. | Time( 11, 23, 45 ) |
Uden type | Et objekt af en ikke-erklæret type. Det underliggende objekt kan være enhver eksisterende type og kan konverteres til kompatible typer ved hjælp af funktioner som Boolean(), Value(), Table() osv. Du kan finde flere oplysninger under Objekt uden type og Arbejde med JSON. | ParseJSON("{ ""Field"" : 1234 }").Field |
Ugyldig | Den bruges kun af brugerdefinerede funktioner for funktionsmåde og angiver, at en funktion ikke har en returtype. Denne datatypen understøttes ikke af Type-funktionen. Selvom en funktion ikke har en returtype eller -værdi, kan den altid returnere en fejl. | Hej (): Void = { Notify( "Hej!" ) } |
Ja/Nej | En valg ud fra to muligheder, der er baseret på en boolesk værdi. Denne datatype kombinerer en tekstetiket, der er lokaliseret, med en boolesk værdi. Etiketten vises i appen, og den booleske værdi gemmes og bruges til sammenligninger. Denne datatype understøttes af funktionen Type, hvis en forekomst af et Ja/Nej bruges ved navn. | ThisItem.Taxable |
Mange af disse datatyper ligner hinanden og har samme underliggende repræsentation, f.eks et Link-felt, der behandles som Tekst. De ekstra datatyper giver bedre standardfunktioner i formularer og andre kontrolelementer.
Blank
Alle datatyper kan have værdien tom (med andre ord, ingen værdi). Udtrykket "NULL" bruges ofte i databaser for dette begreb.
Brug funktionen Blank med funktionen Set eller Patch til at indstille en variabel eller et felt til tom. Set( x, Blank() ) fjerner f.eks. enhver værdi i den globale variabel x.
Test for en tom værdi vha. funktionen IsBlank. Erstat mulige tommeværdier med værdier, der ikke er tomme, vha. funktionen Coalesce.
Da alle datatyper understøtter tom, har datatyperne Booleske og To muligheder faktisk har tre mulige værdier.
Tekst, Link, Billede og Medie
Alle disse fire datatyper er baseret på en Unicode-tekststreng.
Integreret tekst
Integrerede tekststrenge i en formel er omgivet af dobbelte anførselstegn. Brug to dobbelte anførselstegn sammen for at repræsentere et enkelt dobbelt anførselstegn i tekststrengen. Hvis du f.eks. bruger følgende formel i egenskaben OnSelect til et Button-kontrolelement:
Notify( "Jane said ""Hello, World!""" )
giver det et banner, når der trykkes på knappen, hvor det første og sidste dobbelte anførselstegn udelades (da de afgrænser tekststrengen) og de gentagne dobbelte anførselstegn omkring Hello, World! placeres med dobbelt citationstegn:
Enkelte anførselstegn bruges til identifikatornavne, der indeholder specialtegn, og har ikke nogen særlig betydning i en tekststreng.
Indskudt streng
Brug indskudt streng til at integrere formler i en tekststreng. Det er ofte nemmere at arbejde med og visualiserer outputtet i stedet for at bruge funktionen Concatenate eller & operator.
Indled tekststrengen med et dollartegn $, og indsæt den formel, der skal integreres, i krøllede klammeparenteser { }. Hvis du vil medtage en klammeparentes i tekststrengen, skal du bruge gentagne krøllede klammeparenteser: {{ eller }}. Indskudt streng kan bruges alle de steder, hvor en standardtekststreng kan bruges.
Du kan f.eks. overveje denne formel, hvor globale variabler Apples er angivet til 3 og Bananas til 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Denne formel returnerer tekststrengen Vi har 3 æbler, 4 bananer, hvilket giver en total på 7 frugter. Variablerne Æble og Bananer indsættes i den tekst, der erstatter de kurvede klammeparenteser sammen med resultatet af formelen Æbler+banaer. Mellemrum og andre tegn omkring de krøllede klammeparenteser bevares, som de er.
Integrerede formler kan indeholde alle funktioner eller operatorer. Det eneste, der kræves, er, at resultatet af formlen kan konverteres til en tekststreng. Denne formel indsætter f.eks. NickName, hvis det leveres, eller FirstName, hvis ikke, i en hilsen:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!"
Hvis NickName er angivet til "Joe", opretter denne formel tekststrengen Welcome Joe, it's great to meet you!. Men hvis NickName er tomt, og FirstName er "Joseph", så opretter denne formel Dear Joseph, great to meet you! i stedet.
Indskudt streng kan inkludere standardtekststrenge i den integrerede formel. Hvis der f.eks. hverken blev leveret NickName eller FirstName, kunne vi stadig angive "Friend" som en erstatning:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Indskudte strenge kan endda indlejres. Se på dette eksempel, hvor Fornavn, Mellemnavn og Efternavn er samlet i en hilsen. Selvom en eller to af disse værdier er tomme, vil det korrekte antal mellemrum bevares mellem navnedelene. Hvis ingen af delene er angivet, samles den indre indskudte streng til en tom streng, og den kan erstattes af Coalesce-funktionen med "Ven".
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Fornavn | Mellemnavn | Efternavn | Resultat |
---|---|---|---|
John | Quincy | Doe | Welcome John Quincy Doe! |
John | tom | Doe | Welcome John Doe! |
tom | tom | Doe | Welcome Doe! |
tom | tom | tom | Welcome Friend! |
Linjeskift
Integrerede tekststrenge kan indeholde linjeskift. Du kan f.eks. angive egenskaben Text for et Label-kontrolelement til følgende:
"Line 1
Line 2
Line 3"
Denne formel resulterer i tre linjer, der vises i mærkat-kontrolelementet:
Linjeskift understøttes også med indskudt streng:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Hvilket resulterer i det samme output:
Billed- og medieressourcer
Via menuen Filer kan du tilføje billed-, video- og lydfiler som appressourcer. Navnet på den importerede fil bliver til ressourcenavnet i appen. I dette grafikelement er logoet Northwind Traders, som hedder nwindlogo, blevet føjet til appen:
Hvis du vil bruge denne ressource i en app, skal du angive den i egenskaben Image til et Image-kontrolelement:
URI-adresser for billeder og andre medier
Du kan over grave en smule dybere til dette sidste eksempel ved at angive egenskaben Text til et Label-kontrolelement til nwindlogo. Etiketten viser en tekststreng:
Lærredapps refererer til hvert billede eller en anden mediefil, uanset om de er i skyen eller tilføjet som en appressource af en URI-adressetekststreng.
Egenskaben Image for et image-kontrolelement accepterer f.eks. ikke kun appressourcer, men også links til billeder på internettet, f.eks. "https://northwindtraders.com/logo.jpg". Egenskaben accepterer også indbyggede billeder, der bruger dataenes URI-adresseskema som i dette eksempel:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
Den pågældende URI-adresse viser en skaleret udgave af to lilla diamanter:
Du kan få vist det sidst optagede billede i et Camera-kontrolelement, hvis du har indstillet egenskaben Image af et image-kontrolelement til egenskaben Photoi kamerakontrolelementet. Appen beholder billedet i hukommelsen, og egenskaben Photo for kameraets kontrolelement returnerer en URI-adressereference til billedet. Du kan f.eks. tage et billede, og egenskaben Photo i kameraet kan returnere "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
Du bruger en URI-adresse til at referere til et billede eller en anden mediefil, der er gemt i en database. På den måde hentes de faktiske data først, når der er behov for det. En vedhæftet fil i en Microsoft Dataverse-tabel kan f.eks. returnere "appres://datasources/Contacts/table/..." Som i kameraets eksempel kan du få vist dette billede ved at indstille egenskaben Image for et image-kontrolelement til denne reference, der henter de binære data.
Når du gemmer en mediedatatype, f.eks. et billede, i en database, sender appen de faktiske billed- eller mediedata, ikke URI-adressereferencen.
Størrelsesgrænser
Som tekststrenge og URI-adresser har disse datatyper ingen forudindstillet grænse for deres længde.
De binære data, som disse datatyper refererer til, har heller ikke nogen forudindstillet grænse for størrelse. Et billede, som f.eks. er oprettet via kameraets kontrolelement, der nu refereres til som "appres://...", kan være så stort og have en så høj opløsning, som enhedens kamera kan håndtere. Opløsningen, rammehastigheden og andre attributter for mediefiler er ikke begrænset af datatypen, men specifikke kontrolelementer til afspilning og optagelse af medier kan have deres egne begrænsninger.
Alle datastørrelser er dog underlagt mængden af tilgængelig hukommelse i appen. Browsere, der kører på en stationær computer, understøtter typisk mere end 100 MB data. Mængden af tilgængelig hukommelse på en enhed, f.eks. en telefon, kan imidlertid være langt mindre, typisk i intervallet 30-70 MB. Du kan finde ud af, om appen kører inden for disse grænser, ved at teste almindelige scenarier på alle enheder, den skal køre på.
Den bedste fremgangsmåde er kun at opbevare data i hukommelsen så længe, det er nødvendigt. Upload billeder til en database, så snart du kan. Download kun billeder, når appens brugere anmoder om dem.
Tal
Bemærk
Power Apps understøtter kun Flydende i dag, og det er typen af alle tal. Decimal-understøttelse tilføjes snart.
Power Fx understøtter to typer tal: Decimal og Flydende (med synonymer Tal og Valuta).
Decimal er bedst til de fleste forretningsberegninger. Det kan nøjagtigt repræsentere tal i base 10, hvilket betyder, at det 0.1
kan repræsenteres nøjagtigt og undgår afrundingsfejl under beregninger. Den har et stort udvalg nok til alle forretningsmæssige behov, op til 1028 med op til 28 præcisionscifre.
Decimal er den numeriske standarddatatype for de fleste Power Fx-værter, der bruges, hvis der blot skrives 2*2
.
Flydende er bedst til beregninger af beregninger. Det kan repræsentere tal i et større interval, op til 10308. Præcision er begrænset til 15 decimaler, og beregninger er baseret på basis 2, så de kan ikke repræsentere almindelige decimalværdier. Flydende har også en højere ydeevne og er foretrukne, hvis det er en faktor og præcision, der ikke er vigtig.
Decimaltal
Decimaldatatypen bruger som oftest .NET-decimaldatatype. Nogle værter, f.eks. Dataverse-formelkolonner, der køres i SQL Serer, bruger decimaldatatypen SQL Server.
Decimal laver matematik på samme måde, som du lærte i skolen, ved hjælp af base 10-cifre, hvilket er vigtigt for at undgå afrundingsfejl fra meget små forskelle, der kan akkumuleres, når du bruger base 2-matematik (som brugt af Flydende).
Omfanget går fra positiv 79,228,162,514,264,337,593,543,950,335 til negativ 79,228,162,514,264,337,593,543,950,335. Decimalseparatoren kan placeres alle steder i disse tal med op til 28 præcisionstal og stadig være repræsenteret. F.eks. kan 79,228,162,514,264.337593543950335 repræsenteres nøjagtigt på samme måde som 7.9228162514264337593543950335.
Flydende pointtal
Datatyperne Flydende kendes også som Tal eller Valuta og bruger IEEE 754 flydende pointstandard med dobbeltpræcision. Denne standard indeholder en lang række tal, som du kan bruge til at arbejde fra -1,79769 x 10308 til 1,79769 x 10308. Den mindste værdi, der kan repræsenteres, er 5 x 10-324.
Flydende kan nøjagtigt repræsentere hele tal (eller heltal) mellem -9.007.199.254.740.991 (-(253 - 1)) og 9.007.199.254.740.991 (253 - 1), inklusive. Dette område er større end de 32 bit (eller 4 byte) heltalsdatatyper, som databaser normalt bruger. Lærredapps kan imidlertid ikke repræsentere 64 bit (eller 8 byte) heltalsdatatyper. Du kan gemme tallet i et tekstfelt eller bruge en beregnet kolonne til at oprette en kopi af tallet i et tekstfelt, så det er knyttet til en Tekst-datatype i lærredappen. På denne måde kan du opbevare, få vist og angive disse værdier og sammenligne dem for at afgøre, om de er ens. Du kan dog ikke udføre numeriske beregninger på dem i denne formular.
Flydende tal-aritmetik er omtrentligt, så det kan nogen gange give uventede resultater med mange dokumenterede eksempler. Du vil måske forvente, at formlen 55/100 * 100 returnerer præcis 55, og (55/100 * 100)-55 returnerer præcis nul. Den sidstnævnte formel returnerer dog 7,1054 x 10-15, hvilket er meget lille, men ikke nul. Denne lille forskel medfører ikke normalt et problem, og appen runder den væk, når resultatet vises. Små forskelle kan dog sammensættes i efterfølgende beregninger og se ud til at give det forkerte svar.
Databasesystemer gemmer ofte valutaer og udfører beregninger ved hjælp af decimalmatematik, hvilket giver et mindre interval, men større kontrol over præcisionen. Som standard knytter lærredapps valutaer til og ud af flydende tal-værdier. Resultatet kan derfor være anderledes end beregninger, der udføres i oprindelige decimaltaldatatype. Afhængigt af appens præcisionsbehov kan det være en god ide at arbejde med disse værdier som tekst, ligesom det er beskrevet for store heltal tidligere.
Standarder og konverteringer
Bemærk
Power Apps understøtter kun Flydende i dag, og det er typen af alle tal. Decimal-understøttelse tilføjes snart.
De fleste Power Fx-værter bruger Decimal som standard. At have denne standard betyder:
- Literalnumre i formler. Værdien
1.234
vises som en Decimal-værdi. F.eks. fortolker formlen1.234 * 2
1.234
og2
som Decimal og returnerer et Decimal resultat. - Valutafunktion.
Value( "1.234" )
returnerer en Decimal-værdi. F.eks. i formlenValue( "1.234" ) * 2
, fortolker Value funktionen indholdet af tekststrengen"1.234"
som et Decimal.
Til at arbejde med Flydende værdier bruges funktionen Flydende. Ved at udvide vores eksempel Float( 1.234 )
konverteres decimalen1.234
til flydende.
Flydende kan også bruges som erstatning for Værdi for at konvertere en streng, der indeholder et flydende tal, f.eks. Float( "1.234" )
til en Flydende værdi, hvilket er nødvendigt, hvis antallet ikke kan repræsenteres som en Decimal.
Kort sagt:
Brug | Decimaltal | Float |
---|---|---|
Literalnumre i formler | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Konvertering fra tekststreng | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Konvertering mellem numeriske typer | Decimal( float ) |
Float( decimal ) |
Konvertering til tekststreng | Text( decimal ) |
Text( float ) |
Blanding af numeriske typer
Flydende- og Decimalværdier kan blandet sammen. Når blandede Decimalværdier konverteres til Flydende værdier, fordi området er større. Da denne konvertering kan resultere i tab af præcision, er det vigtigt ikke at blande de to unødigt. Da Decimal er den bogstavelige standarddatatype, og de fleste numeriske funktioner bevarer typen, er det relativt nemt at undgå at flytte til uden at ønske det Flydende.
Overvej f.eks. følgende beregning ved hjælp af pac power-fx repl
, når du har installeret Power Platform CLI. Da begge tal er Decimal-tal, foretages beregningen med Decimal-tal, og resultatet bevarer fuld præcision:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Hvis den anden operand i stedet blev ændret til Flydende, ville hele beregningen ske i Flydende, og den lille brøkdel af beholdningen ville gå tabt:
>> 1.0000000000000000000000000001 * Float(2)
2
Dato, Klokkeslæt og DateTime
Tidszoner
Dato- og klokkeslætsværdier falder i disse kategorier:
- Brugers lokaltid : Disse værdier gemmes i UTC (Coordinated Universal Time), men app-brugerens tidszone påvirker, hvordan appen viser disse værdier, og hvordan de pågældende app-brugere angiver dem. Som eksempel vises det samme tidspunkt forskelligt for en bruger i Canada, end det vises for er en bruger i Japan.
- Tidszoneuafhængig : Appen viser disse værdier på samme måde, og app-brugeren angiver dem på samme måde, uanset tidszone. Det samme tidspunkt vises på samme måde for en bruger i Canada, som det vises for er en bruger i Japan. App-forfattere, der ikke forventer, at deres apps køres i forskellige tidszoner, bruger disse værdier, da de er mere simple at bruge.
I denne tabel vises nogle eksempler:
Dato/klokkeslætstype | Værdi gemt i databasen | Værdi vist og indtastet 7 timer vest af UTC | Værdi vist og indtastet 4 timer øst af UTC |
---|---|---|---|
Brugers lokaltid | Søndag d.19maj2019 4:00 |
Lørdag d.18.maj2019 21:00 |
Søndag d.19maj2019 8:00 |
Tidszoneuafhængig | Søndag d.19maj2019 4:00 |
Søndag d.19maj2019 4:00 |
Søndag d.19maj2019 4:00 |
For dato/klokkeslæt i Brugers lokaltid bruger lærredappen webbrowserens eller enhedens tidszone, men modelstyrede apps bruger brugerens indstilling i Dataverse. Disse indstillinger matcher typisk, men resultatet vil være forskellige, hvis disse indstillinger er forskellige.
Brug funktionerne DateAdd og TimeZoneInformation til at konvertere den lokale tid til UTC og tilbage igen. Se eksemplerne i slutningen af dokumentationen for disse funktioner.
Numeriske ækvivalenter
Lærredapps indeholder og beregner alle dato/klokkeslætsværdier, uanset om der bruges Brugers lokaltid eller Tidszoneuafhængig i UTC. Appen oversætter værdierne på baggrund af app-brugerens tidszone, når de vises, og når app-brugeren angiver dem.
Når en lærredapp læser en Tidszoneuafhængig værdi fra en datakilde eller skriver en sådan værdi til en datakilde, tilpasser appen automatisk værdien for at kompensere for app-brugerens tidszone. Derefter behandler appen værdien som en UTC-værdi, som er konsistent med alle andre dato/klokkeslætsværdier i appen. På grund af denne kompensation vises den oprindelige Tidszoneuafhængige værdi, når appen justerer UTC-værdien for app-brugerens tidszone.
Du kan se denne funktionsmåde mere tydeligt ved at bruge funktionen Value til at få adgang til den underliggende numeriske værdi for en dato/klokkeslætsværdi. Denne funktion returnerer dato/klokkeslætsværdien som antallet af millisekunder siden 1. januar 1970 00:00:00.000 UTC.
Da alle dato/klokkeslætsværdier er i UTC-tid, returnerer formlen Value( Date( 1970, 1, 1 ) ) ikke nul i de fleste dele af verden, fordi Date-funktionen returnerer en dato i UTC-tid. Formlen returnerer f.eks. 28.800.000 i en tidszone, der er forskudt fra UTC med otte timer. Dette tal afspejler antallet af millisekunder i otte timer.
Vend tilbage til eksemplet:
Dato/klokkeslætstype | Værdi gemt i databasen | Værdi vist og indtastet 7 timer vest af UTC | Funktionen Value returnerer |
---|---|---|---|
Brugers lokaltid | Søndag d.19maj2019 4:00 |
Lørdag d.18.maj2019 21:00 |
1,558,238,400,000 (Søndag d.19maj2019 4:00 AM UTC) |
Tidszoneuafhængig | Søndag d.19maj2019 4:00 |
Søndag d.19maj2019 4:00 |
1,558,263,600,000 (Søndag d.19maj2019 11:00 AM UTC) |
Konvertering af UNIX-klokkeslæt
UNIX-klokkeslæt afspejler antallet af sekunder siden 1. januar 1970 00:00:00 UTC. Da lærredapps bruger millisekunder i stedet for sekunder, kan du konvertere mellem de to ved at multiplicere eller dividere med 1.000.
UNIX-klokkeslæt viser f.eks. 9. september 2001 kl. 01:46:40 UTC som 1.000.000.000. Hvis du vil have vist denne dato/klokkeslætsværdi på en lærredapp, skal du multiplicere det pågældende tal med 1.000 for at konvertere det til millisekunder og derefter bruge den i en Text-funktion. Formlen Text( 1000000000 * 1000, DateTimeFormat.UTC ) returnerer strengen 2001-09-09T 01:46:40.000Z.
Denne funktion returnerer dog lørdag 8. september 2001 18:46:40, hvis du bruger DateTimeFormat. LongDateTime24 -formatet i en tidszone, hvor der er 7 timers forskydning fra UTC (7 timer vest i forhold til UTC). Resultatet viser værdien DateTimekorrekt baseret på den lokale tidszone.
Hvis du vil konvertere til et UNIX-klokkeslæt, skal du dividere resultatet fra Værdi med 1.000:
RoundDown( Value( UnixTime ) / 1000, 0 )
Hvis du har brug for UNIX-klokkeslættet i en Dato-værdi for yderligere beregninger eller til at blive vist i Power Apps, skal du bruge denne formel:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )
SQL Server
SQL Server har Datetime, Datetime2 og andre dato/klokkeslætsdatatyper, der ikke inkluderer en tidszone, og som ikke angiver, hvilken tidszone de er i. Lærredapps antager, at disse værdier gemmes i UTC og behandles som Brugers lokaltid. Hvis værdierne skal være tidszoneuafhængige, der er korrekte til UTC-konvertering, skal du bruge funktionen TimeZoneOffset.
Lærredpps bruger de inkluderede tidszoneoplysninger i felter Datetimeoffset, når en værdi konverteres til appens interne UTC-repræsentation. Apps bruger altid UTC som tidszone (nul tidszoneforskydning), når de skriver data.
Lærredapps læser og skriver værdier af datatypen Time i SQL Server som tekststrenge i ISO 8601-varighedsformatet . Du skal f.eks. fortolke strengformatet og bruge funktionen Time til at konvertere tekststrengen "PT2H1M39S" til en Time-værdi:
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)
Blande dato- og klokkeslætsoplysninger
Dato, Klokkeslæt og DateTime har forskellige navne, men de indeholder alle de samme oplysninger om datoer og klokkeslæt.
En Dato-værdi kan indeholde oplysninger om klokkeslæt, som normalt er midnat. En Klokkeslæt-værdi kan indeholde datooplysninger, som normalt er 1. januar 1970. Dataverse gemmer også tidsoplysninger i et Kun dato-felt, men viser kun datooplysningerne som standard. På samme måde skelner lærredapps sommetider mellem disse datatyper for at bestemme standardformater og kontrolelementer.
Det anbefales ikke at tilføje og fratrække dato- og klokkeslætsværdier direkte, da tidszoner og andre konverteringer kan medføre forvirrende resultater. Du kan bruge funktionen Value til at konvertere dato/klokkeslætsværdier til millisekunder først og tage højde for app-brugerens tidszone, eller du kan bruge funktionerne DateAdd og DateDiff til at addere til eller subtrahere fra en af disse værdier.
Valgmuligheder og Ja/Nej
Valgmuligheder og datatyper med to indstillinger giver en appbruger to eller flere valgmuligheder. Et valg af Ordrestatus kan f.eks. tilbyde valgmulighederne Ny, Leveret, Faktureret og Lukket. Datatypen med to indstillinger giver kun to valgmuligheder.
I begge disse datatyper vises deres etiketter i en tekststrengkontekst. Et etiketkontrolelement viser f.eks. en af indstillingerne for ordrestatus, hvis objektets egenskab Text er angivet til en formel, der refererer til det pågældende valg. Indstillingsetiketter kan være lokaliserede til app-brugere forskellige steder.
Når en appbruger vælger en indstilling og gemmer ændringen, overfører appen dataene til databasen, som lagrer de pågældende data i en repræsentation, der er uafhængig af sproget. En indstilling i et valg overføres og gemmes som et tal, og en indstilling i en datatype med to indstillinger overføres og gemmes som en boolesk værdi.
Etiketterne er kun til visningsformål. Du kan ikke udføre direkte sammenligning med etiketterne, fordi de er specifikke for et bestemt sprog. De enkelte valg indeholder i stedet en fasttekst, der fungerer sammen med det underliggende tal eller den booleske værdi. Du kan f.eks. ikke bruge denne formel:
If( ThisItem.OrderStatus = "Active", ...
Men du kan bruge denne formel:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
I forbindelse med globale valg (som tabeller deler) svarer navnet på fastteksten i den grupperede indstilling til navnet på det globale valg. Hvis det er lokale valg (som er overført til en tabel), kan navnet indeholde navnet på tabellen. Denne funktionsmåde forhindrer konflikter, hvis flere tabeller har valgmuligheder med samme navn. Tabellen Konti kan f.eks. have valget Ordrestatus, og dens navn kan være Ordrestatus (Konti). Navnet indeholder et eller flere mellemrum og parenteser, så du skal omslutte det med enkelte anførselstegn, hvis du refererer til det i en formel.
Derudover kan værdier med to indstillinger også opføre sig som booleske værdier. En værdi for to indstillinger med navnet TaxStatus kan f.eks. have etiketter Afgiftspligtig og Ikke afgiftspligtig, som svarer til hhv. sand og falsk. Du kan f.eks. bruge denne formel:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Du kan også bruge denne tilsvarende formel:
If( ThisItem.Taxable, ...