Datové typy

Informace procházejí Power Fx malými samostatnými hodnotami, jako jsou buňky tabulky. Například data v poli Narozeniny a pole Výročí procházejí jako hodnota data , která zahrnuje rok, měsíc a den. Power Fx tyto hodnoty naformátuje, omezuje vstup na to, co je vhodné pro každou z nich, a sdílí hodnoty s databází. Narozeniny a výročí se můžou lišit od lidí, ale systém je zpracovává stejným způsobem. V tomto případě je Datum příklad datového typu.

Tento článek vysvětluje jednotlivé datové typy v Power Fx, jak fungují a jak se mapují na externí zdroje dat.

Datový typ Description Příklady
Logický Hodnota pravda nebo nepravda. Můžete ho použít přímo v if, Filter a dalších funkcích bez porovnání. pravda
Volba Výběr ze sady možností opírající se o číslo. Tento datový typ kombinuje lokalizovatelný textový štítek s číselnou hodnotou. Štítek se objeví v aplikaci a číselná hodnota je uložena a použita pro srovnání. Funkce Typ podporuje tento datový typ, pokud použijete instanci pole Volba podle názvu. ThisItem.OrderStatus
Barva Specifikace barvy, která zahrnuje alfa kanál. Color.Red
ColorValue( "#102030" )
RGBA( 255; 128; 0; 0,5 )
Měna Hodnota měny uložená v čísle s plovoucí desetinnou čárkou. Hodnoty měn jsou stejné jako číselné hodnoty s možností formátování měny. Funkce Typ nepodporuje datový typ Měna . 123
4.56
Date Datum bez času v časovém pásmu uživatele aplikace. Date( 2019; 5; 16 )
Datum a čas Datum s časem v časovém pásmu uživatele aplikace. DateTimeValue („16. května, 2019 13:23:09“)
Desetinné Číslo s vysokou přesností, základními 10 operacemi a omezeným rozsahem. 123
Decimal( "1,2345" )
Dynamic (dříve UntypedObject) Typ hodnoty je dynamický a může se lišit za běhu. Dynamická hodnota může být libovolný existující typ a lze ji převést na kompatibilní typy pomocí funkcí, jako jsou Boolean(), Value(), Table() atd. Další informace najdete v tématu Dynamické hodnoty a Práce s JSON. ParseJSON("{ ""Pole"" : 1234 }"). Pole
Float Číslo se standardní přesností, operacemi se základem 2 a širokým rozsahem. 123
8.903e121
1.234e-200
GUID Globálně jedinečný identifikátor. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hypertextový odkaz Textový řetězec, který obsahuje hypertextový odkaz. "https://powerapps.microsoft.com"
Obrázek Textový řetězec identifikátoru URI (Universal Resource Identifier) k obrázku v .jpeg, .png, .svg, .gifnebo jiném běžném formátu webového obrázku. Funkce Typ nepodporuje datový typ Obrázek . MyImage přidáno jako zdroj aplikace
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Médium Textový řetězec URI pro video nebo zvukový záznam. Funkce Typ nepodporuje datový typ Média . MyVideo přidáno jako zdroj aplikace
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Číslo Alias pro datový typ Desetinné (většina hostitelů Power Fx) nebo Plovoucí desetinná čárka (aplikace plátna). Pokud pro situaci můžete použít některý z různých čísel, použijte k zajištění maximální kompatibility číslo . 123
0.0123
1e4
Zaznamenat Záznam hodnot dat. Tento složený datový typ obsahuje instance jiných datových typů uvedených v tomto článku. Další informace naleznete v tématu Práce s tabulkami. Funkce Typ podporuje tento datový typ, pokud používáte instanci záznamu. { Společnost: "Northwind Traders",
Personál: 35,
NonProfit: false }
Odkaz na záznam Odkaz na záznam v tabulce. Tyto odkazy se často používají s polymorfními vyhledáváními. Další informace naleznete v tématu Práce s odkazy. Funkce Typ nepodporuje tento datový typ. First(Accounts).Owner
Tabulka Tabulka záznamů. Všechny záznamy musí mít stejné názvy polí a datové typy a vynechaná pole se považují za prázdná. Tento složený datový typ obsahuje instance jiných datových typů uvedených v tomto článku. Další informace naleznete v tématu Práce s tabulkami. Funkce Typ podporuje tento datový typ, pokud používáte instanci tabulky. Table( { FirstName: "Sidney";
Příjmení: "Higa" },
{ FirstName: "Nancy",
Příjmení: "Anderson" } )
Text Textový řetězec Unicode. "Ahoj světe"
Time Čas bez data v časovém pásmu uživatele aplikace. Time( 11; 23; 45 )
Anulovat Používá se pouze pomocí uživatelem definovaných funkcí chování, znamená to, že funkce nemá návratový typ. Funkce Typ nepodporuje tento datový typ. I když funkce nemá návratový typ nebo hodnotu, může vždy vrátit chybu. Hi(): void = { Notify( "Hello!" ) }
Ano/Ne Výběr ze sady dvou možností opírající se o logickou hodnotu. Tento datový typ kombinuje lokalizovatelný textový štítek s logickou hodnotou. Štítek se objeví v aplikaci a logická hodnota je uložena a použita pro srovnání. Funkce Typ podporuje tento datový typ, pokud použijete instanci pole Ano/Ne podle názvu. ThisItem.Taxable

