Datatyper
Informationen passerar genom Power Fx i små, diskreta värden, precis som cellerna i ett kalkylblad. Till exempel data i fältet Födelsedag och fältet Årsdag skulle till exempel kunna passera som värdet Datum som omfattar året, månaden och dagen. Power Fx vet hur de här värdena ska formateras, begränsar indata till vad som passar för varje och delar värden med en databas. Födelsedagar skiljer sig från årsdagarna till människor, men systemet hanteras på exakt samma sätt. I det här fallet är Datum är ett exempel på en datatyp.
Den här artikeln innehåller information om de datatyper som Power Fx stöder. När Power Fx ansluter till en extern datakälla mappas varje datatyp i den källan till en datatyp för arbetsyteappar i Power Fx.
Datatyp | Description | Exempel |
---|---|---|
Boolean | Ett värde för true eller false. Kan användas direkt i If, filter och andra funktioner utan jämförelse. | sant |
Val | Ett alternativ från en uppsättning alternativ, med ett nummer. Den här datatypen kombinerar en lokaliserad textetikett med ett numeriskt värde. Etiketten visas i programmet och det numeriska värdet lagras och används för jämförelser. Den här datatypen stöds av funktionen Typ om en förekomst av ett Alternativ-fält används vid namn. | ThisItem.OrderStatus |
Färg | En färgspecifikation, inklusive en alfakanal. |
Color.Red ColorValue( "#102030" ) RGBA( 255, 128, 0, 0.5 ) |
Valuta | Ett valutavärde som lagras i ett flyttal. Valutavärden är samma som numeriska värden med alternativ för valutaformat. Datatypen valuta stöds inte av funktionen Typ. |
123 4.56 |
Datum | Ett datum utan tid, i tidszonen för programmets användare. | Date( 2019, 5, 16 ) |
DatumTid | Ett datum med en tid, i tidszonen för programmets användare. | DateTimeValue( "May 16, 2019 1:23:09 PM" ) |
Decimal | Ett tal med hög precision, bas 10-åtgärder och ett begränsat intervall. |
123 Decimal( "1.2345" ) |
Float | Ett tal med standardprecision, bas 2-åtgärder och ett brett intervall. |
123 8.903e121 1.234e-200 |
GUID | En globalt unik identifierare. |
GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
Hyperlänk | En textsträng som innehåller en hyperlänk. | "https://powerapps.microsoft.com" |
Bild | En Universal Resource Identifier (URI) textsträng till en bild i .jpeg, .png, .svg, .gif eller or något annat vanligt webbbildformat. Datatypen Bild stöds inte av funktionen Typ. |
Mina bilder har lagts till som en programresurs "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
Medium | En URI-textsträng till en inspelning med video eller ljud. Datatypen Media stöds inte av funktionen Typ. |
MyVideo har lagts till som en programresurs "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
Antal | Ett alias för Decimal (de flesta Power Fx-värdar) eller Flyttal (arbetsyteappar). Om någon av talvarianterna kan användas för en viss situation använder du Nummer för maximal kompatibilitet. |
123 0.0123 1e4 |
Post | En post med datavärden. Den här sammansatta datatypen innehåller instanser av andra datatyper som visas i det här ämnet. Mer information: Arbeta med tabeller. Den här datatypen stöds av funktionen Typ om en förekomst av ett Post används. |
{ Company: "Northwind Traders", Personal: 35, NonProfit: false } |
Postreferens | En referens till en post i en tabell. Sådana referenser används ofta med polymorfa uppslag. Mer information: Arbeta med referenser. Den här datatypen stöds inte av funktionen Typ. | First(Accounts).Owner |
Tabell | En tabell med poster. Alla poster måste ha samma namn för sina fält som har samma datatyper och utelämnade fält behandlas som tomma. Den här sammansatta datatypen innehåller instanser av andra datatyper som visas i det här ämnet. Mer information: Arbeta med tabeller. Den här datatypen stöds av funktionen Typ om en förekomst av ett Tabell används. |
Table( { FirstName: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
Text | En Unicode-textsträng. | "Hello, World" |
Time | En tid utan ett datum, i tidszonen för programmets användare. | Time( 11, 23, 45 ) |
Typlöst | Ett objekt av en odeklarerad typ. Underliggande objekt kan vara av valfri befintlig typ och kan konverteras till kompatibla typer med hjälp av funktioner som Boolean(), Value(), Table() etc. För mer information se Objekt utan angiven typ och Arbeta med JSON. | ParseJSON("{ ""Field"" : 1234 }").Field |
Annullera | Används endast av användardefinierade beteendefunktioner, det indikerar att en funktion inte har någon returtyp. Den här datatypen stöds inte av funktionen Typ. Även om en funktion inte har någon returtyp eller något returvärde kan den alltid returnera ett fel. | Hi(): Void = { Notify( "Hello!" ) } |
Ja/Nej | Ett alternativ från en uppsättning med två alternativ, med ett booleskt värde. Den här datatypen kombinerar en lokaliserad textetikett med ett boolesk värde. Etiketten visas i programmet och det booleska värdet lagras och används för jämförelser. Den här datatypen stöds av funktionen Typ om en förekomst av ett Ja/nej-fält används vid namn. | ThisItem.Taxable |
Många av dessa data typer är likartade och har samma underliggande representation, t.ex. Hyperlänk som behandlas som Text. De ytterligare datatyperna ger bättre standardupplevelser i formulär och andra kontroller.
Blank
Alla datatyper kan ha ett tomt värde tom (d.v.s. inget värde). Termen "null" används ofta i databaser för det här konceptet.
Använd funktionen Blank med Set eller Patch för att ange en variabel eller ett fält som tomt. Om du till exempel Set( x, Blank() ) tas alla värden i den globala variabeln x.
Testa ett tomt värde genom att använda funktionen IsBlank . Ersätt möjliga tomma värden med icke-tomma värden med hjälp av funktionen Coalesce.
Eftersom alla datatyper är tomma, kommer datatyperna Boolesk och Två alternativ i praktiken tre möjliga värden.
Text, hyperlänk, bild och media
Alla fyra datatyperna bygger på en Unicode textsträng.
Inbäddad text
Inbäddade textsträngar i en formel omges av dubbla citattecken. Använd två dubbla citattecken tillsammans för att representera samma dubbla citattecken i textsträngen. Du kan till exempel använda följande formel i egenskapen OnSelect för kontrollen Button:
Notify( "Jane said ""Hello, World!""" )
resulterar i en banderoll när knappen trycks ned, där det första och sista dubbla citattecknen utelämnas (när de begränsar textsträngen) och de upprepade dubbla citattecknen runt Hej världen! ersätts med enkelt dubbelt citattecken:
Enkla citattecken används för identifierarnamn som innehåller specialtecken och som inte har några särskilda egenskaper inom en textsträng.
Stränginterpolering
Använd strängfiltring för att infoga formeln i en textsträng. Detta tillvägagångssätt är ofta lättare att arbeta med och visualisera resultatet än att använda funktionen Concatenate eller operatören &.
Prefix textsträngen med ett dollartecken $ och omge formeln som ska inbäddades med klammerparenteser {}. Om du vill ta med en klammerparentes i textsträngen använder du upprepade, klammerparenteser: {{ eller }}. Stränginterpolering kan användas var som helst där en standardtextsträng kan användas.
Du kan till exempel använda den här formeln med globala variabler som Äpplen anges till 3 och Bananer anges till 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Formeln returnerar textsträngen Vi har 3 äpplen, 4 bananer, vilket ger totalt 7 frukter. Variablerna Apples och Bananas infogas i texten och ersätter klammerparenteser, tillsammans med resultatet av den matematiska formeln Apples+Bananas. Blanksteg och andra tecken runt klammerparenteserna bevaras som de är.
Inbäddade formeln kan innehålla alla funktioner eller operatorer. Allt som krävs är att resultatet av formeln kan tvingas till en textsträng. Den här formeln infogas till exempel NickName om det anges, eller om inte, FirstName:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!"
Om NickName anges till "Joe", ger den här formeln ut textsträngen Välkommen Joe, det är kul att träffa dig!. Men om NickName är tom och FirstName är "Joseph", då producerar denna formel Hej Josef, kul att träffa dig!
Stränginterpolering kan innehålla standardtextsträngar i den inbäddade formeln. Om varken NickName eller FirstName angavs kunde vi ändå ange "Vän" som ersättning:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Stränginterpoleringar kan till och med kapslas. Tänk på det här exemplet För, Mellan och Efter namn kombineras till en hälsning. Även om ett eller två av dessa värden är tomma kommer rätt antal blanksteg att finnas mellan namndelarna. Om inga delar tillhandahålls döljs den innersta strängen med en tom sträng och funktionen Coalesce av "Vän".
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Första | Mitten | Sista | Result |
---|---|---|---|
John | Qunicy | Doe | Welcome John Quincy Doe! |
John | blank | Doe | Welcome John Doe! |
blank | blank | Doe | Welcome Doe! |
blank | blank | blank | Welcome Friend! |
Nya rader
Inbäddade textsträngar kan innehålla nya rader. Du kan till exempel ange följande som egenskapen Text för en Label-kontroll:
"Line 1
Line 2
Line 3"
Den här formeln ovan resulterar i tre rader som visas i label-kontrollen:
Nya rader stöds också med stränginterpolering:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Vilket resulterar i samma utdata:
Bild- och medieresurser
Via Arkiv-menyn kan du lägga till bild-, video- och ljudfiler som appresurser. Namnet på den importerade filen blir resursnamnet i programmet. I det här grafikobjektet har Northwind Traders-logotypen med namnet nwindlogo, har lagts till i en app:
Om du vill använda den här resursen i en app anger du den i egenskapen Bild i kontroll Image:
URI för bilder och andra media
Du kan göra en del av det senaste exemplet lite djupare genom att ange egenskapen Text för en Etikett kontroll till nwindlogo. Etiketten visar en textsträng:
Arbetsyteappar refererar till varje bild eller annan mediefil, oavsett om den är i molnet eller lagts till som en programresurs, med en URI-textsträng.
Till exempel egenskapen Image för en bildkontroll accepterar till exempel inte bara appresurser utan även länkar till bilder på webben, t.ex. "https://northwindtraders.com/logo.jpg"". Egenskapen accepterar även inbyggda bilder som använder data-URI-schemat, som i det här exemplet:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
Denna URI visar en uppskalad version av två lila diamanter:
Du kan visa den senaste bilden som fångades in i en Camera-kontroll om du anger egenskapen Image för en bildkontroll till egenskapen Photo för Camera-kontrollen. programmet lagrar bilden i minnet och egenskapen Photo för kamerakontrollen returnerar en URI-referens till bilden. Du kan till exempel ta en bild och kamerans egenskap Photo kan returnera "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
Du använder en URI för att referera till en bild eller en annan mediefil som lagras i en databas. På så sätt hämtar inte appen faktiska data förrän de behövs. En bifogad fil i Microsoft Dataverse en tabell kan till exempel returnera "appres://datasources/Contacts/table/..." Som i exemplet med kamera kan du visa bilden genom att ange egenskapen Image för en bildkontroll som hämtar binärdata.
När du sparar en mediedatatyp, t.ex. en bild, i en databas skickar programmet själva bilden eller medieinformationen, inte URI-referensen.
Storleksbegränsningar
Som textsträngar och URI:er har de här datatyperna ingen förinställd begränsning av längden.
De binära data som datatyperna refererar till har inte heller någon förinställd gräns för storlek. En bild som du har hämtat via kamerakontrollen som har refererats som "appres://..." kan vara lika stor och hög upplösning eftersom enhetens kamera kan finnas. Upplösning, bildrutehastighet och andra attribut för mediefiler är inte begränsade av datatypen, men specifika kontroller för uppspelning och hämtning av media kan ha egna begränsningar.
Mängden tillgängligt minne i programmet påverkas emellertid av alla datastorlekar. Webbläsare som körs på en stationär dator har vanligtvis stöd för mer än 100 MB data. Mängden tillgängligt minne på en enhet, t.ex. en telefon, kan emellertid vara mycket lägre, vanligtvis inom intervallet 30-70 megabyte. Om du vill avgöra om programmet kommer att köras inom dessa gränser testar du vanliga scenarier på alla enheter som det ska köras på.
Du bör endast lagra data i minnet om det behövs. Överför bilder till en databas så fort du kan. Hämta endast bilder när programmets användare begär dem.
Nummer
Kommentar
Power Apps har endast stöd för Flyttal i dag och det är typen av alla tal. Decimal-stöd läggs snart till.
Power Fx har stöd för två olika tal: Decimal och Flyttal (med synonymer Nummer och Valuta).
Decimal är bäst för de flesta affärsberäkningar. Den kan exakt representera tal i bas 10, vilket innebär att den 0.1
kan representeras exakt och undviker avrundningsfel under beräkningar. Den har ett tillräckligt stort utbud för alla affärs behov, upp till 1028 med upp till 28 siffror med precision.
Decimal är standarddatatypen för de flesta Power Fx-värdar som används om man bara skriver 2*2
.
Flyttal passar bäst för vetenskapliga beräkningar. Det kan representera tal i ett större intervall, upp till 10308. Precisionen begränsas till 15 decimaler och baseras på grund 2 så att den inte kan representera några vanliga decimalvärden exakt. Flyttal har också högre prestanda och används inte om det är en faktor och precisionen inte är kritisk.
Decimaltal
I datatypen Decimal används oftast decimaldatatypen .NET. På vissa värddatorer, t.ex. Dataverse-formelkolumner som körs i SQL Serer, används decimaldatatypen SQL Server.
Decimal gör matematik på samma sätt som du lärde dig i skolan, med bas 10 siffror, viktigt för att undvika avrundningsfel från mycket små skillnader som kan ackumuleras när du använder bas 2 matematik (som används av Flyttal).
Intervallet är från positiv 79,228,162,514,264,337,593,543,950,335 till negativt 79,228,162,514,264,337,593,543,950,335. Decimalavgränsaren kan placeras var som helst i talen med upp till 28 precisionssiffror och är fortfarande exakt representerad. Till exempel 79,228,162,514,264.337593543950335 kan representeras exakt, även 7.9228162514264337593543950335.
Flyttalsnummer
Datatyperna Flyttal, även kallad Tal eller Valuta, använder IEEE 754 flyttalsstandard med dubbel precision. Denna standard tillhandahåller ett mycket stort antal som arbetas i, från –1,79769 x 10308 till 1,79769 x 10308. Det minsta värdet som kan representeras är 5 x 10– 324.
Flyttal kan exakt representera heltal (eller heltal) mellan –9,007,199,254,740,991 (–(253 – 1)) och 9,007,199,254,740,991 (253 – 1), inklusive. Det här intervallet är större än de 32-bitars (eller 4 byte) heltals datatyperna som databaser använder ofta. Arbetsyteappar kan emellertid inte representera 64-bitars (eller 8 byte) heltals datatyper. Du kanske vill lagra numret i ett textfält eller använda en beräknad kolumn för att göra en kopia av siffran i ett textfält, så att den är mappad till datatypen Text i arbetsyteappen. På det här sättet kan du hålla i, visa och ange dessa värden och jämföra dem för att avgöra om de är likvärdiga eller inte. Men du kan inte göra numeriska beräkningar på dem i det här formuläret.
Aritmetiskt flyttal är ungefärliga, så det kan ibland ge oväntade resultat med många dokumenterade exempel. Du kan förvänta dig att formeln 55 / 100 * 100 för att returnera exakt 55 och (55 / 100 * 100) – 55 för att returnera exakt noll. Den sistnämnda formeln returnerar emellertid 7,1054 x 10– 15, vilket är mycket liten men inte noll. Att den här små skillnaden vanligen orsakar ett problem och att programmet avrundar den bort när resultatet visades. Små skillnader kan emellertid vara desamma i framtida beräkningar och visas för att ge fel svar.
I databassystem lagras ofta valutor och beräkningar med decimal matematik, vilket ger ett mindre intervall men bättre kontroll över precisionen. Som standard mappar arbetsyteappar valutor för ingående och utgående flyttalsvärden. Därför kan resultatet skilja sig från beräkningar som görs i en ursprunglig decimal datatyp. Beroende på appens precisionsbehov kanske du vill arbeta med dessa värden som text, precis som beskrivits för stora heltal tidigare.
Standardvärden och konverteringar
Obs
Power Apps har endast stöd för Flyttal i dag och det är typen av alla tal. Decimal-stöd läggs snart till.
De flesta Power Fx-värdar använder Decimal. Att ha den här standardinställningen innebär:
- Literalnummer i formeln. Numret
1.234
tolkas som ett Decimalvärde. Till exempel, formeln1.234 * 2
tolkar1.234
och2
som decimal och returnerar ett decimalresultat. - Funktionen Value.
Value( "1.234" )
returnerar ett decimalvärde. I formelnValue( "1.234" ) * 2
, tolkar funktionen Värde innehållet i textsträngen"1.234"
som ett Decimal.
För att fungera med värden för Flyttal används funktionen Float. Om vi utökar vårt exempel, Float( 1.234 )
konverterar decimalen1.234
till flyttal.
Flyttal kan också användas som ersättning för Värde för att konvertera en sträng som innehåller ett flyttalsnummer, t.ex. Float( "1.234" )
till ett Flyttal vilket krävs om antalet inte kan representeras som Decimal.
Sammanfattningsvis:
Användning | Decimal | Float |
---|---|---|
Literalnummer i formeln | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Konvertering från textsträng | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Konvertering mellan numeriska typer | Decimal( float ) |
Float( decimal ) |
Konvertering till textsträng | Text( decimal ) |
Text( float ) |
Blanda numeriska typer
Flyttal och Decimal-värden kan blandats fritt. När de blandas kan Decimal-värden konverteras till Flyttal-värden på grund av det större intervallet. Eftersom denna omvandling kan resultera i en förlust av precision är det viktigt att inte blanda de två i onödan. Eftersom Decimal är standardliteraldatatypen och de flesta numeriska funktioner bevarar typen är det relativt enkelt att undvika att flytta till Flyttal utan att önska det.
Tänk till exempel på följande beräkning med pac power-fx repl
efter installationen av Power Platform CLI. Eftersom båda talen är Decimal görs beräkningen med Decimal och resultatet behåller full precision:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Om den andra operanden ändrades till Flyttal skulle hela beräkningen göras i Flyttal och fraktionen förloras:
>> 1.0000000000000000000000000001 * Float(2)
2
Datum, tid och DateTime
Tidszoner
Datum/tid-värden faller i följande kategorier:
- Användarlokalt: dessa värden lagras i UTC (Coordinated Universal Time), men tidszonen för appens användare påverkar hur appen visar dessa värden och hur appens användare anger dem. Som ett exempel ser samma sak annorlunda ut för en användare i Kanada än den gör till en användare i Japan.
- Oberoende av tidszon: appen visar dessa värden på samma sätt och appanvändaren anger samma ordning, oavsett tidszon. Samma ögonblick verkar på samma sätt för en användare i Kanada som för en användare i Japan. Appförfattare som inte förväntar sig att program ska köras i olika tidszoner använder dessa värden eftersom de är enklare att göra.
I den här tabellen visas några exempel:
Datum/tidstyp | Värde som lagras i databasen | Värdet visas och anges 7 timmars väster om UTC | Värdet visas och anges 4 timmars öster om UTC |
---|---|---|---|
Användarlokalt | Sunday,May19,2019 04:00 |
Saturday,May18,2019 21:00 |
Sunday,May19,2019 08:00 |
Tidszonsoberoende | Sunday,May19,2019 04:00 |
Sunday,May19,2019 04:00 |
Sunday,May19,2019 04:00 |
För Användarlokala datum/tider använder arbetsyteappen tidszonen för webbläsaren eller enheten, men med modelldrivna program används användarens inställning i Dataverse. Inställningarna överensstämmer oftast med varandra, men resultatet blir annorlunda om inställningarna skiljer sig.
Använd funktionerna DateAdd och TimeZoneInformation för att konvertera lokal tid till UTC och tillbaka igen. Se exemplen i slutet av dokumentationen för de här funktionerna.
Numeriska motsvarigheter
Arbetsyteappar rymmer och beräknar alla datum/tid-värden, oavsett om de är användarlokala eller tidszonoberoende i UTC. programmet översätter värdena utifrån programanvändarens tidszon när de visar dem och när programmet användare anger dem.
När en arbetsyteapp läser ett värde för tidszonoberoende från en datakälla eller skriver ett sådant värde till en datakälla, justerar programmet automatiskt värdet för att kompensera programmets användares tidszon. programmet behandlar sedan värdet som ett UTC-värde, konsekvent med alla andra datum/tid-värden i programmet. På grund av denna kompensation visas det ursprungliga tidszonoberoende värdet när programmet justerar UTC-värdet för programanvändarens tidszon.
Du kan observera detta beteende närmare med hjälp av funktionen Value för att få tillgång till underliggande numeriska värdet för ett datum/tid-värde. Funktionen returnerar datum/tid-värdet som antalet millisekunder sedan 1 januari 1970 00:00:00.000 UTC.
Eftersom alla datum/tid-värden lagras i UTC returnerar formeln Value( Date( 1970, 1, 1 ) ) inte noll i de flesta delar av världen eftersom funktionen Date returnerar ett datum i UTC. Formeln skulle till exempel returnera 28,800,000 i en tidszon som förskjuts från UTC med åtta timmar. Detta tal visar antalet millisekunder på åtta timmar.
Gå tillbaka till vårt exempel:
Datum/tidstyp | Värde som lagras i databasen | Värdet visas och anges 7 timmars väster om UTC | Funktionen Value returnerar |
---|---|---|---|
Användarlokalt | Sunday,May19,2019 04:00 |
Saturday,May18,2019 21:00 |
1,558,238,400,000 (Sunday,May19,2019 4:00 AM UTC) |
Tidszonsoberoende | Sunday,May19,2019 04:00 |
Sunday,May19,2019 04:00 |
1,558,263,600,000 (Sunday,May19,2019 11:00 AM UTC) |
Konvertera UNIX-tider
UNIX-tider motsvarar antalet sekunder sedan 1 januari 1970 00:00:00 UTC. Eftersom arbetsyteappar använder millisekunder i stället för sekunder kan du konvertera mellan de två genom att multiplicera eller dividera med 1 000.
UNIX-tid visar till exempel 9 september 2001, klockan 01:46:40 UTC som 1000000,000. Om du vill visa det datum/tid-värdet i en arbetsyteapp multiplicerar du talet med 1 000 för att konvertera det till millisekunder och använder det sedan i en funktion för Text. Formeln Text( 1000000000 * 1000, DateTimeFormat.UTC ) returneras strängen 2001-09-09T01:46:40.000Z.
Funktionen returnerar emellertid Saturday, September 8, 2001 18:46:40 om du använder formatet DateTimeFormat.LongDateTime24 i en tidszon som har 7 timmars förskjutning från UTC (7 timmar väster om UTC). Det här resultatet visar att DateTime-värdet är korrekt baserat på den lokala tidszonen.
Om du vill konvertera till en Unix-tid delar du resultatet från värde med 1 000:
RoundDown( Value( UnixTime ) / 1000, 0 )
Om du behöver Unix-tid i ett datum-värde för ytterligare beräkningar eller visning i Power Apps använder du följande formel:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )
SQL Server
SQL Server har Datetime, Datetime2 och andra data typer för datum och tid som inte innehåller någon tidszonsförskjutning och som inte anger vilken tidszon de befinner sig i. Arbetsyteappar antar att dessa värden lagras i UTC-typen och behandlar dem som Användarlokalt. Om värdena är tänkta att vara tidszonsoberoende ska du korrigera för UTC-översättningarna med hjälp av funktionen TimeZoneOffset.
I arbetsyteappar används den inkluderade tidszonsinformationen i fält DateTimeOffset när ett värde konverteras till programmets interna UTC-representation. Program använder alltid UTC-tid som tidszon (nolltid för zonförskjutning) när de skriver data.
Arbetsyteappar läser och skriver värden på Tid datatyp i SQL Server som textsträngar i ISO 8601 format för varaktighet. Du måste t.ex. tolka det här strängformatet och använda funktionen Time för att konvertera textsträngen "PT2H1M39S" till ett värde Tid:
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)
Mixa information om datum och tid
Datum, Tid och DateTime har olika namn, men alla innehåller samma information om datum och tid.
Ett Datum värde kan innehålla tidsinformation med det, vanligtvis midnatt. Ett Tid värde kan bära datuminformation, som vanligtvis är 1 januari 1970. Dataverse lagrar även tidsinformation med ett fält Endast datum endast datuminformation visas som standard. På samma sätt kan du ibland arbetsyteapp skilja mellan de här datatyperna för att fastställa standardformat och kontroller.
Det är inte viktigt att du lägger till och subtraherar värden för datum och tid direkt, eftersom tids zoner och andra konverteringar kan orsaka förvirrande resultat. Använd antingen funktionen Value för att först konvertera datum/tidsvärden till millisekunder och ta hänsyn till programanvändarens tidszon eller använda DateAdd och DateDiff för att lägga till eller ta bort från ett av dessa värden.
Val och Ja/Nej
Alternativ och datatyper med två alternativ ger en programanvändare två eller flera val att välja. T.ex. alternativet Orderstatus kan till exempel erbjuda alternativen Ny, Levererad, Fakturerad och Stängd. Med den här datatypen kan du bara välja mellan två alternativ.
Båda dessa datatyper visar sina etiketter i en textsträngkontext. En label-kontroll visar till exempel ett av alternativen för orderstatus om kontrollens Text-egenskap har angetts till en formel som refererar till det valet. Alternativetiketter kan vara lokaliserade för AppData på olika platser.
När en programanvändare väljer ett alternativ och sparar den ändringen skickar programmet data till databasen, där informationen lagras i en representation som är oberoende av språket. Ett alternativ i ett val överförs och lagras som en siffra, och ett alternativ i en datatyp med två alternativ överförs och lagras som ett booleskt värde.
Etiketterna är endast avsedda som visningssyften. Det går inte att utföra direkta jämförelser med etiketterna eftersom de är specifika för ett språk. Varje val har i stället en uppräkning som fungerar med det underliggande antalet eller booleska värdet. Du kan till exempel inte använda den här formeln:
If( ThisItem.OrderStatus = "Active", ...
Men du kan använda den här formeln:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
För globala val (som tabeller delar) överensstämmer namnet på alternativuppsättningsuppräkningen med namnet på det globala valet. För lokala alternativ (som är begränsade till en tabell) kan namnet innehålla namnet på tabellen. På så sätt uppstår konflikter om flera tabeller har alternativ med samma namn. Tabellen Konton kan till exempel ha valet OrderStatus och namnet kan vara OrderStatus (Konton). Namnet innehåller ett eller flera blanksteg och parenteser, så du måste omge det med enkla citattecken om du refererar till det i en formel.
Dessutom kan värden med två alternativ också fungera som booleska värden. Ett tvåsiffrigt värde med namnet TaxStatus kan ha etiketter Taxable och Non-Taxable vilka motsvarar true och false. För att visa kan du använda den här formeln:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Du kan också använda den motsvarande formeln:
If( ThisItem.Taxable, ...