Tietotyypit
Tiedot kulkevat Power Fx:n kautta pieninä, erillisinä arvoina. Tämä vastaa pitkälti laskentataulukon soluja. Esimerkiksi Syntymäpäivä-kentän ja Vuosipäivä-kentän tiedot kulkevat läpi Päivämäärä-arvona, joka sisältää vuoden, kuukauden ja päivän. Power Fx osaa muotoilla näitä arvoja, rajoittaa syötteen kullekin sopivaksi ja jakaa arvot tietokantaan. Syntymäpäivät eroavat vuosipäivistä ihmisille, mutta järjestelmä käsittelee niitä täsmälleen samalla tavalla. Tässä tapauksessa Päivämäärä on esimerkki tietotyypistä.
Tässä artikkelissa on tietoja Power Fx:n tukemista tietotyypeistä. Kun Power Fx muodostaa yhteyden ulkoiseen tietolähteeseen, kukin kyseisen lähteen tietotyyppi yhdistetään tietotyyppiin Power Fx:ssä.
Tietotyyppi | Description | Esimerkkejä |
---|---|---|
Boolean | Tosi- tai Epätosi-arvo. Voidaan käyttää suoraan If-, Filter- ja muissa toiminnoissa, joissa ei ole vertailua. | tosi |
Valinta | Vaihtoehto joukosta vaihtoehtoja, joita tukee numero. Tämä tietotyyppi yhdistää lokalisoitavan tekstiotsikon ja numeerisen arvon. Selite näkyy sovelluksessa, ja numeerinen arvo tallennetaan ja sitä käytetään vertailuissa. Type-funktio tukee tätä tietotyyppiä, jos Valinta-kentän esiintymää käytetään nimen mukaan. | ThisItem.OrderStatus |
Väri | Värimääritys, mukaan lukien alfakanava. |
Color.Red ColorValue( "#102030" ) RGBA( 255, 128, 0, 0.5 ) |
Valuutta | Valuutta-arvo, joka on tallennettu liukulukunumeroon. Valuutta-arvot ovat samat kuin lukuarvot, joissa on valuutan muotoiluasetukset. Type-funktio ei tue Currency-tietotyyppiä. |
123 4.56 |
Päivämäärä | Päivämäärä ilman kellonaikaa sovelluksen käyttäjän aikavyöhykkeessä. | Date( 2019, 5, 16 ) |
Päivämäärä ja aika | Päivämäärä ja kellonaika sovelluksen käyttäjän aikavyöhykkeessä. | DateTimeValue( "May 16, 2019 1:23:09 PM" ) |
Desimaaliluku | Erittäin tarkka luku, kymmenkantaiset toiminnot ja rajoitettu alue. |
123 Decimal( "1.2345" ) |
Float | Vakiotarkkuuden luku, kaksikantaiset toiminnot ja laaja alue. |
123 8.903e121 1.234e-200 |
GUID | GUID-tunnus |
GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
Hyperlinkki | Tekstimerkkijono, joka sisältää hyperlinkin. | "https://powerapps.microsoft.com" |
Kuva | Universal Resource Identifier (URI) tekstimerkkijono kuvaan, joka on .jpeg, .png, .svg, .gif tai muussa yleisessä www-kuvamuodossa. Type-funktio ei tue Image-tietotyyppiä. |
MyImage lisätty sovellusresurssiksi "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
Media | URI-tekstimerkkijono video- tai äänitallenteeseen. Type-funktio ei tue Media-tietotyyppiä. |
MyVideo lisätty sovellusresurssiksi "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
Määrä | Alias Decimal-tyypille (useimmat Power Fx -isännät) tai Float-tyypille (pohjaan perustuvat sovellukset). Jos kumpaa tahansa numerotyyppiä voidaan käyttää tietyssä tilanteessa, käytä Number-tyyppiä parhaan yhteensopivuuden saavuttamiseksi. |
123 0.0123 1e4 |
Nauhoita | Tietoarvojen tietue. Tämä yhdistelmätietotyyppi sisältää esiintymiä muista tietotyypeistä, jotka on lueteltu tässä aiheessa. Lisätietoja: Taulukkojen käyttäminen. Type-funktio tukee tätä tietotyyppiä, jos Tietue-kohteen esiintymää käytetään. |
{ Company: "Northwind Traders", Staff: 35, NonProfit: false } |
Tietueviittaus | Viittaus tietueeseen taulukossa. Tällaisia viittauksia käytetään usein polymorfisten hakujen yhteydessä. Lisätietoja: Viitteiden käyttäminen. Type-funktio ei tue tätä tietotyyppiä. | First(Accounts).Owner |
Taulukko | Tietuetaulukko. Kaikilla tietueilla on oltava samat nimet kentille samoissa tietotyypeissä, ja pois jätettävistä kentistä tulee tyhjiä. Tämä yhdistelmätietotyyppi sisältää esiintymiä muista tietotyypeistä, jotka on lueteltu tässä aiheessa. Lisätietoja: Taulukkojen käyttäminen. Type-funktio tukee tätä tietotyyppiä, jos Taulukko-kohteen esiintymää käytetään. |
Table( { FirstName: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
Teksti | Unicode-tekstimerkkijono. | "Hello, World" |
Time | Kellonaika ilman päivämäärää sovelluksen käyttäjän aikavyöhykkeessä. | Time( 11, 23, 45 ) |
Untyped | Objekti, jonka tyyppiä ei ole ilmoitettu. Taustalla oleva objekti voi olla mikä tahansa olemassa oleva tyyppi ja se voidaan muuntaa yhteensopiviksi tyypeiksi funktioilla, kuten Boolean(), Value(), Table() jne. Lisätietoja on kohdissa Tyypittämätön objekti ja JSON:n käyttäminen. | ParseJSON("{ ""Field"" : 1234 }").Field |
Mitätön | Sitä käyttävät vain käyttäjän määrittämät funktiot, ja se ilmaisee, että funktiolla ei ole palautustyyppiä. Type-funktio ei tue tätä tietotyyppiä. Vaikka funktiolla ei ole palautustyyppiä tai -arvoa, se voi aina palauttaa virheen. | Hi(): Void = { Notify( "Hei!" ) } |
Kyllä/ei | Vaihtoehto kahdesta vaihtoehdosta, joita tukee totuusarvo. Tämä tietotyyppi yhdistää lokalisoitavan tekstiotsikon ja totuusarvon. Selite näkyy sovelluksessa, ja totuusarvo tallennetaan ja sitä käytetään vertailuissa. Type-funktio tukee tätä tietotyyppiä, jos Kyllä/Ei-kentän esiintymää käytetään nimen mukaan. | ThisItem.Taxable |
Monet näistä tieto tyypeistä ovat samanlaisia, ja niiden taustalla on sama esitysmuoto, kuten Hyperlink-kenttä jota käsitellään Teksti-kenttänä. Lisätietotyypit parantavat lomakkeiden ja muiden ohjausobjektien oletustoimintoja.
Blank
Kaikkien tietotyyppien arvo voi olla tyhjä (toisin sanoen ei arvoa). Termiä "null" käytetään usein tämän käsitteen tietokannoissa.
Voit määrittää muuttujan tai kentän tyhjäksi käyttämällä Blank-funktiota Set- tai Patch-funktion kanssa. Esimerkiksi Set( x, Blank() ) poistaa kaikki arvot yleisestä muuttujasta x.
IsBlank-funktio testaa, onko arvo tyhjä. Korvaa mahdolliset tyhjät arvot ei-tyhjillä arvoilla käyttämällä Coalesce-funktiota.
Koska kaikki tietolajit tukevat tyhjää, Totuusarvo ja Kaksi vaihtoehtoa -tietotyypeillä on tosiasiassa kolme mahdollista arvoa.
Teksti, Hyperlink, Image ja Media
Kaikki nämä neljä tietotyyppiä perustuvat Unicode-tekstimerkkijonoon.
Upotettu teksti
Kaavan upotetut tekstimerkkijonot on kirjoitettava lainausmerkkeihin. Käytä kahta lainausmerkkiä yhdessä, kun haluat esittää yhden lainausmerkin tekstimerkkijonossa. Voit esimerkiksi käyttää seuraavaa kaavaa OnSelect-ominaiuudessa Button-ohjausobjektissa:
Notify( "Jane said ""Hello, World!""" )
tuloksena on banneri, kun painat painiketta, jossa ensimmäiset ja viimeiset lainausmerkit jätetään pois (koska ne rajaavat tekstimerkkijonoa) ja toistuvat lainausmerkit tekstin Hello, World! ympärillä korvataan yhdellä lainausmerkillä:
Heittomerkkejä käytetään tunnusnimissä, jotka sisältävät erikoismerkkejä ja joilla ei ole erityistä merkitystä tekstimerkkijonossa.
Merkkijonojen interpolointi
Merkkijonojen interpoloinnin avulla voit upottaa kaavoja tekstimerkkijonoon. Tämä lähestymistapa helpottaa usein käsittelyä sekä tuloksen visualisointia Concatenate-funktion tai &-operaattorin käyttöön verrattuna.
Syötä tekstimerkkijonon eteen dollarimerkki $ ja ympäröi upotettava kaava aaltosulkeilla { }. Jos haluat käyttää aaltosulkeita tekstimerkkijonossa käytä niitä kaksinkertaisina: {{ tai }}. Merkkijonojen interpolointia voi käyttää kaikkialla, missä vakiotekstimerkkijonoa voi käyttää.
Otetaan esimerkiksi tämä kaava, jossa yleisen muuttujan Omenaa arvoksi on määritetty 3 ja yleisen muuttujan Banaania arvoksi 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Tämä kaava palauttaa tekstimerkkijonon Meillä on 3 omenaa ja 4 banaania eli yhteensä 7 hedelmää. Muuttujat Omenaa ja Banaania lisätään tekstiin aaltosulkeiden tilalle yhdessä matemaattisen kaavan Omenat+Banaanit tuloksen kanssa. Välilyönnit ja muut merkit aaltosulkeiden ympärillä pysyvät muuttumattomina.
Upotetut kaavat voivat sisältää mitä tahansa funktioita tai operaattoreita. Tämä edellyttää vain, että kaavan tulos voidaan muuntaa tekstimerkkijonoksi. Tämä kaava esimerkiksi lisää tervehdykseen NickName-arvon, jos se on annettu, tai FirstName-arvon, jos sitä ei ole annettu:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!"
Jos NickName-arvoksi on määritetty Jaska, tämä kaava tuottaa tekstimerkkijonon Welcome Jaska, it's great to meet you!. Jos NickName kuitenkin on tyhjä ja FirstName-arvo on Jaakko, tämän kaavan tuloksena on sen sijaan Dear Jaakko, great to meet you!
Merkkijonojen interpoloinnin upotettu kaava voi sisältää vakiotekstimerkkijonoja. Jos esimerkiksi sekä NickName että FirstName on jätetty antamatta, voisimme syöttää korvaavaksi arvoksi "Friend":
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Merkkijonojen interpolointeja voi jopa asettaa sisäkkäin. Otetaan esimerkki, jossa nimet First, Middle ja Last yhdistetään tervehdyksessä. Vaikka yksi tai kaksi näistä arvoista olisi tyhjiä, nimen osien välillä on oikea määrä välilyöntejä. Jos mitään nimeä ei anneta, merkkijonon sisäinen interpolointi kutistuu tyhjäksi merkkijonoksi ja korvataan Coalesce-funktiolla arvolla "Friend".
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First | Middle | Last | Tulos |
---|---|---|---|
Jaakko | Kalervo | Meikäläinen | Welcome John Quincy Doe! |
Jaakko | tyhjä | Meikäläinen | Welcome John Doe! |
tyhjä | tyhjä | Meikäläinen | Welcome Doe! |
tyhjä | tyhjä | tyhjä | Welcome Friend! |
Rivinvaihdot
Upotetut tekstimerkkijonot voivat sisältää rivinvaihtoja. Otetaan esimerkiksi Label-ohjausobjektin Text-ominaisuuden määrittäminen seuraavasti:
"Line 1
Line 2
Line 3"
Tämän kaavan tulos on, että selite-ohjausobjektissa näkyy kolme riviä:
Myös merkkijonojen interpolointi tukee rivinvaihtoja:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Mikä johtaa samaan tulokseen:
Kuva- ja Media-resurssit
Tiedosto-valikon kautta voit lisätä kuva-, video- ja äänitiedostoja sovellusresursseiksi. Tuodun tiedoston nimeksi tulee resurssin nimi sovelluksessa. Tässä grafiikassa sovellukseen on lisätty Northwind Traders -logo, jonka nimi on nwindlogo:
Jos haluat käyttää tätä resurssia sovelluksessa, määritä se Image-ominaisuutena Image-ohjausobjektissa:
Kuvien ja muiden mediatiedostojen URI-osoitteet
Voit syventyä tuohon viimeiseen esimerkkiin määrittämällä Text-ominaisuuden arvoksi Label-ohjausobjektissa nwindlogo. Otsikossa näkyy tekstimerkkijono:
Kaaviosovellukset viittaavat kuhunkin kuvaan tai muuhun mediatiedostoon – olipa se pilvipalvelussa tai lisättynä sovellusresurssiksi – URI-tekstimerkkijonona.
Esimerkiksi ohjausobjektin Image-ominaisuus hyväksyy sovellusresurssien lisäksi myös linkit verkossa oleviin kuviin, kuten "https://northwindtraders.com/logo.jpg". Ominaisuus hyväksyy myös tekstiin sidotut kuvat, jotka käyttävät tietojen URI-määritystä, kuten tässä esimerkissä:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
URI näyttää kahden purppuran timantin skaalatun version:
Voit näyttää Camera-ohjausobjektissa siepatun viimeisimmän kuvan, jos määrität kuvaohjausobjektin Image-ominaisuudeksi kameraohjausobjektin Photo-ominaisuuden. Sovellus säilyttää kuvan muistissa, ja kameraohjausobjektin Photo-ominaisuus palauttaa URI-viittauksen kuvaan. Voit esimerkiksi ottaa kuvan, ja kameran Photo-ominaisuus voi palauttaa arvon "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
URI-osoitteen avulla voit määrittää viitteen kuvaan tai toiseen mediatiedostoon, joka tallennettu tietokantaan. Tällä tavoin sovellus ei nouda varsinaisia tietoja, ennen kuin niitä tarvitaan. Esimerkiksi liite Microsoft Dataverse -taulukossa saattaa palauttaa arvon "appres://datasources/Contacts/table/..." Aivan niin kuin kameraesimerkissä, voit näyttää tämän kuvan määrittämällä kuvan ohjausobjektin Image-ominaisuuden tähän viitteeseen, joka hakee binaaritiedot.
Kun tallennat mediatietotyypin, kuten kuvan, tietokantaan, sovellus lähettää todellisen kuva- tai mediadatan, ei URI-viittausta.
Kokorajoitukset
Tekstimerkkijonoina ja URI-tietoina näillä tietotyypeillä ei ole esimääritettyä rajoitusta niiden pituudelle.
Näiden tietotyyppien viittaamilla binaaritiedoilla ei myöskään ole ennalta määritettyjä kokorajoitusta. Esimerkiksi kameraohjausobjektin kautta siepatussa kuvassa, johon on viitattu nimellä "appres://...", voi olla yhtä suuri ja korkea resoluutio kuin laitteen kameralla voidaan saada. Tietotyyppi ei rajoita mediatiedostojen tarkkuutta, kehysnopeutta tai muita määritteitä, mutta tietyissä median toisto- ja sieppaustoiminnoissa saattaa olla joitain rajoituksia.
Kaikissa tietokoissa on kuitenkin noudatettava käytettävissä olevaa muistin määrää sovelluksessa. Pöytätietokoneessa olevat selaimet tukevat yleensä yli 100 megatavua tietoja. Laitteen, kuten puhelimen, käytettävissä olevan muistin määrä voi kuitenkin olla paljon pienempi, yleensä 30-70 megatavun välillä. Voit selvittää, toimiiko sovelluksesi näissä rajoissa, testaamalla yleisiä skenaarioita kaikissa laitteissa, joissa se suoritetaan.
Paras käytäntö on pitää tiedot muistissa vain niin kauan kuin on tarpeen. Lataa kuvat tietokantaan niin pian kuin pystyt. Lataa kuvat käyttäjälle vain silloin, kun sovelluksen käyttäjä pyytää niitä.
Numerot
Muistiinpano
Power Apps tukee tällä hetkellä vain liukulukua, ja se on kaikki lukujen tyyppi. Decimal-tuki lisätään pian.
Power Fx tukee kahdenlaisia lukuja: desimaalilukua ja liukulukua (joita kutsutaan myös luvuksi ja valuutaksi).
Decimal on paras vaihtoehto useimmissa liiketoiminnan laskelmissa. Se voi esittää tarkasti luvut kantaluvussa 10, mikä tarkoittaa, että 0.1
voidaan esittää tarkasti ja välttää pyöristysvirheet laskelmien aikana. Sen alue on riittävän suuri kaikenlaisiin liiketoimintarpeisiin; suurin arvo on 1028 ja tarkkuutena on 28 merkkiä.
Decimal on useimpien Power Fx -isäntien numeerinen oletustietotyyppi, jota käytetään, jos kirjoitetaan yksinkertaisesti 2*2
.
Float on paras vaihtoehto tieteellisiin laskutoimituksiin. Se voi edustaa numeroita suuremmalla alueella, jopa 10308 asti. Tarkkuus on rajoitettu 15 desimaaliin ja matematiikka perustuu kaksikantaisuuteen, joten sillä ei voi ilmaista joitakin yleisiä desimaaliarvoja tarkasti. Float on myös suorituskyvyltään parempi ja sitä suositaan, jos tällä on merkitystä eikä tarkkuus ole oleellista.
Desimaaliluvut
Desimaali-tietotyyppi käyttää useimmiten .NET-desimaalitietotyyppiä. Jotkin isännät, kuten SQL Serverissä suoritettavat Dataverse-kaavasarakkeet, käyttävät SQL Serverin desimaalitietotyyppiä.
Decimal tekee laskelmat samalla tavalla kuin opit koulussa, käyttämällä kantaluvun 10 numeroita, mikä on tärkeää, jotta vältetään pyöristysvirheet hyvin pienistä eroista, joita voi kertyä käytettäessä kantaluvun 2 matematiikkaa (kuten Float käyttää).
Alueen alku on positiivinen 79 228 162 514 264 337 593 543 950 335 ja loppu negatiivinen 79 228 162 514 264 337 593 543 950 335. Desimaalierotin voidaan sijoittaa mihin tahansa näissä luvuissa, mikä mahdollistaa 28 desimaalin tarkkuuden ja siltä tarkan esittämisen. Esimerkiksi 79 228 162 514 264,337593543950335 voidaan ilmaista tarkasti samoin kuin 7,9228162514264337593543950335.
Liukuluvut
Liukuluku-tietotyyppi, jota kutsutaan luvuksi tai valuutaksi käyttää kaksitarkkuuksista IEEE 754 -liukulukustandardia. Tämä standardi tarjoaa erittäin suuren määrän erilaisia numeroita välillä –1.79769 x 10308 – 1.79769 x 10308. Pienin arvo, joka voi olla edustettuna, on 5 x 10– 324.
Float voi ilmaista kokonaisluvut tarkasti arvojen –9 007 199 254 740 991 (–(253 – 1)) ja 9 007 199 254 740 991 (253 – 1) välillä. Tämä alue on suurempi kuin 32-bittinen (tai 4-tavuinen) kokonaislukutietotyyppi, jota tietokannat käyttävät yleisesti. Kaaviosovellukset eivät kuitenkaan voi esittää 64-bittisiä (tai 8-tavuisia) kokonaislukutietotyyppejä. Voit tallentaa numeron tekstikenttään tai käyttää laskettua saraketta, jos haluat kopioida numeron tekstikenttään, jotta se voidaan yhdistää Text-tietotyyppiin kaaviosovelluksessa. Tällä tavoin näitä arvoja voidaan säilyttää, näyttää ja antaa. Ja niitä vertaamalla määritetään, ovatko ne yhtä suuria. Niille ei kuitenkaan voi suorittaa numeerisia laskutoimituksia tässä lomakkeessa.
Liukulukujen aritmeettinen arvo on likimääräinen, joten se voi joskus tuottaa odottamattomia tuloksia monissa dokumentoiduissa esimerkeissä. Saatat odottaa, että kaava 55 / 100 * 100 palauttaa täsmälleen 55 ja (55 / 100 * 100) - 55 palauttaa täsmälleen nollan. Jälkimmäinen kaava palauttaa kuitenkin 7,1054 x 10 – 15, joka on hyvin pieni mutta ei nolla. Tämä pieni ero ei yleensä aiheuta ongelmia, ja sovellus pyöristää sen, kun tulos näytetään. Pienet erot voivat kuitenkin yhdistyä seuraavissa laskelmissa, ja ne näyttävät antavan väärän vastauksen.
Tietokantajärjestelmät tallentavat usein valuuttoja ja suorittavat laskutoimituksia käyttämällä desimaalierotinta, joka tarjoaa pienemmän alueen mutta lisää tarkkuutta. Oletusarvon mukaan kaaviosovellukset yhdistävät valuuttoja liukulukujen arvojen kanssa. Tämän vuoksi lopputulos voi poiketa alkuperäisessä desimaalitietotyypissä tehdystä laskennoista. Sovelluksesi tarkkuustarpeista riippuen haluat ehkä käsitellä näitä arvoja Text-tyyppinä samalla tavalla kuin aiemmin suurille kokonaisluvuille on kuvattu.
Oletukset ja muunnokset
Muistiinpano
Power Apps tukee tällä hetkellä vain liukulukua, ja se on kaikki lukujen tyyppi. Decimal-tuki lisätään pian.
Useimmat Power Fx -isännät käyttävät oletusarvoisesti desimaalia. Tämä oletus tarkoittaa:
- kaavojen literaalilukuihin. Numero
1.234
tulkitaan Decimal-arvona. Esimerkiksi kaava1.234 * 2
tulkitsee numerot1.234
ja2
Decimal-tyypiksi ja palauttaa Decimal-tuloksen. - Value-funktio.
Value( "1.234" )
palauttaa Decimal-arvon. Esimerkiksi kaavassaValue( "1.234" ) * 2
Value-funktio tulkitsee tekstimerkkijonon"1.234"
sisällön Decimal-tyypiksi.
Liukuluku-arvoja käsiteltäessä käytetään Float-funktiota. Esimerkkiä laajentamalla Float( 1.234 )
muuntaa Decimal-arvon 1.234
Float-liukuluvuksi.
Float-arvoa voidaan käyttää myös Value-funktion korvaajana muunnettaessa liukuluvun, kuten Float( "1.234" )
, sisältävä merkkijono Float-arvoksi, mikä on pakollista, jos lukua ei voi ilmaista Decimal-arvona.
Yhteenveto:
Käyttö | Desimaaliluku | Float |
---|---|---|
Literaaliluvut kaavoissa | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Muunto tekstimerkkijonosta | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Muunto numerotyyppien välillä | Decimal( float ) |
Float( decimal ) |
Muunto tekstimerkkijonoksi | Text( decimal ) |
Text( float ) |
Numerotyyppien yhdistelmä
Float- ja Decimal-arvoja voidaan yhdistää vapaasti. Yhdistelmää käytettäessä Desimaali-arvot muunnetaan Liukuluku-arvoiksi suuremman alueen vuoksi. Koska tämä muunnos voi johtaa tarkkuuden menetykseen, on tärkeää, ettet sekoita näitä kahta tarpeettomasti. Koska Decimal on oletusarvoinen literaalitietotyyppi ja useimmat numeeriset funktiot säilyttävät tyypin, on suhteellisen helppoa välttää siirtyminen Float-tyyppiin tahtomattaan.
Oletetaan esimerkiksi seuraava laskutoimitus, jossa on käytössä pac power-fx repl
sen jälkeen, kun Power Platform CLI on asennettu. Koska molemmat luvut ovat Desimaali-lukuja, laskutoimitus tehdään Desimaali-lukuna ja tulos säilyttää täyden tarkkuuden:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Jos sen sijaan toinen operandi vaihdetaan Float-arvoksi, koko laskutoimitus tehtäisiin Float-liukulukuna ja vähäinen murto-osa menetettäisiin:
>> 1.0000000000000000000000000001 * Float(2)
2
Date, Time ja DateTime
Aikavyöhykkeet
Päivämäärä- ja kellonaika-arvot kuuluvat näihin luokkiin:
- Käyttäjän paikallinen: Nämä arvot tallennetaan UTC (Coordinated Universal Time) -aikana, mutta sovelluksen käyttäjän aikavyöhyke vaikuttaa siihen, miten sovellus näyttää nämä arvot ja miten sovelluksen käyttäjä määrittää ne. Esimerkki: Sama hetki näkyy eri tavalla käyttäjälle Kanadassa kuin käyttäjälle Japanissa.
- Aikavyöhykeriippumaton: Sovellus näyttää nämä arvot samalla tavalla ja sovelluksen käyttäjä määrittää ne samalla tavalla aikavyöhykkeestä riippumatta. Sama hetki näkyy samalla tavalla käyttäjälle Kanadassa kuin käyttäjälle Japanissa. Sovellusten tekijät, jotka eivät odota, että heidän sovelluksiaan suoritetaan eri aikavyöhykkeillä, käyttävät näitä arvoja, koska ne ovat yleisesti yksinkertaisempia.
Tässä taulukossa on esimerkkejä:
Päivämäärä- ja kellonaika-tyyppi | Tietokantaan tallennettu arvo | Arvo näytetty ja syötetty 7 tuntia UTC-ajasta länteen | Arvo näytetty ja syötetty 4 tuntia UTC-ajasta itään |
---|---|---|---|
Käyttäjän paikallinen | Sunday,May19,2019 4.00 |
Saturday,May18,2019 21.00 |
Sunday,May19,2019 8.00 |
Aikavyöhykkeestä riippumaton | Sunday,May19,2019 4.00 |
Sunday,May19,2019 4.00 |
Sunday,May19,2019 4.00 |
Käyttäjän paikallista päivämäärää ja kellonaikaa varten kaaviosovellukset käyttävät selaimen tai laitteen aikavyöhykettä, mutta mallipohjaiset sovellukset käyttävät käyttäjän Dataverse-asetusta. Nämä asetukset ovat yleensä samat, mutta tulokset eroavat toisistaan, jos nämä asetukset eroavat toisistaan.
DateAdd- ja TimeZoneInformation-funktioiden avulla voit muuntaa paikallisen ajan UTC-ajaksi ja takaisin. Katso näiden funktioiden esimerkkejä dokumentaation lopussa.
Numeeriset vastineet
Kaaviosovellukset säilyttävät ja laskevat kaikki päivämäärä- ja aika-arvot UTC-aikana riippumatta siitä, ovatko ne Käyttäjän paikallinen tai Aikavyöhykeriippumaton. Sovellus muuntaa arvot sovelluksen käyttäjän aikavyöhykkeen perusteella, kun ne näytetään ja kun sovelluksen käyttäjä määrittää ne.
Kun kaaviosovellus lukee Aikavyöhykkeestä riippumaton -arvon tietolähteestä tai kirjoittaa tällaisen arvon tietolähteeseen, sovellus määrittää automaattisesti arvon, joka kompensoi sovelluksen käyttäjän aikavyöhykkeen kanssa. Tämän jälkeen sovellus käsittelee arvoa UTC-arvona, joka on yhdenmukainen kaikkien muiden sovelluksen päivämäärä- ja aika-arvojen kanssa. Tämän korvauksen vuoksi alkuperäinen Aikavyöhykeriippumaton-arvo tulee näkyviin, kun sovellus muuttaa UTC-arvoa sovelluksen käyttäjän aikavyöhykkeeseen.
Voit tarkkailla tätä toimintaa tarkemmin käyttämällä Value-funktiota, kun haluat käyttää päivämäärä- ja aika-arvon pohjana olevaa numeerista arvoa. Tämä funktio palauttaa päivämäärä- ja aika-arvon, joka on 1. tammikuuta 1970 00:00:00.000 UTC.
Koska jokainen päivämäärä- ja aika-arvo pidetään UTC-aikana, kaava Value( Date( 1970, 1, 1 ) )ei palauta nollaa suurimmassa osassa maailmaa, koska Date-funktio palauttaa päivämäärän UTC-aikana. Kaava palauttaa esimerkiksi 28 800 000 aikavyöhykkeessä, joka on siirretty UTC-ajasta kahdeksan tuntia. Tämä luku kertoo kahdeksan tunnin millisekuntien määrän.
Palataan esimerkkiin:
Päivämäärä- ja kellonaika-tyyppi | Tietokantaan tallennettu arvo | Arvo näytetty ja syötetty 7 tuntia UTC-ajasta länteen | Value-funktio palauttaa |
---|---|---|---|
Käyttäjän paikallinen | Sunday,May19,2019 4.00 |
Saturday,May18,2019 21.00 |
1,558,238,400,000 (Sunday,May19,2019 4:00 AM UTC) |
Aikavyöhykkeestä riippumaton | Sunday,May19,2019 4.00 |
Sunday,May19,2019 4.00 |
1,558,263,600,000 (Sunday,May19,2019 11:00 AM UTC) |
Unix-aikojen muuntaminen
Unix-ajat kuvastavat sekuntien määrää ajanhetkestä 1.1.1970 00:00:00 UTC. Koska kaaviosovellukset käyttävät millisekunteja sekuntien sijasta, voit muuntaa niiden välillä kertomalla tai jakamalla luvulla 1 000.
Esimerkiksi Unix-aika 9.9.2001 kello 01:46:40 UTC arvona 1 000 000 000. Jos haluat, että päivämäärä- ja aika-arvo näytetään kaaviosovelluksessa, kerro kyseinen luku luvulla 1 000, jotta voit muuntaa sen millisekunneiksi ja käyttää sitä sitten Text-toiminnossa. Kaava Text( 1000000000 * 1000, DateTimeFormat.UTC ) palauttaa merkkijonon 2001-09-09T01:46:40.000Z.
Kuitenkin tämä funktio palauttaa Saturday, September 8, 2001 18:46:40, jos käytät DateTimeFormat.LongDateTime24-muotoa aikavyöhykkeessä, joka eroaa -7 tuntia UTC-ajasta (7 lähteen UTC-pisteestä). Tämä tulos näyttää DateTime-arvon oikein paikallisen aikavyöhykkeen perusteella.
Jos haluat muuntaa Unixs-ajaksi, jaa Value-tulos luvulla 1 000:
RoundDown( Value( UnixTime ) / 1000, 0 )
Jos tarvitset Unix-aikaa Date-arvossa jatkolaskelmia tai Power Apps -käyttöä varten, käytä seuraavaa kaavaa:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )
SQL Server
SQL Serverissä on DateTime, Datetime2 ja muita päivämäärän ja ajan tietotyyppejä, jotka eivät sisällä aika vyöhykesiirtymää eivätkä ilmaise, missä aikavyöhykkeessä ne ovat. Kaaviosovellukset olettavat, että nämä arvot on tallennettu UTC-muodossa ja että niitä käytetään käyttäjän paikallisena aikana. Jos arvojen on tarkoitus olla aika vyöhykeriippumattomia, korjaa UTC-käännökset käyttämällä TimeZoneOffset-funktiota.
Kaaviosovellukset käyttävät DateTimeOffset-kentissä mukana olevia aikavyöhyketietoja muunnettaessa arvoa sovelluksen sisäiseen UTC-esitykseen. Sovellukset käyttävät aina UTC-aikaa aikavyöhykkeenä (aikavyöhykepoikkeama nolla), kun ne kirjoittavat tietoja.
Kaaviosovellukset lukevat ja kirjoittavat Time-tietotyypin arvoja SQL Serverissä tekstimerkkijonoina ISO 8601 -kestomuodossa. Tämä merkkijonomuoto on esimerkiksi jäsennettävä ja muunnettava Time-funktiolla tekstimerkkijono "PT2H1M39S"Time-arvoksi:
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)
Päivämäärän ja kellonajan tietojen yhdistäminen
Date, Time ja DateTime ovat eri nimiä, mutta niillä kaikilla on samat tiedot päivämääristä ja kellonajoista..
Date-arvo voi sisältää aikatietoja, jotka ovat yleensä keskiyöllä. Time-arvo voi kuljettaa päivämäärätietoja, jotka ovat yleensä 1. tammikuuta 1970. Dataverse tallentaa myös aikatiedot Vain päivämäärä -kentän mukaan, mutta näyttää vain päivämäärätiedot oletusarvoisesti. Myös kaaviosovellukset erottavat nämä tietolajit toisistaan, jotta oletusmuodot ja ohjausobjektit voidaan määrittää.
Päivämäärä- ja aika-arvojen lisäämistä ja vähentämistä ei suositella, koska aikavyöhyke ja muut tulokset voivat aiheuttaa sekaannusta. Käytä Value-funktiota päivämäärä- ja aika-arvojen muuntamiseen ensin millisekunneiksi ja ota huomioon sovelluksen käyttäjän aikavyöhyke tai lisää tai vähennä näistä arvoista DateAdd- ja DateDiff -funktioiden avulla.
Valinnat ja Kyllä/Ei
Valinnat ja kahden vaihtoehdon tietotyypit tarjoavat sovelluksen käyttäjälle valittavaksi vähintään kaksi vaihtoehtoa. Esimerkiksi Tilauksen tila -valinnassa voi olla vaihtoehdot Uusi, Toimitettu, Laskutettu ja Suljettu. Kahden vaihtoehdon tietotyyppi tarjoaa vain kaksi vaihtoehtoa.
Kumpikin näistä tietotyypeistä näyttää selitteet tekstimerkkijonossa. Esimerkiksi selitteen ohjausobjekti näyttää yhden tilavaihtoehdon, jos ohjausobjektin Text-ominaisuus on määritetty kaavaksi, joka viittaa tähän vaihtoehtoon. Vaihtoehtojen otsikot voidaan lokalisoida sovelluksen käyttäjille eri sijainneissa.
Kun sovelluksen käyttäjä valitsee vaihtoehdon ja tallentaa sen, sovellus siirtää tiedot tietokantaan, joka tallentaa kyseiset tiedot kielestä riippumattomaan esitykseen. Vaihtoehto valinnassa lähetetään ja tallennetaan numerona ja vaihtoehto kahden valinnan tietotyypissä lähetetään ja tallennetaan totuusarvona.
Otsikot ovat vain näyttötarkoituksia varten. Et voi tehdä suoria vertailuja otsikoilla, koska ne ovat kielikohtaisia. Kullakin valinnalla on sen sijaan luettelointi, joka toimii taustalla olevan numeron tai totuusarvon kanssa. Et voi esimerkiksi käyttää tätä kaavaa:
If( ThisItem.OrderStatus = "Active", ...
Voit kuitenkin käyttää seuraavaa kaavaa:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
Yleisissä vaihtoehdoissa (jotka taulukot jakavat), asetusjoukon luetteloinnin nimi vastaa yleisen vaihtoehdon nimeä. Paikallisten vaihtoehtojen (joiden vaikutusalue on taulukko) nimessä voi olla taulukon nimi. Tämä toimintatapa välttää ristiriitoja, jos useissa taulukoissa on samannimiset vaihtoehdot. Esimerkiksi Tilit-taulukossa saattaa olla vaihtoehto OrderStatus ja sen nimi saattaa olla OrderStatus (Tilit). Nimessä on vähintään yksi välilyönti ja sulkumerkki, joten se on ympäröitävä heittomerkeillä, jos viittaat siihen kaavassa.
Lisäksi kahden vaihtoehdon arvot voivat myös käyttäytyä totuusarvoina. Esimerkiksi kahden vaihtoehdon arvolla TaxStatus voi olla selitteet Taxable ja Non-Taxable, jotka vastaavat vastaavasti totuusarvoja true ja false. Voit esimerkiksi käyttää tätä kaavaa:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Voitmyös käyttää tätä vastaavaa kaavaa:
If( ThisItem.Taxable, ...