Mnohé z těchto datových typů jsou podobné a mají stejnou základní reprezentaci, jako je pole Hypertextový odkaz , které se považuje za text. Další datové typy poskytují lepší výchozí prostředí ve formulářích a dalších ovládacích prvcích.

Blank

Všechny datové typy můžou mít prázdnou hodnotu (bez hodnoty). Termín "null" je často používán v databázích pro tento koncept.

Použijte funkci Blank s funkcí Set nebo Patch pro nastavení proměnné nebo pole na prázdné. Například Set( x; Blank() ) odebere hodnotu v globální proměnné x.

Otestujte prázdnou hodnotu pomocí funkce IsBlank . Výměnu možných prázdných hodnot za hodnoty, které nejsou prázdné, provedete pomocí funkce Coalesce.

Vzhledem k tomu, že všechny datové typy podporují prázdné, mají logické adva datové typy tři možné hodnoty.

Všechny tyto čtyři datové typy jsou založeny na textovém řetězci Unicode.

Vložený text

Vložené textové řetězce ve vzorci jsou uzavřeny v uvozovkách. Dvě dvojité uvozovky představují jednu dvojitou uvozovku v textovém řetězci. Například použití následujícího vzorce ve vlastnosti OnSelect ovládacího prvku Button:

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

Výsledkem je banner, když je tlačítko stisknuto, kde první a poslední dvojité uvozovky jsou vynechány (protože odděluje textový řetězec) a opakované dvojité uvozovky kolem Hello, World! jsou nahrazeny jednou dvojitou uvozovkou:

Automaticky otevírané oznámení se zprávou „Ahoj světe“, kterou řekla Jane.

Jednoduché uvozovky se používají v názvech identifikátorů obsahujících speciální znaky a nemají žádný zvláštní význam v rámci textového řetězce.

Interpolace řetězců

Interpolaci řetězců použijte k vložení vzorců do textového řetězce. Tento přístup často usnadňuje práci s kódem a vizualizaci výstupu oproti funkci Concatenate nebo operátoru &.

Před textový řetězec zapište znak dolaru $ a vkládaný vzorec uzavřete do složených závorek {}. Chcete-li do textového řetězce vložit složenou závorku, použijte opakované složené závorky: {{ nebo }}. Interpolaci řetězců lze použít všude, kde lze použít standardní textový řetězec.

Ukažme si například tento vzorec s globálními proměnnými Apples (nastavenou na 3) a Bananas (nastavenou na 4):

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

