Tipuri de date
Notă
Microsoft Power Fx este noul nume pentru limbajul formulă al aplicațiilor pânză. Aceste articole sunt lucrare în curs de desfășurare, deoarece extragem limba din aplicațiile pânză, o integrăm cu alte produse Microsoft Power Platform și le punem la dispoziție ca open source. Începeți cu Prezentarea generală Microsoft Power Fx pentru o introducere în limbă.
Informațiile curg printr-o aplicație în valori mici, discrete, asemănătoare celulelor unei foi de calcul. De exemplu, datele dintr-un câmp Zi de naștere și un câmp Aniversare ar curge ambele ca o valoare Dată care include anul, luna și ziua. Aplicația știe să formateze aceste valori, să restricționeze introducerea la ceea ce este potrivit pentru fiecare și să partajeze valorile cu o bază de date. Zilele de naștere diferă față de aniversări pentru oameni, dar sistemul le gestionează exact în aceeași manieră. În acest caz, Dată este un exemplu de tip de date.
Acest articol oferă detalii pentru tipurile de date pe care le acceptă aplicațiile pânză. Când o aplicație se conectează la o sursă externă de date, fiecare tip de date din acea sursă este mapat la un tip de date pentru aplicații pânză.
Tip de date | Descriere | Exemple |
---|---|---|
Boolean | O valoare adevărată sau falsă. Poate fi utilizată direct în funcții If, Filter și alte funcții fără o comparație. | adevărat |
Culoare | O specificație de culoare, incluzând un canal alfa. | Culoare.Roșu ColorValue( „#102030”) RGBA(255, 128, 0, 0,5) |
Valută | O valoare de monedă care este stocată într-un număr cu virgulă mobilă. Valorile monedă sunt aceleași cu valorile număr cu opțiuni de formatare a monedei. | 123 4,56 |
Data | O dată fără o oră, în fusul orar al utilizatorului aplicației. | Data (2019, 5, 16) |
DateTime | O dată cu o oră, în fusul orar al utilizatorului aplicației. | DateTimeValue( „16 mai, 2019 1:23:09 PM” ) |
Zecimal | Un număr cu precizie ridicată, operațiuni de bază 10 și rază limitată. | 123 Decimală( „1.2345”) |
GUID | O Identificator unic la nivel global. | GUID() GUID( "123e4567-e89b-12d3-a456-426655440000 ") |
Hyperlink | Un șir de text care deține un hyperlink. | "https://powerapps.microsoft.com" ; |
Imagine | Un șir de text Identificator de resurse universale (URI) pentru o imagine în .jpeg, .png, .svg, .gif sau alt format web comun de imagine. | MyImage adăugată ca resursă a aplicației "https://northwindtraders.com/logo.jpg" ; „apres://blobmanager/7b12ffa2...” |
Media | Un șir de text URI la o înregistrare video sau audio. | Videoclipul meu adăugată ca resursă a aplicației "https://northwindtraders.com/intro.mp4" ; „apres://blobmanager/3ba411c...” |
Număr sau Plutește | Un număr cu precizie standard, operații de bază 2 și o gamă largă. | 123 8.903e121 1.234e200 |
Alegere | O alegere dintr-un set de opțiuni, susținute de un număr. Acest tip de date combină o etichetă de text localizabilă cu o valoare numerică. Eticheta apare în aplicație, iar valoarea numerică este stocată și utilizată pentru comparații. | ThisItem.OrderStatus |
Înregistra | O înregistrare a valorilor datelor. Acest tip de date compuse conține instanțe ale altor tipuri de date care sunt enumerate în acest subiect. Informații suplimentare: Lucrul cu tabele. | { Companie: „Northwind Traders”, Personal: 35, Nonprofit: false } |
Înregistrați referința | O referință la o înregistrare dintr-un tabel. Astfel de referințe sunt adesea utilizate cu căutări polimorfe. Informații suplimentare: Lucrul cu referințe. | Primul(Conturi).Proprietar |
Masă | Un tabel de înregistrări. Toate înregistrările trebuie să aibă aceleași nume pentru câmpurile lor cu aceleași tipuri de date, iar câmpurile omise sunt tratate ca necompletat. Acest tip de date compuse conține instanțe ale altor tipuri de date care sunt enumerate în acest subiect. Informații suplimentare: Lucrul cu tabele. | Masă( { Prenume: „Sidney”, LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
Text | Un șir de text Unicode. | "Salut Lume" |
Timp | O dată fără o oră, în fusul orar al utilizatorului aplicației. | Ora ( 11, 23, 45 ) |
Două opțiuni | O alegere dintr-un set de două opțiuni, susținute de o valoare booleană. Acest tip de date combină o etichetă de text localizabilă cu o valoare booleană. Eticheta apare în aplicație, iar valoarea booleană este stocată și utilizată pentru comparații. | Acest articol.Impozabil |
obiect fără tip | Un obiect de tip nedeclarat. Obiectul subiacent ar putea fi orice tip existent și poate fi convertit în tipuri compatibile folosind funcții precum Boolean(), Value(), Table() etc. Pentru mai multe informații, consultați Obiect netipizat și Lucrul cu JSON. | ParseJSON("{ ""Câmp"": 1234 }"). Câmp |
Multe dintre aceste tipuri de date sunt similare și au aceeași reprezentare de bază, cum ar fi un câmp Hyperlink fiind tratat ca Text. Tipurile de date suplimentare oferă experiențe implicite mai bune în formulare și alte controale.
Necompletat
Toate tipurile de date pot avea o valoare necompletat (cu alte cuvinte, fără valoare). Termenul "nul” este adesea folosit în bazele de date pentru acest concept.
Utilizați funcția Blank cu funcția Set sau Patch pentru a seta o variabilă sau un câmp la necompletat. De exemplu, Set( x, Blank() ) elimină orice valoare din variabila globală x.
Test pentru o valoare necompletată utilizând funcția IsBlank. Înlocuiți valorile posibil necompletate cu valori non-necompletate utilizând funcția Coalesce.
Deoarece toate tipurile de date acceptă necompletat, tipurile de date Boolean și Două opțiuni au efectiv trei valori posibile.
Text, hyperlink, imagine și media
Toate aceste patru tipuri de date se bazează pe un șir de text Unicode.
Text încorporat
Șirurile de text încorporate într-o formulă sunt incluse în ghilimele duble. Utilizați două ghilimele duble pentru a reprezenta un singur citat dublu în șirul de text. De exemplu, utilizând următoarea formulă în proprietatea OnSelect a unui control Button:
Notify( "Jane said ""Hello, World!""" )
are ca rezultat un banner la apăsarea butonului, unde sunt omise primele și ultimele ghilimele duble (întrucât delimitează șirul de text) și ghilimelele duble repetate în jurul valorii Hello, World! sunt înlocuite cu o singură ghilimea dublă:
Ghilimelele simple nu sunt utilizate pentru nume de identificatori care conțin caractere speciale și nu au nicio semnificație specială în cadrul unui șir de text.
Interpolarea șirurilor
Utilizați interpolarea șirurilor pentru a încorpora formule într-un șir de text. Este adesea mai ușor de lucrat și de vizualizat rezultatul decât utilizarea funcției Concatenare sau a operatorului & .
Prefixați șirul de text cu un semn dolar $ și încadrați în acolade formula care trebuie încorporată { }. Pentru a include o acoladă în șirul de text, utilizați acolade repetate: {{ sau }}. Interpolarea șirurilor poate fi utilizată oriunde poate fi folosit un șir de text standard.
De exemplu, luați în considerare această formulă cu variabile globale Mere setat la 3 și Banane setat la 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Această formulă returnează șirul de text Avem 3 mere, 4 banane, ceea ce înseamnă în total 7 fructe. Variabilele Mere și Banane sunt inserate în text înlocuind acoladele, împreună cu rezultatul formulei matematice Mere+Banane. Spațiile și alte caractere din jurul acoladelor sunt păstrate așa cum sunt.
Formulele încorporate pot include orice funcții sau operatori. Tot ceea ce este nevoie este ca rezultatul formulei să poată fi constrâns la un șir de text. De exemplu, această formulă va insera Numele alternativ dacă este furnizat, sau dacă nu, va insera Prenumele într-un salut:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )
Dacă Numele alternativ este setat la „Joe”, această formulă generează șirul de text Bun venit, Joe, mă bucur să te cunosc!. Dar dacă Numele alternativ este gol și Prenumele este „Joseph”, atunci această formulă generează în schimb textul Dragă Joseph, mă bucur de cunoștință!.
Interpolarea șirurilor poate include șiruri de text standard în formula încorporată. De exemplu, dacă nici Numele alternativ și nici Prenumele nu au fost furnizate, am putea furniza în continuare „Prieten” ca înlocuitor:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Interpolările șirurilor pot fi chiar imbricate. Să luăm în considerare acest exemplu, unde Prenumele, Numele mijlociu și Numele de familie sunt combinate într-un salut. Chiar dacă una sau două dintre aceste valori sunt necompletate, va exista un număr corect de spații între părțile numelui. Dacă niciuna dintre părți nu este furnizată, interpolarea șirului interior se va restrânge la un șir gol și va fi înlocuită de funcția Coalesce cu „Prieten”.
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Prenume | Mijloc | Ultima | Rezultat |
---|---|---|---|
Ioan | Qunicy | Doe | Welcome John Quincy Doe! |
Ioan | necompletat | Doe | Welcome John Doe! |
necompletat | necompletat | Doe | Welcome Doe! |
necompletat | necompletat | necompletat | Welcome Friend! |
Linii noi
Șirurile de text încorporate pot conține linii noi. De exemplu, puteți seta proprietatea Text a unui control Etichetă la următoarea valoare:
"Line 1
Line 2
Line 3"
Formula de mai sus are ca rezultat trei linii afișate în controlul etichetei:
Liniile noi sunt acceptate și cu interpolarea șirurilor, după cum se arată mai jos:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Formula de mai sus are ca rezultat aceeași ieșire:
Resurse imagine și media
Prin meniul Fișier, puteți adăuga fișiere imagine, video și audio ca resurse pentru aplicații. Numele fișierului importat devine numele resursei din aplicație. În această grafică, sigla Northwind Traders, denumită nwindlogo, a fost adăugată la o aplicație:
Pentru a utiliza această resursă într-o aplicație, specificați-o în proprietatea Imagine a unui control Imagine:
URI-uri pentru imagini și alte suporturi media
Puteți explora puțin mai adânc în ultimul exemplu, setând butonul proprietății Text a unui control Etichetă la nwindlogo. Eticheta arată un șir de text:
Aplicațiile proiectate pe pânză fac referire la fiecare imagine sau alt fișier media, fie că este în cloud sau adăugat ca o resursă de aplicație, printr-un șir de text URI.
De exemplu, proprietatea Imagine a unui control de imagine acceptă nu numai resursele aplicației, ci și linkuri către imagini de pe web, cum ar fi „https://northwindtraders.com/logo.jpg"”. Proprietatea acceptă, de asemenea, imagini în linie care utilizează schema URI a datelor, ca în acest exemplu:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
Acest URI afișează o versiune redusă a două diamante violet:
Puteți afișa cea mai recentă imagine capturată într-un control Cameră dacă setați proprietatea Imagine unui control de imagine la proprietatea Fotografie a controlului camerei. Aplicația ține imaginea în memorie și proprietatea Fotografie a controlului camerei returnează o referință URI pentru imagine. De exemplu, puteți face o poză iar proprietatea Fotografie a camerei ar putea returna "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1”.
Utilizați un URI pentru a face referire la o imagine sau la un alt fișier media stocat într-o bază de date. În acest fel, aplicația nu preia datele reale până când nu este nevoie. De exemplu, un atașament într-un tabel Microsoft Dataverse ar putea să returneze "appres://datasources/Contacts/table/..." Ca și în exemplul camerei, puteți afișa această imagine setând proprietatea Imagine unui control de imagine la această referință, care preia datele binare.
Când salvați un tip de date media, cum ar fi o imagine, într-o bază de date, aplicația trimite imaginea reală sau datele media, nu referința URI.
Limite dimensionale
În ceea ce privește șirurile de text și URI-urile, aceste tipuri de date nu au o limită presetată pentru lungimea lor.
Datele binare la care se referă aceste tipuri de date nu au nici o limită prestabilită de dimensiune. De exemplu, o imagine capturată prin intermediul camerei de control la care se face referire acum ca "appres://...” poate fi la fel de mare și de o rezoluție cât de înaltă poate reda camera dispozitivului. Rezoluția, rata de cadre și alte atribute ale fișierelor media nu sunt limitate de tipul de date, dar controalele specifice pentru redarea și captarea media pot avea propriile lor limitări.
Cu toate acestea, toate dimensiunile de date depind de cantitatea de memorie disponibilă în aplicație. Programele de navigare care rulează pe un computer desktop acceptă de obicei mai mult de 100 megabiți de date. Cu toate acestea, cantitatea de memorie disponibilă pe un dispozitiv, cum ar fi un telefon, ar putea fi mult mai mică, de obicei în intervalul 30-70 megabiți. Pentru a stabili dacă aplicația dvs. va rula în aceste limite, testați scenarii comune pe toate dispozitivele pe care ar trebui să ruleze.
Ca o practică optimă, păstrați datele în memorie doar atât timp cât este necesar. Încărcați imagini într-o bază de date cât mai curând posibil; descărcați imaginile numai atunci când utilizatorul aplicației le solicită.
Numere
Notă
Power Apps acceptă doar Float azi și este tipul tuturor numerelor. Asistența pentru Decimal va fi adăugată în curând.
Power Fx acceptă două tipuri de numere: Decimal și Float (cu sinonime Număr și Moneda).
Decimal este cel mai bun pentru majoritatea calculelor de afaceri. Poate reprezenta cu precizie numere în baza 10, ceea ce înseamnă că 0.1
poate fi reprezentat exact și nu va fi predispus la erori rotunjire în timpul calculelor. Are o gamă suficient de mare pentru orice nevoie de afaceri, până la 1028 cu până la 28 de cifre de precizie. Decimal este tipul implicit de date numerice pentru majoritatea Power Fx gazdelor, folosit dacă se scrie pur și simplu 2*2
.
Float este cel mai bun pentru calcule științifice. Poate reprezenta numere într-un interval mult mai mare, până la 10308. Precizia este limitată la 15 zecimale, iar matematica se bazează pe baza 2, așa că nu poate reprezenta cu precizie unele valori zecimale comune. Float are, de asemenea, performanță mai mare și este favorizat dacă acesta este un factor și precizia nu este critică.
Numerele zecimale
Tipul de date Decimal folosește cel mai adesea tipul de date zecimal .NET. Unele gazde, cum ar fi coloanele Dataverse formule care sunt rulate în SQL Serer, folosesc tipul de date zecimal SQL Server.
Decimal face matematica așa cum ați învățat la școală, folosind cifre de bază 10. Acest lucru este foarte important pentru a evita erorile rotunjire din diferențele foarte mici care se pot acumula atunci când utilizați matematica de bază 2 (așa cum este folosit de Float).
Intervalul este de la 79,228,162,514,264,337,593,543,950,335 pozitiv la 79,228,162,514,264,337,593,543,950,335 negativ. Separatorul zecimal poate fi plasat oriunde în aceste numere, oferind până la 28 de cifre de precizie și poate fi în continuare reprezentat cu precizie. De exemplu, 79,228,162,514,264.337593543950335 poate fi reprezentat exact, la fel ca 7.9228162514264337593543950335.
Numere în virgulă mobilă
Tipul de date Float , cunoscut și ca Număr sau Monedă, utilizează standardul în virgulă mobilă cu precizie dublă IEEE 754. Acest standard oferă o gamă foarte mare de numere în care să lucreze, de la –1,79769 x 10308 la 1,79769 x 10308. Cea mai mică valoare care poate fi reprezentată este 5 x 10–324.
Float poate reprezenta exact numere întregi (sau numere întregi) între –9,007,199,254,740,991 (–(253 – 1)) și 9,007,199,254,740,991 (2 a71>53 – 1), inclusiv. Acest interval este mai mare decât tipurile de date întregi pe 32 de biți (sau 4 baiți) pe care bazele de date le folosesc în mod obișnuit. Cu toate acestea, aplicațiile proiectate pe pânză nu pot reprezenta tipuri de date pe 64 de biți (sau 8 baiți). Poate doriți să stocați numărul într-un câmp text sau să utilizați o coloană calculată pentru a face o copie a numărului într-un câmp text, astfel încât să fie mapat într-un tip de date Text în aplicația proiectată pe pânză. În acest mod, puteți să țineți, să afișați și să introduceți aceste valori, precum și să le comparați pentru a determina dacă sunt egale; cu toate acestea, nu puteți efectua calcule numerice pe acestea în acest formular.
Aritmetica cu virgulă mobilă este aproximativă, astfel încât uneori poate da rezultate neașteptate cu multe exemple documentate. V-ați putea aștepta ca formula 55 / 100 * 100 să returneze exact 55 și (55 / 100 * 100) - 55 să returneze exact zero. Cu toate acestea, ultima formulă returnează 7,1054 x 10–15, care este foarte mic, dar nu zero. Această diferență minusculă nu provoacă în mod normal o problemă, iar aplicația o rotunjește atunci când arată rezultatul. Cu toate acestea, micile diferențe se pot compune în calculele ulterioare și să pară că dau un răspuns greșit.
Sistemele de baze de date stochează adesea valute și efectuează calcule folosind matematica zecimală, care oferă un interval mai mic, dar un control mai mare asupra preciziei. În mod implicit, aplicațiile proiectate pe pânză mapează monedele în și în afara valorilor cu virgulă mobilă; prin urmare, rezultatul poate diferi de calculele efectuate într-un tip de date zecimal nativ. Dacă acest tip de discrepanță va cauza probleme, este posibil să doriți să lucrați cu aceste valori ca Text, la fel ca pentru numere întregi mari descrise anterior în această secțiune.
Valori implicite și conversii
Notă
Power Apps acceptă doar Float azi și este tipul tuturor numerelor. Asistența pentru Decimal va fi adăugată în curând.
Cele mai multe Power Fx gazde folosesc Decimal în mod implicit. Aceasta afectează:
- Numerele literale în formule. Numărul
1.234
va fi interpretat ca o valoare Decimal . De exemplu, formula1.234 * 2
va interpreta1.234
și2
ca Decimal și va returna a Rezultat zecimal . - Funcția de valoare.
Value( "1.234" )
va returna o valoare Decimal . De exemplu, formulaValue( "1.234" ) * 2
funcția Valoare va interpreta conținutul șirului de text"1.234"
ca a Decimal.
Pentru a lucra cu valorile Float , se folosește funcția Float . Extinzând exemplul de mai sus, Float( 1.234 )
va converti Decimal1.234
în Float. Float poate fi folosit și ca înlocuitor pentru Value pentru a converti un șir care conține un număr în virgulă mobilă, cum ar fi Float( "1.234" )
în o Valoare flotantă , care este necesară dacă numărul nu poate fi reprezentat ca a Decimal.
În concluzie:
Utilizare | Zecimal | Plutește |
---|---|---|
Numerele literale în formule | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Conversie din șirul de text | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Conversie între tipuri numerice | Decimal( float ) |
Float( decimal ) |
Conversie în șir de text | Text( decimal ) |
Text( float ) |
Amestecarea tipurilor numerice
Valorile Float și Decimale pot fi amestecate liber. Când sunt amestecate, valorile zecimale sunt convertite în valori Float din cauza intervalului mai mare. Deoarece acest lucru poate duce la o pierdere a preciziei, este important să nu amestecați cele două inutil. Deoarece Decimal este tipul de date literal implicit și majoritatea funcțiilor numerice vor păstra tipul, este relativ ușor să evitați trecerea la Float fără să-l dorești.
De exemplu, luați în considerare următorul calcul folosind pac power-fx repl
după instalarea Power Platform CLI. Deoarece ambele numere sunt Decimal, calculul se face în Decimal, iar rezultatul păstrează precizia deplină:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Dacă, în schimb, al doilea operand a fost schimbat în Float atunci întregul calcul ar fi făcut în Float și minuscul parte fracțională s-ar pierde:
>> 1.0000000000000000000000000001 * Float(2)
2
Dată, Oră și DatăOră
Fusuri orare
Valorile dată/oră se încadrează în aceste categorii:
- Local utilizator: aceste valori sunt stocate în UTC (Timp universal coordonat), dar fusul orar al utilizatorului aplicației afectează modul în care aplicația arată aceste valori și cum le specifică utilizatorul aplicației. Ca exemplu, același moment apare diferit pentru un utilizator din Canada față de un utilizator din Japonia.
- Independent de fus orar: aplicația arată aceste valori în același mod, iar utilizatorul aplicației le specifică în același mod, indiferent de fusul orar. Același moment apare în același fel pentru un utilizator în Canada cum apare pentru un utilizator în Japonia. Autorii aplicațiilor care nu se așteaptă ca aplicațiile lor să ruleze pe fusuri orare diferite utilizează aceste valori, deoarece în general sunt mai simple.
Acest tabel prezintă câteva exemple:
Tip de dată/oră | Valoare stocată în baza de date | Valoare afișată și introdusă la 7 ore spre vest de UTC | Valoare afișată și introdusă la 4 ore spre est de UTC |
---|---|---|---|
Utilizator local | Duminică,Mai19,2019 4:00 |
Sâmbătă,Mai18,2019 21:00 |
Duminică,Mai19,2019 8:00 |
Independent de fus orar | Duminică,Mai19,2019 4:00 |
Duminică,Mai19,2019 4:00 |
Duminică,Mai19,2019 4:00 |
Pentru data/orele Locale pentru utilizator, aplicațiile proiectate pe pânză utilizează fusul orar al browserului sau dispozitivului, dar aplicațiile bazate pe model utilizează setarea utilizatorului Dataverse. Aceste setări se potrivesc de obicei, dar rezultatele diferă dacă aceste setări diferă.
Utilizați funcțiile DateAdd și TimeZoneInformation pentru a converti ora locală în UTC și înapoi. Consultați exemplele de la sfârșitul documentației pentru aceste funcții.
Echivalente numerice
Aplicațiile proiectate pe pânză rețin și calculează toate valorile datei/orei, indiferent dacă se folosește Local pentru utilizator sau Independent de fus orar în UTC. Aplicația traduce valorile pe baza fusului orar al utilizatorului aplicației atunci când le arată și când utilizatorul aplicației le specifică.
Când o aplicație proiectată pe pânză citește o valoare Independentă de fus orar de la o sursă de date sau scrie o astfel de valoare într-o sursă de date, aplicația ajustează automat valoarea pentru a compensa fusul orar al utilizatorului aplicației. Aplicația tratează apoi valoarea ca o valoare UTC, în concordanță cu toate celelalte valori de dată/oră din aplicație. Din cauza acestei compensații, valoarea originală Independentă de fus orar apare atunci când aplicația ajustează valoarea UTC pentru fusul orar al utilizatorului aplicației.
Puteți observa mai îndeaproape acest comportament folosind funcția Value pentru a accesa valoarea numerică care stă la baza unei date/ore. Această funcție returnează valoarea dată/oră ca număr de milisecunde începând cu 1 ianuarie, 1970 00:00:00.000 UTC.
Deoarece fiecare valoare dată/oră este păstrată în UTC, formula Value( Date( 1970, 1, 1 ) ) nu va returna zero în majoritatea părților lumii, deoarece funcția Date returnează o dată în UTC. De exemplu, formula ar returna 28.800.000 într-un fus orar diferit față de UTC cu opt ore. Acest număr reflectă numărul de milisecunde în opt ore.
Revenind la exemplul nostru de mai sus:
Tip de dată/oră | Valoare stocată în baza de date | Valoare afișată și introdusă la 7 ore spre vest de UTC | Valoare funcția revine |
---|---|---|---|
Utilizator local | Duminică,Mai19,2019 4:00 |
Sâmbătă,Mai18,2019 21:00 |
1,558,238,400,000 (Duminică,Mai19,2019 4:00 UTC) |
Independent de fus orar | Duminică,Mai19,2019 4:00 |
Duminică,Mai19,2019 4:00 |
1,558,263,600,000 (Duminică,Mai19,2019 11:00 UTC) |
Conversia orelor Unix
Timpurile Unix reflectă numărul de secunde de la 1 ianuarie, 1970 00:00:00 UTC. Deoarece aplicațiile pânză folosesc milisecunde în loc de secunde, puteți converti între cele două multiplicând sau împărțind cu 1.000.
De exemplu, ora Unix arată 9 septembrie 2001, la 01:46:40 UTC ca 1,000,000,000. Pentru a afișa acea valoare dată/oră într-o aplicație proiectată pe pânză, înmulțiți numărul cu 1.000 pentru a-l converti în milisecunde, apoi utilizați-l într-o funcție Text. Formula Text ( 1000000000 * 1000, DateTimeFormat.UTC ) returnează șirul 2001-09-09T01:46:40.000Z.
Cu toate acestea, funcția respectivă afișează Sâmbătă, 8 septembrie 2001 18:46:40 dacă utilizați formatul DateTimeFormat.LongDateTime24 într-un fus orar care este decalat cu -7 ore de la UTC (7 ore la vest de UTC). Acest rezultat arată valoarea DateTime corectă pe baza fusului orar local.
Pentru a converti la un timp Unix, împărțiți rezultatul de la Valoare cu 1.000:
RoundDown( Valoare ( UnixTime ) / 1000, 0 )
Dacă aveți nevoie de timpul Unix într-o valoare Dată pentru calcule suplimentare sau afișare în interior Power Apps, utilizați această formulă:
DataAdd( Data ( 1970,1,1 ), UnixTime, Secunde )
SQL Server
SQL Server are Datetime, Datetime2 și alte tipuri de date dată/oră care nu includ o compensare de fus orar și nu indică în ce fus orar se află. Aplicațiile proiectate pe pânză presupun că aceste valori sunt stocate în UTC și le tratează ca fiind Local pentru utilizator. Dacă valorile sunt independente de fusul orar, corectați pentru traducerile UTC utilizând funcția TimeZoneOffset.
Aplicațiile proiectate pe pânză utilizează informațiile din fusul orar incluse în câmpuri Datetimeoffset atunci când convertiți o valoare în reprezentarea UTC internă a aplicației. Aplicațiile folosesc întotdeauna UTC ca fus orar (decalarea fusului orar zero) atunci când scriu date.
Aplicațiile proiectate pe pânză citesc și scriu valorile tipurilor de date Timp în SQL Server ca șiruri de text în Formatul de durată ISO 8601. De exemplu, trebuie să analizați acest format șir și să utilizați funcția Time pentru a converti șirul de text "PT2H1M39S” la o valoare Timp:
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)
Amestecarea informațiilor despre dată și oră
Data, Time și DateTime au nume diferite, dar toate dețin aceleași informații despre date și ore.
O valoare Dată poate include informații despre oră, care este de obicei miezul nopții. O valoare Oră poate transporta informații despre dată, care este de obicei 1 ianuarie 1970. Dataverse de asemenea, stochează informații despre timp cu un câmp Numai dată, dar afișează numai informațiile despre date în mod implicit. În mod similar, aplicațiile proiectate pe pânză disting uneori între aceste tipuri de date pentru a determina formatele și controalele implicite.
Adăugarea și scăderea valorilor datei și ora direct nu este recomandată, deoarece fusul orar și alte conversii ar putea provoca rezultate confuze. Fie folosiți funcția Value pentru a converti valorile dată/oră în milisecunde și țineți cont de fusul orar al utilizatorului aplicației sau utilizați funcțiile DateAdd și DateDiff pentru a adăuga sau scădea din una dintre aceste valori.
Alegeri și Da/Nu
Opțiunile și tipurile de date cu două opțiuni oferă două sau mai multe opțiuni pe care le poate selecta un utilizator de aplicație. De exemplu, o alegere Starea comenzii ar putea oferi alegerile Nou, Expediat, Facturat și Închis. Tipul de date cu două opțiuni oferă doar două opțiuni.
Ambele tipuri de date își arată etichetele într-un context cu șiruri de text. De exemplu, un control de etichetă arată una dintre opțiunile de stare ale comenzii dacă este de proprietatea controlului Text este setată la o formulă care face referire la acea alegere. Etichetele opționale pot fi localizate pentru utilizatorii de aplicații din diferite locații.
Când un utilizator de aplicație selectează o opțiune și salvează această modificare, aplicația transmite datele în baza de date, care stochează datele respective într-o reprezentare independentă de limbă. O opțiune dintr-o alegere este transmisă și stocată ca număr, iar o opțiune într-un tip de date cu două opțiuni este transmisă și stocată ca valoare booleană.
Etichetele sunt destinate numai afișării. Nu puteți efectua comparații directe cu etichetele, deoarece sunt specifice unei limbi. În schimb, fiecare alegere are o enumerare care funcționează cu numărul subiacent sau valoarea booleană. De exemplu, nu puteți utiliza această formulă:
If( ThisItem.OrderStatus = "Active", ...
Dar puteți utiliza această formulă:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
Pentru alegerile globale (pe care le partajează tabelele), numele enumerării setului de opțiuni se potrivește cu numele alegerii globale. Pentru opțiunile locale (care sunt cuprinse într-un tabel), numele ar putea conține numele tabelului. Acest comportament evită conflictele dacă mai multe tabele au opțiuni care au același nume. De exemplu, tabelul Conturi ar putea avea o alegere Starea comenzii și numele său ar putea fi OrderStatus (Conturi). Acest nume conține unul sau mai multe spații și paranteze, așa că trebuie să îl înconjurați cu ghilimele unice dacă faceți referință la el într-o formulă.
În plus, valorile cu două opțiuni se pot comporta și ca valori booleene. De exemplu, o valoare cu două opțiuni numită TaxStatus ar putea avea etichetele Impozabil și Neimpozabil, care corespund valorilor adevărat și respectiv fals. Pentru a demonstra, puteți utiliza această formulă:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Puteți utiliza și această formulă echivalentă:
If( ThisItem.Taxable, ...