Tento vzorec vrátí textový řetězec Máme 3 jablka, 4 banány, celkem 7 kusů ovoce. Proměnné Apples a Bananas jsou vloženy do textu nahrazující složené závorky spolu s výsledkem matematického vzorce Apples+Bananas. Mezery a další znaky kolem složených závorek jsou zachovány tak, jak jsou.

Vložené vzorce mohou obsahovat libovolné funkce nebo operátory. Vše, co je potřeba, je to, že výsledek vzorce může být přetěžován na textový řetězec. Například tento vzorec vloží do pozdravu hodnotu NickName (pokud je zadána), nebo místo ní FirstName:

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

Je-li hodnota NickName nastavena na "Joe", pak tento vzorec vytvoří textový řetězec Welcome Joe, it's great to meet you!. Ale pokud je hodnota NickNameprázdná a FirstName je "Joseph", pak tento vzorec místo toho vrátí text Dear Joseph, great to meet you!

Interpolace řetězců může do vloženého vzorce zahrnout standardní textové řetězce. Pokud nebyl zadán NickName ani FirstName, stále jsme mohli jako náhradu předat údaj Friend":

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

Řetězcové interpolace lze dokonce vnořovat. Zvažte tento příklad, kde jsou části jména First, Middle a Last spojena do pozdravu. I když jedna nebo dvě z těchto hodnot jsou prázdné, mezi částmi názvu je zajištěn správný počet mezer. Pokud není zadána žádná z částí jména, interpolace vnitřního řetězce se zhroutí na prázdný řetězec a bude nahrazena funkcí Coalesce, která vloží text "Friend".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First Middle Last Výsledek
John Qunicy Doe Welcome John Quincy Doe!
John prázdný Doe Welcome John Doe!
prázdný prázdný Doe Welcome Doe!
prázdný prázdný prázdný Welcome Friend!

Nové řádky

Vložené textové řetězce mohou obsahovat nové řádky. Jako příklad nastavíme vlastnost Text ovládacího prvku Label na následující:

"Line 1
Line 2
Line 3"

Výsledkem vzorce jsou tři řádky zobrazené v ovládacím prvku Popisek:

Vložený textový řetězec a ovládací prvek Label zobrazující tři řádky s řádkem 1, řádkem 2 a řádkem 3.

Nové řádky jsou také podporovány v řetězcové interpolaci:

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

Výsledkem je stejný výstup:

Vzorec s interpolací řetězce a ovládací prvek Label zobrazující tři řádky s řádkem 1, řádkem 2 a řádkem 3.

Prostředky obrázků a médií

V nabídce Soubor můžete jako prostředky aplikace přidat obrazové, video a zvukové soubory. Název importovaného souboru se stane názvem prostředku v aplikaci. Na tomto obrázku je do aplikace přidáno logo Northwind Traders, které je pojmenováno nwindlogo:

Zdroj Northwind.

Chcete-li tento prostředek použít v aplikaci, zadejte jej do vlastnosti Image ovládacího prvku Image:

Obrázek Northwind.

URI pro obrázky a jiná média

Do posledního příkladu se můžete trochu více zahloubat nastavením vlastnosti Text ovládacího prvku Label na nwindlogo. Popisek zobrazuje textový řetězec:

Text Northwind.

Aplikace plátna odkazují na každý obrázek nebo jiný mediální soubor, ať už je v cloudu nebo přidán jako prostředek aplikace, pomocí textového řetězce URI.

Například vlastnost Image ovládacího prvku obrázku přijímá nejen prostředky aplikace, ale také odkazy na obrázky na webu, například "https://northwindtraders.com/logo.jpg"". Vlastnost také přijímá vložené obrázky, které používají schéma URI dat, jako v tomto příkladu:

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

Tento URI zobrazuje zvětšenou verzi dvou fialových diamantů:

Dvojité diamanty.

Můžete zobrazit nejnovější snímek pořízený v ovládacím prvku Camera, pokud nastavíte vlastnost Image ovládacího prvku na vlastnost Photo ovládacího prvku kamery. Aplikace podrží obrázek v paměti a vlastnost Photo ovládacího prvku kamery vrátí odkaz URI na obrázek. Můžete například pořídit snímek a vlastnost Photo kamery může vrátit "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Pomocí URI se odkazuje na obrázek nebo jiný mediální soubor uložený v databázi. Tímto způsobem aplikace nenačte skutečná data, dokud to není potřeba. Například příloha v tabulce Microsoft Dataverse může vrátit adresu URL "appres://datasources/Contacts/table/..." Stejně jako v příkladu s fotoaparátem můžete tento obrázek zobrazit nastavením vlastnosti Image ovládacího prvku obrázku na tento odkaz, který načte binární data.

Když uložíte datový typ médií, například obrázek, do databáze, aplikace odešle skutečný obrázek nebo data médií, nikoli odkaz na URI.

Omezení velikosti

Jako textové řetězce a identifikátory URI nemají tyto datové typy předvolené omezení na jejich délku.

Binární data, na která tyto datové typy odkazují, také nemají přednastavené omezení velikosti. Například obrázek pořízený pomocí ovládacího prvku kamery, na který se odkazuje jako na "appres://...", může být stejně velký a ve stejně vysokém rozlišení, jaké dokáže zachytit kamera zařízení. Rozlišení, obnovovací kmitočet a další atributy mediálních souborů nejsou omezeny datovým typem, ale konkrétní ovládací prvky pro přehrávání a zachycení médií mohou mít svá vlastní omezení.

Všechny velikosti dat však závisí na množství dostupné paměti v aplikaci. Prohlížeče spuštěné ve stolním počítači obvykle podporují více než 100 megabajtů dat. Množství dostupné paměti na zařízení, jako je telefon, však může být mnohem nižší, obvykle v rozmezí 30–70 megabajtů. Chcete-li zjistit, zda vaše aplikace běží v rámci těchto limitů, otestujte běžné scénáře na všech zařízeních, na kterých by měla být spuštěna.

Doporučujeme uchovávat data v paměti pouze tak dlouho, jak je to nutné. Nahrajte obrázky do databáze co nejdříve; stahujte obrázky pouze tehdy, když o ně uživatel aplikace požádá.

Čísla

Poznámka:

Power Apps dnes podporuje pouze float a je to typ všech čísel. Podpora desetinných čísel bude brzy přidána.

Power Fx podporuje dva druhy čísel: desetinná čísla a čísla s plovoucí desetinnou čárkou (se synonymy číslo a měna).

Desetinné číslo je nejlepší pro většinu obchodních výpočtů. Dokáže přesně reprezentovat čísla o základu 10, což znamená, že 0.1 je možné přesně reprezentovat bez zaokrouhlovacích chyb během výpočtů. Má dostatečně velký rozsah pro jakoukoli obchodní potřebu, až 1028 s přesností až 28 číslic. Desetinné číslo je pro většinu hostitelů Power Fx výchozí číselný datový typ, používá se, pokud se jednoduše píše 2*2.

Číslo s plovoucí desetinnou čárkou je nejlepší pro vědecké výpočty. Může reprezentovat čísla ve větším rozsahu, tj. až 10308. Přesnost je omezená na 15 desetinných míst a matematika je založená na základu 2, takže nemůže přesně reprezentovat některé běžné desetinné hodnoty. Float má také vyšší výkon a upřednostňuje se, pokud je to faktor a přesnost není kritická.

Desetinná čísla

Datový typ Desetinné číslo nejčastěji používá datový typ desetinného čísla .NET. Někteří hostitelé, například sloupce vzorců Dataverse, které běží na SQL Serveru, používají datový typ desetinné čárky SQL Serveru.

Desetinné číslo provádí matematiku, jak jste se ji učili ve škole, tedy pomocí číslic o základu 10, což je důležité pro eliminaci zaokrouhlovacích chyb kvůli i velmi malým rozdílům, které se mohou nahromadit při použití matematiky o základu 2 (jak ji používá číslo s plovoucí desetinnou čárkou).

Rozsah je od kladného 79 228 162 514 264 337 593 543 950 335 do záporného 79 228 162 514 264 337 593 543 950 335. Oddělovač desetinných míst může být umístěn kdekoli v rámci těchto čísel, poskytuje přesnost až 28 číslic, a přesto bude přesně znázorněn. Například 79 228 162 514 264,337593543950335 může být přesně reprezentováno, stejně jako 7,9228162514264337593543950335.

Číslo s plovoucí desetinnou čárkou

Datový typ Číslo s plovoucí desetinnou čárkou neboli Číslo nebo Měna používá standard IEEE 754 s dvojitou přesností s plovoucí desetinnou čárkou. Tento standard poskytuje velmi široký rozsah čísel, ve kterých se pracuje, od –1,79769 x 10308 po 1,79769 x 10308. Nejmenší hodnota, kterou lze reprezentovat, je 5 x 10–324.

Číslo s plovoucí desetinnou čárkou může přesně reprezentovat celá čísla mezi –9 007 199 254 740 991 (–(253 – 1)) a 9 007 199 254 740 991 (253 – 1) včetně. Tento rozsah je větší než 32bitové (nebo 4bajtové) celočíselné datové typy, které databáze běžně používají. Aplikace plátna však nemohou představovat 64bitové (nebo 8bajtové) celočíselné datové typy. Možná budete chtít uložit číslo do textového pole nebo pomocí vypočítaného sloupce vytvořit kopii čísla v textovém poli, aby bylo mapováno na datový typ Text v aplikaci plátna. Tímto způsobem můžete tyto hodnoty podržet, zobrazit, zadat a porovnat, abyste zjistili, zda jsou stejné; v tomto formuláři však s nimi nelze provádět číselné výpočty.

Aritmetika s pohyblivou řádovou čárkou je přibližná, takže dle mnoha dokumentovaných příkladů může někdy poskytnout neočekávané výsledky. Můžete očekávat, že vzorec 55 / 100 * 100 vrátí přesně 55 a (55 / 100 * 100) – 55 vrátí přesně nulu. Druhý vzorec však vrátí 7,1054 x 10–15, což je velmi malé číslo, ale ne nula. Tento nepatrný rozdíl obvykle nezpůsobuje problém a aplikace jej při zobrazení výsledku zaokrouhlí. Malé rozdíly se však mohou v následných výpočtech nakumulovat a může to vypadat, že je špatný výsledek.

Databázové systémy často ukládají měny a provádějí výpočty pomocí desetinné matematiky, která nabízí menší rozsah, ale větší kontrolu přesnosti. Aplikace plátna standardně mapují měny na hodnoty s pohyblivou desetinnou čárkou i mimo ně; výsledek se proto může lišit od výpočtů, které se provádějí v nativním desetinném datovém typu. V závislosti na potřebách přesnosti vaší aplikace můžete chtít s těmito hodnotami pracovat jako s textem, jak je popsáno u velkých celých čísel dříve.

Výchozí hodnoty a převody

Poznámka:

Power Apps dnes podporuje pouze float a je to typ všech čísel. Podpora desetinných čísel bude brzy přidána.

Ve výchozím nastavení používá většina hostitelů Power Fx desetinné číslo. Toto výchozí nastavení znamená:

  • Doslovná čísla ve vzorcích. Číslo 1.234 je interpretováno jako desetinná hodnota. Vzorec 1.234 * 2 například interpretuje 1.234 a 2 jako desetinné číslo a vrátí desetinný výsledek.
  • Funkce Value. Value( "1.234" ) vrátí desetinnou hodnotu. Například ve vzorci Value( "1.234" ) * 2 interpretuje funkce Value obsah textového řetězce "1.234" jako desetinné číslo.

Pro práci s hodnotami Číslo s plovoucí desetinnou čárkou se používá funkce Float. Pokud náš příklad rozošíříme, Float( 1.234 ) převede desetinné číslo1.234 na číslo s plovoucí desetinnou čárkou. Funkci Float lze také použít jako náhradu za Value pro převod řetězce obsahujícího číslo s plovoucí desetinnou čárkou, jako je Float( "1.234" ), na hodnotu čísla s plovoucí desetinnou čárkou, která je vyžadována, pokud číslo nelze reprezentovat jako desetinné.

Souhrnně:

Využití Desetinné Float
Doslovná čísla ve vzorcích 1.234 Float( 1.234 )
Float( "1.234" )
Převod z textového řetězce Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Převod mezi číselnými typy Decimal( float ) Float( decimal )
Převod na textový řetězec Text( decimal ) Text( float )

Míchání číselných typů

Hodnoty čísla s plovoucí desetinnou čárkou a desetinného čísla lze libovolně míchat. Při smíchání jsou desetinné hodnoty převedeny na čísla s plovoucí desetinnou čárkou kvůli většímu rozsahu. Vzhledem k tomu, že tento převod může vést ke ztrátě přesnosti, je důležité, aby se tyto dva zbytečně nemíchaly. Vzhledem k tomu, že decimal je výchozím datovým typem literálu a většina číselných funkcí zachovává tento typ, je poměrně snadné se vyhnout přechodu na hodnotu Float , aniž byste ji museli šetřit.

Zvažte například následující výpočet pomocí pac power-fx repl po instalaci rozhraní příkazového řádku Power Platform. Protože jsou obě čísla desetinná, výpočet se provádí v desetinných číslech a výsledek si zachovává plnou přesnost:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Pokud by se místo toho druhý operand změnil na číslo s plovoucí desetinnou čárkou, pak by se celý výpočet provedl v číslech s plovoucí desetinnou čárkou a malá zlomková část by byla ztracena:

>> 1.0000000000000000000000000001 * Float(2)
2

Datum, čas a DateTime

Časová pásma

Hodnoty data a času spadají do těchto kategorií:

  • Místní čas uživatele: Tyto hodnoty jsou uloženy ve standardu UTC (Coordinated Universal Time), ale časové pásmo uživatele aplikace ovlivňuje způsob, jakým aplikace tyto hodnoty zobrazuje a jak je zadává uživatel aplikace. Například stejný okamžik se uživateli v Kanadě zobrazí jinak než uživateli v Japonsku.
  • Nezávislý na časovém pásmu: Aplikace zobrazuje tyto hodnoty stejným způsobem a uživatel aplikace je zadává stejným způsobem bez ohledu na časové pásmo. Stejný okamžik se uživateli v Kanadě zobrazí stejně jako uživateli v Japonsku. Autoři aplikací, kteří neočekávají spuštění svých aplikací v různých časových pásmech, používají tyto hodnoty, protože jsou celkově jednodušší.

V této tabulce jsou uvedeny některé příklady:

Typ data a času Hodnota uložená v databázi Hodnota zobrazená a zadaná 7 hodin západně od UTC Hodnota zobrazená a zadaná 4 hodin východně od UTC
Místní čas uživatele Neděle,19.května,2019
4:00
Sobota,18.května,2019
21:00
Neděle,19.května,2019
8:00
Nezávislý na časovém pásmu Neděle,19.května,2019
4:00
Neděle,19.května,2019
4:00
Neděle,19.května,2019
4:00

Pro datum/čas Místního času uživatele aplikace plátna používají časové pásmo prohlížeče nebo zařízení, ale modelem řízené aplikace používají nastavení uživatele v Dataverse. Tato nastavení se obvykle shodují, ale výsledky se liší, pokud se tato nastavení liší.

Použijte funkce DateAdd a TimeZoneInformation pro převod místního času na UTC a zpět. Podívejte se na příklady na konci dokumentace pro tyto funkce.

Číselné ekvivalenty

Aplikace plátna uchovávají a vypočítávají všechny hodnoty data a času, ať už se jedná o Místní čas uživatele nebo Nezávislý na časovém pásmu v UTC. Aplikace převádí hodnoty na základě časového pásma uživatele aplikace, když je zobrazuje a když je uživatel aplikace zadá.

Když aplikace plátna přečte hodnotu Nezávislý na časovém pásmu ze zdroje dat nebo zapíše takovou hodnotu do zdroje dat, aplikace automaticky upraví hodnotu tak, aby kompenzovala časové pásmo uživatele aplikace. Aplikace potom považuje tuto hodnotu za hodnotu UTC v souladu se všemi ostatními hodnotami data a času v aplikaci. Kvůli této kompenzaci se původní hodnota Nezávislý na časovém pásmu zobrazí, když aplikace upraví hodnotu UTC pro časové pásmo uživatele aplikace.

Toto chování můžete pozorněji sledovat pomocí funkce Value pro přístup k základní číselné hodnotě data / času. Tato funkce vrací hodnotu data/času jako počet milisekund od 1. ledna, 1970 00:00:00.000 UTC.

Protože každá hodnota data a času je uchovávána v UTC, vzorec Value( Date( 1970, 1, 1 ) ) ve většině částí světa nevrátí nulu, protože funkce Date funkce vrátí datum v UTC. Vzorec by například vrátil 28 800 000 v časové zóně, která je od UTC posunuta o osm hodin. Toto číslo odráží počet milisekund za osm hodin.

Návrat k našemu příkladu:

Typ data a času Hodnota uložená v databázi Hodnota zobrazená a zadaná 7 hodin západně od UTC Funkce Value vrací
Místní čas uživatele Neděle,19.května,2019
4:00
Sobota,18.května,2019
21:00
1,558,238,400,000
(Neděle,19.května,2019
4:00 UTC)
Nezávislý na časovém pásmu Neděle,19.května,2019
4:00
Neděle,19.května,2019
4:00
1,558,263,600,000
(Neděle,19.května,2019
11:00 UTC)

Převod unixových časů

Unixové časy vyjadřují počet sekund od 1. ledna, 1970 00:00:00 UTC. Protože aplikace plátna používají milisekundy místo vteřin, můžete mezi nimi převést vynásobením nebo vydělením číslem 1000.

Například unixový čas ukazuje 9. září 2001 v 01:46:40 UTC jako 1 000 000 000. Chcete-li zobrazit hodnotu data a času v aplikaci plátna, vynásobte toto číslo číslem 1 000, čímž jej převedete na milisekundy a poté jej použijte ve funkci Text. Vzorec Text (1000000000 * 1000, DateTimeFormat.UTC) vrátí řetězec 2001-09-09T01:46:40.000Z.

Tato funkce však vrátí Sobota, 8. září 2001 18:46:40 pokud používáte formát DateTimeFormat.LongDateTime24 v časové zóně, která je o –7 hodin posunuta od UTC (7 hodin západně od UTC). Tento výsledek ukazuje hodnotu DateTime správně založenou na místním časovém pásmu.

Chcete-li ji převést na unixový čas, vydělte výsledek Hodnota číslem 1 000:
RoundDown( Hodnota( UnixTime ) / 1000, 0 )

Pokud potřebujete unixový čas pro hodnotu Datum pro další výpočty nebo zobrazení v Power Apps, použijte tento vzorec:
DateAdd( Datum( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server má datové typy Datetime, Datetime2 a další typy data a času, které neobsahují posun časového pásma a neuvádějí, ve kterém časovém pásmu jsou. Aplikace plátna předpokládají, že tyto hodnoty jsou uloženy v UTC a zachází s nimi jako s místním časem uživatele. Pokud mají být hodnoty nezávislé na časovém pásmu, opravte překlady UTC pomocí funkce TimeZoneOffset.

Aplikace plátna používají přiložené informace o časovém pásmu v polích Datetimeoffset při převodu hodnoty na interní reprezentaci UTC aplikace. Aplikace vždy používají UTC jako časové pásmo (nulové posunutí časového pásma), když zapisují data.

Aplikace plátna čtou a zapisují hodnoty datového typu Čas do platformy SQL Server jako textové řetězce ve formátu doby trvání ISO 8601. Například musíte analyzovat tento formát řetězce a použít funkci Time pro převod textového řetězce "PT2H1M39S" na hodnotu Čas:

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)

Míchání informací o datu a čase

Datové typy Datum, Čas a DateTime mají různé názvy, ale všechny mají stejné informace o datech a časech.

Hodnota Datum může zahrnovat také časovou informaci, která je obvykle půlnoc. Hodnota Čas může nést informace o datu, což je obvykle 1. ledna 1970. Dataverse také ukládá časové informace pomocí pole Pouze datum, ale ve výchozím nastavení zobrazuje pouze informace o datu. Podobně aplikace plátna někdy rozlišují mezi těmito datovými typy a určují výchozí formáty a ovládací prvky.

Přímé přidávání a odečítání hodnot data a času se nedoporučuje, protože časové pásmo a jiné převody mohou způsobit matoucí výsledky. Buď použijte funkci Value pro převod hodnoty data/času nejprve na milisekundy a vezměte v úvahu časové pásmo uživatele aplikace nebo použije funkce DateAdd a DateDiff pro přidání nebo odečtení jedné z těchto hodnot.

Volby a Ano/Ne

Možnosti a datové typy se dvěma možnostmi umožňují uživateli aplikace vybrat dvě nebo více možností. Například volba Stav objednávky může nabídnout hodnoty Nová, Odesláno, Fakturováno, a Zavřeno. Datový typ se dvěma možnostmi dává jenom dvě volby.

Oba tyto datové typy zobrazují popisky jako text. Například ovládací prvek popisku zobrazuje jednu z možností stavu objednávky, pokud je vlastnost Text ovládacího prvku nastavena na vzorec, který odkazuje na tuto volbu. Popisky možností je možné lokalizovat pro uživatele aplikace v různých umístěních.

Když uživatel aplikace vybere možnost a uloží změnu, aplikace odešle data do databáze, která je uloží způsobem, který je nezávislý na jazyce. Možnost v volbě se odešle a uloží jako číslo a možnost v datovém typu se dvěma možnostmi se odešle a uloží jako logická hodnota.

Popisky jsou určené jenom pro zobrazení. Popisky nemůžete porovnat přímo, protože jsou specifické pro jazyk. Místo toho má každá volba výčet, který pracuje s podkladovým číslem nebo logickou hodnotou. Nemůžete například použít tento vzorec:

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

Ale můžete tento ekvivalentní vzorec:

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

U globálních voleb (které tabulky sdílejí) se název výčtu sady voleb shoduje s názvem globální volby. Pro místní volby (které jsou vymezeny na tabulku), může název obsahovat název tabulky. Toto chování zabraňuje konfliktům, pokud má více tabulek volby se stejným názvem. Například tabulka Účty může mít volbu Stav objednávky, jejíž název může být StavObjednávky (účty). Tento název obsahuje mezery a závorky, takže pokud na něj ve vzorci odkazujete, musíte ho ohraničí jednoduchými uvozovkami.

Hodnoty se dvěma možnostmi se také chovají jako logické hodnoty. Například hodnota se dvěma možnostmi s názvem TaxStatus může mít popisky Zdanitelné a Nepravdivé, které odpovídají true a false. K zobrazení použijte tento vzorec:

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

Můžete také použít tento vzorec:

If( ThisItem.Taxable, ...