Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Informacje przepływa przez program Power Fx w małych, dyskretnych wartościach, takich jak komórki arkusza kalkulacyjnego. Na przykład dane w polu Birthday (Urodziny ) i Pole Anniversary (Rocznica ) przepływają jako wartość Date (Data ), która zawiera rok, miesiąc i dzień. Program Power Fx formatuje te wartości, ogranicza dane wejściowe do elementów odpowiednich dla każdej z nich i udostępnia wartości w bazie danych. Urodziny i rocznice mogą się różnić od ludzi, ale system obsługuje je w taki sam sposób. W tym przypadku Data jest przykładowym typem danych.
W tym artykule wyjaśniono każdy typ danych w usłudze Power Fx, sposób ich działania i sposób mapowania na zewnętrzne źródła danych.
| Typ danych | Podpis | Przykłady |
|---|---|---|
| Boolean | Wartość true lub false. Można jej używać bezpośrednio w funkcji If, Filter i innych bez porównania. | prawda |
| Opcja wyboru | Wybór z zestawu opcji oraz numer. Ten typ danych służy do łączenia lokalizowalnych etykiet tekstowych z wartościami liczbowymi. Etykieta zostanie wyświetlona w aplikacji, a wartość liczbowa jest przechowywana i używana do porównywania. Funkcja Type obsługuje ten typ danych, jeśli używasz wystąpienia pola Wybór według nazwy. | ThisItem.OrderStatus |
| Kolor | Specyfikacja koloru obejmująca kanał alfa. |
Color.Red ColorValue( "#102030" ) RGBA( 255, 128, 0, 0,5 ) |
| Waluta | Wartość waluty przechowywana w liczbie zmiennoprzecinkowej. Wartości waluty są takie same, jak wartości liczbowe z opcjami formatowania waluty. Funkcja Type nie obsługuje typu danych Waluta . |
123 4.56 |
| Date | Data bez godziny w strefie czasowej użytkownika aplikacji. | Date(16.05.2019) |
| Data/godzina | Data z godziną w strefie czasowej użytkownika aplikacji. | DateTimeValue ("16 maja, 2019 roku 13:23:09") |
| Dziesiętne | Liczba z dużą precyzją, podstawowymi 10 operacjami i ograniczonym zakresem. |
123 Dziesiętne( "1,2345" ) |
| Dynamiczny (dawniej UntypedObject) | Typ wartości jest dynamiczny i może się różnić w czasie wykonywania. Wartość dynamiczna może być dowolnym istniejącym typem i może być konwertowana na zgodne typy przy użyciu funkcji, takich jak Wartość logiczna(), Value(), Table()itp. Aby uzyskać więcej informacji, zobacz Wartości dynamiczne i Praca z plikiem JSON. | ParseJSON("{ "Field"" : 1234 }). Pole |
| Obrót | Liczba o standardowej dokładności, 2 operacji podstawowych i szeroki zakres. |
123 8.903e121 1.234e-200 |
| Identyfikator GUID | Unikatowy identyfikator globalny. |
GUID() GUID( "123e4567-e89b-12d3-a456-4266554400000" ) |
| Hiperlink | Ciąg tekstowy zawierający hiperlink. | "https://powerapps.microsoft.com" |
| Obraz | Ciąg tekstowy identyfikatora zasobu uniwersalnego (URI) do obrazu w .jpeg, .png, .svg, .giflub inny wspólny format obrazu internetowego. Funkcja Type nie obsługuje typu danych Obraz . |
MyImage dodane jako zasób aplikacji "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
| Multimedia | Ciąg tekstowy identyfikatora URI do nagrania wideo lub audio. Funkcja Type nie obsługuje typu danych Nośnik . |
MyVideo dodane jako zasób aplikacji "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
| Liczba | Alias dla Dziesiętnych (większość hostów Power Fx) lub Zmiennoprzecinkowy (aplikacje oparte na kanwie). Jeśli w danej sytuacji możesz użyć jednej z różnych liczb, użyj opcji Liczba , aby uzyskać maksymalną zgodność. |
123 0.0123 1e4 |
| Nagraj | Rekord wartości danych. Ten złożony typ danych zawiera wystąpienia innych typów danych wymienionych w tym artykule. Aby uzyskać więcej informacji, zobacz Praca z tabelami. Funkcja Type obsługuje ten typ danych, jeśli używasz wystąpienia rekordu. |
{ Firma: "Northwind Traders", Personel: 35, Non-profit: false } |
| Odwołanie do rekordu | Odwołanie do rekordu w tabeli. Te odwołania są często używane w przypadku odnośników polimorficznych. Aby uzyskać więcej informacji, zobacz Praca z odwołaniami. Funkcja Type nie obsługuje tego typu danych. | First(Accounts).Owner |
| Tabela | Tabela rekordów. Wszystkie rekordy muszą mieć takie same nazwy pól i typy danych, a pominięte pola są traktowane jako puste. Ten złożony typ danych zawiera wystąpienia innych typów danych wymienionych w tym artykule. Aby uzyskać więcej informacji, zobacz Praca z tabelami. Funkcja Type obsługuje ten typ danych, jeśli używasz wystąpienia tabeli. |
Table( { FirstName: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
| Tekst | Ciąg tekstowy w formacie Unicode. | "Hello, World" |
| Time | Godzina bez daty w strefie czasowej użytkownika aplikacji. | Czas( 11, 23, 45 ) |
| Unieważniono | Używane tylko przez funkcje zdefiniowane przez użytkownika, wskazuje, że funkcja nie ma zwracanego typu. Funkcja Type nie obsługuje tego typu danych. Mimo że funkcja nie ma zwracanego typu lub wartości, zawsze może zwrócić błąd. | Hi(): Void = { Notify( "Hello!" ) } |
| Tak/Nie | Wybór z zestawu dwóch opcji oraz wartość logiczna. Ten typ danych służy do łączenia lokalizowalnych etykiet tekstowych z wartościami logicznymi. Etykieta zostanie wyświetlona w aplikacji, a wartość logiczna jest przechowywana i używana do porównywania. Funkcja Type obsługuje ten typ danych, jeśli używasz wystąpienia pola Tak/Nie według nazwy. | ThisItem.Taxable |
Wiele z tych typów danych jest podobnych i ma taką samą reprezentację bazową, jak pole Hiperłącze traktowane jako tekst. Dodatkowe typy danych zapewniają lepsze domyślne środowisko formularzy i innych kontrolek.
Blank
Wszystkie typy danych mogą mieć wartość pustą (bez wartości). Termin "null" jest często używany w bazach dla określenia omawianego konceptu.
Użyj funkcji Blank razem z funkcją Set lub Patch, aby nadać zmiennej lub polu wartość puste. Na przykład Set( x, Blank() ) usuwa wartość w zmiennej globalnej x.
Przetestuj pustą wartość za pomocą funkcji IsBlank . Zastąpienie możliwych pustych wartości wartościami niepustymi jest możliwe za pomocą Coalesce.
Ponieważ wszystkie typy danych obsługują wartości puste, typy danych wartości logicznych i dwóch opcji mają trzy możliwe wartości.
Tekst, hiperłącze, obraz i multimedia
Wszystkie cztery te typy danych są oparte na ciągu tekstowym Unicode.
Osadzony tekst
Osadzone ciągi tekstowe w formule są ujęte w cudzysłowy podwójne. Użyj dwóch cudzysłowów podwójnych razem, aby przedstawić podwójny cudzysłów w łańcuchu tekstowym. Można na przykład użyć następującej formuły we właściwości po OnSelect danego formantu Button:
Notify( "Jane said ""Hello, World!""" )
Wyniki na banerze po naciśnięciu przycisku, gdzie pierwszy i ostatni podwójny cudzysłów są pomijane (ponieważ rozdzielają ciąg tekstowy) i powtarzające się podwójne cudzysłowy wokół Hello, World! są zastępowane pojedynczym podwójnym cudzysłowem:
Cudzysłowy są używane w przypadku nazw identyfikatorów zawierających znaki specjalne, które nie wpływają na specjalnie ciąg tekstowy.
Interpolacja ciągów
Korzystanie z ciągów w celu osadzenia formuł w ciągu tekstowym. Takie podejście jest często łatwiejsze w użyciu i wizualizacji niż użycie funkcji Concatenate lub operatora &.
Prefiks ciągu tekstowego znakiem dolara $ i ujmij formułę, która ma być osadzona w nawiasach {}. Aby dołączyć do ciągu tekstowego ciąg tekstowy, użyj powtarzających się nawiasów: {{ lub }}. Interpolacji ciągów można używać wszędzie tam, gdzie można użyć standardowego ciągu tekstowego.
Rozważmy na przykład tę formułę ze zmiennymi globalnymi Jabłka ustawioną na 3 i Banany ustawioną na 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
W tym formułie są zwracane ciąg tekstowy: Mamy 3 apples i 4 banany, co daje 7 owoców łącznie. Zmienne Jabłka i Banany są w tekście w miejsce nawiasów klamrowych wraz z wynikiem formuły matematycznej Jabłka+Banany. Spacje i inne znaki w nawiasach są zachowane w takich postaciach, w których są.
Wbudowane formuły mogą zawierać wszystkie funkcje lub operatory. Wszystko, co jest wymagane, jest to, że wynik formuły może być zmuszany do ciągu tekstowego. Na przykład ta formuła wstawi NickName, jeśli jest podany, lub FirstName, jeśli nie, w powitaniu:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!"
Jeśli parametr NickName ma wartość „Joe”, ta formuła generuje ciąg tekstowy Witaj Joe, miło Cię poznać!. Jeśli jednak NickName jest pusta, a FirstName to "Joseph", wtedy ta formuła daje zamiast tego Drogi Joseph, miło Cię poznać!.
Interpolacja ciągów może obejmować standardowe ciągi tekstowe w osadzonej formule. Na przykład, jeśli nie podano ani NickName ani FirstName, nadal moglibyśmy podać "Przyjaciel" jako substytut:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Ciągi mogą być nawet zagnieżdżone. Rozważ ten przykład, w którym nazwy Imię, Drugie imię i Nazwisko są połączone w powitanie. Nawet jeśli jedna lub dwie z tych wartości są puste, między częściami nazwy będzie się znaleźć poprawna liczba spacji. Jeśli żadna z części nie zostanie podana, interpolacja wewnętrznego ciągu zostanie zwinięta do pustego ciągu i zostanie zastąpiona przez funkcję Coalesce przez „Przyjaciel”.
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
| Pierwsze | Drugie | Nazwisko | Wynik |
|---|---|---|---|
| Jan | Qunicy | Doe | Welcome John Quincy Doe! |
| Jan | puste | Doe | Welcome John Doe! |
| puste | puste | Doe | Welcome Doe! |
| puste | puste | puste | Welcome Friend! |
Nowe wiersze
Osadzone ciągi tekstowe mogą zawierać znaki nowej linii. Na przykład rozważ ustawienie właściwości Text kontrolki Label na następujące:
"Line 1
Line 2
Line 3"
Powyższy formuła zawiera trzy wiersze widoczne w kontrolce etykiety:
Znaki nowej linii są również obsługiwane z interpolacją ciągów, jak pokazano poniżej:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Co daje ten sam wynik:
Zasoby obrazów i multimediów
Za pośrednictwem menu Plik można dodawać pliki obrazów, filmów i audio jako zasoby aplikacji. Nazwa zaimportowanego pliku stanie się nazwą zasobu w aplikacji. Na tej grafice logo Northwind Traders o nazwie nwindlogo zostało dodane do aplikacji:
Aby użyć tego zasobu w aplikacji, należy go określić we właściwości Image formantu typu Image:
Identyfikatory URI dla obrazów i innych multimediów
W ostatnim przykładzie przejdziemy nieco głębiej, ustawiając właściwość Text formantu Label na wartość nwindlogo. Etykieta zawiera łańcuch tekstowy:
Aplikacje kanwy odwołują się do poszczególnych obrazów lub innych plików multimedialnych, zarówno w chmurze, jak i dodawanych jako zasoby aplikacji za pomocą ciągu tekstowego URI.
Na przykład właściwość Image formantu typu obraz akceptuje nie tylko zasoby aplikacji, ale również łącza do tych samych obrazów w sieci Web, na przykład "https://northwindtraders.com/logo.jpg". Właściwość akceptuje również wbudowane obrazy, które korzystają ze schematu identyfikatora URI danych, tak jak w poniższym przykładzie:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
W tym identyfikatorze URI jest wyświetlana powiększona wersja dwóch purpurowych karo:
Ostatnio zapisany obraz można wyświetlić w formancie Camera, jeśli właściwość formantu Image jest ustawiona na wartość Photo w ustawieniach aparatu. Aplikacja zapisuje obraz w pamięci, a właściwość Photo formantu aparatu zwraca odwołanie do tego obrazu w postaci identyfikatora URI. Na przykład można zrobić zdjęcie i właściwość Photo aparatu mogłaby zwrócić następujący ciąg "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
Identyfikator URI jest używany do odwoływania się do tego obrazu lub innego pliku multimedialnego, który jest przechowywany w bazie danych programu. W ten sposób aplikacja nie pobiera rzeczywistych danych, dopóki nie będą potrzebne. Na przykład załącznik w tabeli Microsoft Dataverse może zwrócić "appres://datasources/Contacts/table/..." Tak jak w przykładzie z kamerą, możesz wyświetlić ten obraz, ustawiając właściwość Image kontrolki obrazu do tego odwołania, która pobiera dane binarne.
Kiedy typ danych multimedialnych, np. obraz, jest wysyłany do bazy danych, aplikacja przesyła rzeczywisty obraz lub dane multimedialne, a nie odwołanie do identyfikatora URI.
Limity rozmiarów
W przypadku ciągów tekstowych i identyfikatorów URI te typy danych nie mają wstępnie ustawionych ograniczeń długości.
Dane binarne, do których odnoszą się te typy danych, nie mają wstępnie ustawionego limitu rozmiaru. Na przykład obraz przechwycony przez formant aparatu, który jest obecnie przywoływany jako "appres://...", może być tak duży i wysoki, jak tylko aparat fotograficzny może obsłużyć. Rozpoznawanie, liczba klatek na sekundę i inne atrybuty plików multimedialnych nie są ograniczone przez typ danych, ale specyficzne formanty umożliwiające odtwarzanie i przechwytywanie multimediów mogą mieć własne ograniczenia.
Jednak wszystkie rozmiary danych są uzależnione od ilości pamięci dostępnej w aplikacji. Przeglądarki działające na komputerze stacjonarnym zwykle obsługują więcej niż 100 megabajtów danych. Jednakże ilość dostępnej pamięci na urządzeniu takim jak telefon może być znacznie niższa. Zazwyczaj mówimy o zakresie 30-70 megabajtów. Aby określić, czy aplikacja będzie uruchamiana w ramach tych ograniczeń, należy przetestować typowe scenariusze na wszystkich urządzeniach, w których ma zostać uruchomiona.
Najlepszym rozwiązaniem jest przechowywanie danych w pamięci tylko tak długo, jak jest to konieczne. Przekaż obrazy do bazy danych, jak tylko będzie to możliwe; pobierz tylko te obrazy, których zażądają aplikacje użytkownika.
Liczby
Uwaga
Usługa Power Apps obsługuje obecnie tylko zmiennoprzecinkowe i jest to typ wszystkich liczb. Dziesiętne — obsługa zostanie wkrótce dodana.
Power Fx obsługuje dwa rodzaje liczb: Liczba dziesiętna i i Liczba zmiennoprzecinkowa (z synonimami Liczba i Waluta).
Liczba dziesiętna jest najlepsza w przypadku większości obliczeń biznesowych. Może dokładnie reprezentować liczby o podstawie 10, co oznacza, że 0.1 może być dokładnie reprezentowane i pozwoli uniknąć błędów zaokrąglania podczas obliczeń. Posiada on tak duży zakres na tyle duży, że można w nim uzyskać dokładność do 1028 cyfr do 28 cyfr.
Liczba dziesiętna jest domyślnym typem danych liczbowych dla większości hostów Power Fx, używanym w przypadku zapisu 2*2.
Zmiennoprzecinkowy jest najlepszym rozwiązaniem do obliczeń wykonywania obliczeń. Może reprezentować liczby w większym zakresie, do 10308. Precyzja jest ograniczona do 15 miejsc dziesiętnych, a matematyka jest oparta na podstawie 2, więc nie może dokładnie reprezentować niektórych typowych wartości dziesiętnych. Zmiennoprzecinkowa ma również wyższą wydajność i jest preferowana, jeśli jest to czynnik i precyzja nie jest krytyczna.
Numery dziesiętne
Typ danych Dziesiętne najczęściej korzysta z typu danych dziesiętnych .NET. Niektóre hosty, takie jak kolumny formuły Dataverse, które są uruchamiane w programie SQL Server, używają typu danych dziesiętnych programu SQL Server.
Dziesiętne wykonuje matematykę w sposób, w jaki uczyłeś się w szkole, używając cyfr o podstawie 10, co jest ważne, aby uniknąć błędów zaokrąglania z bardzo małych różnic, które mogą się kumulować podczas korzystania z matematyki o podstawie 2 (używanej przez Zmiennoprzecinkowy).
Zakres od dodatnich 79,228,162,514,264,337,593,543,950,335 do ujemnych 79,228,162,514,264,337,593,543,950,335. Separator dziesiętny można umieścić w dowolnym miejscu w obrębie tych liczb, podając dokładność do 28 cyfr. Wciąż jest dokładnie przedstawiany. Na przykład 79 228 162 514 264,337593543950335 może być dokładnie reprezentowany jako 7,9228162514264337593543950335.
Liczby zmiennoprzecinkowe
Typ danych Zmiennoprzecinkowe, zwane także jako Numer lub Waluta, używa standardowego punktu zmiennoprzecinkowego o podwójnej dokładności IEEE 754. Ten standard zawiera bardzo duży zakres liczb, w których można pracować, od –1,79769 x 10308 do 1.79769 x 10308. Najmniejszą wartość, która może być reprezentowana, wynosi 5 x 10 –324.
Liczba zmiennoprzecinkowa może dokładnie reprezentować liczby całkowite (lub liczby całkowite) między wartościami –9 007 199 254 740 991 (–(253 – 1)) a 9 007 199 254 740 991 (253 – 1) — włącznie. Jest to wartość większa niż 32-bitowa (lub 4-bajtowa) liczba całkowita liczbowych typów danych, które zwykle są używane przez bazy danych. Aplikacje kanwy nie mogą jednak reprezentować 64-bitowych (lub ośmiobitowych) liczb całkowitych. Użytkownik może chcieć zapisać liczbę w polu tekstowym lub użyć kolumny obliczanej w celu skopiowania numeru w polu tekstowym, tak aby został zamapowany do typu danych Tekst w aplikacji kanwy. W ten sposób można przechowywać, wyświetlać i wprowadzać te wartości oraz porównywać je, aby określić, czy są równe. W tym formularzu nie można jednak wykonywać obliczeń numerycznych.
Arytmetyka zmiennoprzecinkowa jest przybliżona, więc zdarza się, że czasami otrzymywane są nieoczekiwane wyniki w wielu udokumentowanych przykładach. Można oczekiwać, że formuła 55 / 100 * 100 zwróci dokładnie 55, a formuła zwróci (55 / 100 * 100) - 55 dokładnie zero. Natomiast druga formuła zwraca wartość 7,1054 x 10 –15 – wartość niską, ale nie zero. Mała różnica zazwyczaj nie powoduje problemu, a aplikacja zaokrągla wynik. Małe różnice mogą jednak nakładać się w kolejnych obliczeniach i odpowiedzi mogą wydawać się niewłaściwe.
Systemy baz danych często przechowują waluty i realizują obliczenia za pomocą liczb dziesiętnych, które oferują mniejszy zakres, ale większą kontrolę nad precyzją. Domyślnie aplikacje kanwy mapują waluty w programie i poza wartościami zmiennoprzecinkowymi; z tego powodu wyniki mogą różnić się od obliczeń wykonanych w środowisku, gdzie typ danych dziesiętnych jest wartością natywną. W zależności od dokładności aplikacji możesz chcieć pracować z tymi wartościami jako Tekst zgodnie z opisem dla dużych liczb całkowitych wcześniej.
Wartości domyślne i konwersje
Uwaga
Usługa Power Apps obsługuje obecnie tylko zmiennoprzecinkowe i jest to typ wszystkich liczb. Dziesiętne — obsługa zostanie wkrótce dodana.
W większości hostów Power Fx domyślnie są używane miejsca dziesiętne. Ustawienie domyślne oznacza, że:
- Liczby dosłowne w formułach. Liczba
1.234jest interpretowana jako wartość Dziesiętna. Na przykład formuła1.234 * 2interpretuje1.234i2jako Dziesiętne i zwraca wynik Dziesiętny. - Funkcja Value.
Value( "1.234" )zwraca wartość Dziesiętną. Na przykład, w formuleValue( "1.234" ) * 2, funkcja Value interpretuje treść ciągu tekstowego"1.234"jako Dziesiętna.
Do pracy z wartościami Zmiennoprzecinkowy jest używana funkcja Zmiennoprzecinkowa. Rozszerzając nasz przykład, Float( 1.234 ) konwertuje Dziesiętne1.234 na Zmiennoprzecinkowe.
Zmiennoprzecinkowe może także służyć jako zamiennik w przypadku wartości w celu konwersji ciągu zawierającego liczbę zmiennoprzecinkową, taką jak Float( "1.234" ) na wartość Zmiennoprzecinkowa, która jest wymagana, jeśli numer nie może być reprezentowany jako Dziesiętne.
Podsumowując:
| Sposób użycia | Dziesiętne | Obrót |
|---|---|---|
| Liczby dosłowne w formułach | 1.234 |
Float( 1.234 )Float( "1.234" ) |
| Konwersja z ciągu tekstowego | Value( "1.234" )Decimal( "1.234" ) |
Float( "1.234" ) |
| Konwersja między typami numerycznmi | Decimal( float ) |
Float( decimal ) |
| Konwersja na ciąg tekstowy | Text( decimal ) |
Text( float ) |
Mieszanie typów numerycznych
Wartości zmiennoprzecinkowe i Dziesiętne można łatwo mieszać. W przypadku mieszania wartości dziesiętne są konwertowane na wartości zmiennoprzecinkowe ze względu na większy zakres. Ponieważ ta konwersja może spowodować utratę precyzji, ważne jest, aby nie mieszać tych dwóch niepotrzebnie. Ponieważ liczba dziesiętna jest domyślnym typem danych literału, a większość funkcji liczbowych zachowuje typ, stosunkowo łatwo jest uniknąć przechodzenia na zmiennoprzecinkowy bez ponoszenia go.
Na przykład rozważ następujące obliczenia, używając pac power-fx repl po instalacji Power Platform CLI. Ponieważ obie liczby to Liczba dziesiętna, obliczenia są wykonywane z przecinkiem dziesiętnym, a w wyniku zachowywana jest pełna dokładność:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Jeśli zamiast tego drugi element został zmieniony na Zmiennoprzecinkowe, wówczas całe obliczenie zostanie wykonane na wartości Zmiennoprzecinkowa, a część ułamkowa zostanie utracona:
>> 1.0000000000000000000000000001 * Float(2)
2
Data, godzina oraz DateTime
Strefy czasowe
Wartości daty i godziny są objęte tymi kategoriami:
- Użytkownik lokalny: te wartości są przechowywane w formacie UTC (skoordynowany czas uniwersalny), ale strefa czasowa użytkownika aplikacji ma wpływ na sposób, w jaki aplikacja wyświetla te wartości i sposób ich określania przez użytkownika aplikacji. Na przykład, ten sam moment wygląda inaczej dla użytkownika w Kanadzie, niż dla użytkownika w Japonii.
- Niezależne od strefy czasowej: aplikacja zawiera te wartości w taki sam sposób, jak użytkownicy aplikacji określają je. Ten sam moment wygląda tak samo dla użytkownika w Kanadzie, jak dla użytkownika w Japonii. Autorzy aplikacji, którzy nie oczekują, że ich aplikacje są uruchamiane w różnych strefach czasowych, używają tych wartości, ponieważ są one prostsze.
W poniższej tabeli przedstawiono kilka przykładów:
| Typ daty/godziny | Wartość zapisana w bazie danych programu | Wyświetlana i wprowadzona wartość to 7 godzin na zachód od UTC | Wyświetlana i wprowadzona wartość to 4 godzin na wschód od UTC |
|---|---|---|---|
| Lokalny użytkownik | Niedziela,maj19,2019 04:00 |
Sobota,18 maja2019 21:00 |
Niedziela,maj19,2019 08:00 |
| Niezależne od strefy czasowej | Niedziela,maj19,2019 04:00 |
Niedziela,maj19,2019 04:00 |
Niedziela,maj19,2019 04:00 |
W przypadku daty/godziny typu Użytkownik lokalny aplikacja kanwy używa strefy czasowej przeglądarki lub urządzenia, ale aplikacje oparte na modelu używają ustawień użytkownika w programie Dataverse. Te ustawienia są zwykle zgodne, ale wyniki różnią się, jeśli te ustawienia się różnią.
Korzystając z funkcji DateAdd i TimeZoneInformation można konwertować czas lokalny na UTC i na odwrót. Zapoznaj się z przykładami na końcu dokumentacji tych funkcji.
Ekwiwalenty liczbowe
Aplikacje kanwy przechowują i obliczają wszystkie wartości daty/godziny, albo w formacie Lokalny użytkownika albo Niezależne od strefy czasowej w czasie UTC. Aplikacja tłumaczy wartości na podstawie strefy czasowej użytkownika podczas ich wyświetlania i kiedy użytkownicy aplikacji określą je.
Kiedy aplikacja kanwy odczytuje wartość typu Niezależne od strefy czasowej ze źródła danych lub zapisuje taką wartość w źródle, aplikacja automatycznie koryguje wartość, biorąc pod uwagę strefę czasową użytkownika aplikacji. Aplikacja traktuje wartość jako wartość czasu UTC, zgodnie ze wszystkimi innymi wartościami daty/godziny w aplikacji. Z uwagi na ten szacunek, oryginalna wartość Niezależne od strefy czasowej jest wyświetlana, gdy aplikacja dostosowuje wartość czasu UTC do strefy czasowej użytkownika.
Zachowanie to można dokładniej obserwować, korzystając z funkcji Value, w celu uzyskania dostępu do pierwotnej wartości numerycznej dla wartości data/godzina. Ta funkcja zwraca wartość data/godzina jako liczbę milisekund od 1 stycznia 1970 roku godz. 00:00:00.000 czasu UTC.
Ponieważ każda wartość daty/godziny jest przechowywana w formacie UTC, formuła Value ( Data( 1970, 1, 1) ) nie zwraca zera w większości części świata, ponieważ funkcja Date zwraca datę w formacie UTC. Na przykład formuła zwraca 28,800,000 w strefie czasowej, która jest przesunięta względem UTC o osiem godzin. Liczba ta odzwierciedla liczbę milisekund zawierającą się w ośmiu godzinach.
Powrót do naszego przykładu:
| Typ daty/godziny | Wartość zapisana w bazie danych programu | Wyświetlana i wprowadzona wartość to 7 godzin na zachód od UTC | Zwroty funkcji Value |
|---|---|---|---|
| Lokalny użytkownik | Niedziela,maj19,2019 04:00 |
Sobota,18 maja2019 21:00 |
1,558,238,400,000 (Niedziela,maj19,2019 4:00 rano UTC) |
| Niezależne od strefy czasowej | Niedziela,maj19,2019 04:00 |
Niedziela,maj19,2019 04:00 |
1,558,263,600,000 (Niedziela,maj19,2019 11:00 rano UTC) |
Konwertowanie godzin systemu UNIX
Czas w systemie UNIX odzwierciedla liczbę sekund od, która upłynęła od dnia 1 stycznia 1970 00:00:00 czasu UTC. Ponieważ aplikacje kanwy korzystają z milisekund, a nie sekund, można dokonać konwersji pomiędzy nimi, mnożąc lub dzieląc je przez 1000.
Na przykład system UNIX pokazuje datę 9 września 2001 roku, 01:46:40 UTC jako 1 000 000 000. Aby wyświetlić tę wartość data/czas w aplikacji kanwy należy pomnożyć tę liczbę przez 1000, aby przekonwertować ją na milisekundy, a następnie użyć jej w funkcji Text. Formuła Tekst( 1000000000 * 1000, DateTimeFormat.UTC ) zwraca ciąg 2001-09-09T01:46:40.000Z.
Jednak ta funkcja zwraca datę Sobota, 8 września, 2001 roku, godz. 18:46:40, jeśli zostanie użyty format DateTimeFormat.LongDateTime24 w strefie czasowej przesuniętej o 7 godzin w stosunku od czasu UTC (7 godzin na zachód od UTC). W wyniku tego wartość DateTime jest wyświetlana w sposób poprawny na podstawie lokalnej strefy czasowej.
Aby przeprowadzić konwersję na czas systemu UNIX, należy podzielić wynik z encji Wartość o 1000:
RoundDown( Value( UnixTime ) / 1000, 0 )
Jeśli czas systemu UNIX jest potrzebny w wartości Data na potrzeby dalszych obliczeń lub wyświetlenia w programie Power Apps, należy użyć następującej formuły:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )
SQL Server
Program SQL Server zawiera wartości DateTime, Datetime2 i inne typy danych data/godzina, które nie zawierają kompensacji przesunięcia strefy czasowej i nie wskazują strefy czasowej, w której znajduje się użytkownik. Aplikacje kanwy zakładają, że te wartości są zapisane w formacie UTC i są traktowane jako Lokalne dla użytkownika. Jeśli wartości mają być niezależne od strefy czasowej, należy wprowadzić wyrównanie do UTC za pomocą funkcji TimeZoneOffset.
Aplikacje kanwy używają zawartych w polu Datetimeoffset informacji o strefie czasowej, aby konwertować wartość na wewnętrzną wartość aplikacji w UTC. Aplikacje zawsze używają czasu UTC jako strefy czasowej (brak przesunięcia strefy czasowej) przy zapisywaniu danych.
Aplikacje kanwy odczytują i zapisują wartości Czas w programie SQL Server jako ciągi tekstowe w formacie czasu trwania ISO 8601. Na przykład należy przeanalizować ten format ciągu i użyć funkcji Time, aby przekonwertować ciąg tekstowy "PT2H1M39S" na wartość Czas:
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)
Mieszanie informacji o dacie i godzinie
Data, Godzina i wartość DateTime mają różne nazwy, ale są w nich przechowywane te same informacje o datach i godzinach.
Wartość Data może zawierać także informacje o godzinie – zwykle jest to północ. Wartość Czas może zawierać informację o dacie – zwykle jest to 1 stycznia 1970. W Dataverse także przechowywane są informacje o czasie zawierającym pole Tylko data, ale domyślnie są widoczne tylko informacje o dacie. Podobnie aplikacje kanwy niekiedy odróżniają te typy danych w celu określenia domyślnych formatów i formantów.
Bezpośrednie dodawanie i odejmowanie wartości daty i godziny nie jest zalecane, ponieważ przeliczenia strefy czasowej i inne mogą zwracać mylące wyniki. Użyj funkcji Value, aby przekonwertować wartości typu data/godzina na milisekundy, oraz aby uwzględnić strefę czasową użytkownika aplikacji, lub użyj funkcji DateAdd i DateDiff, aby dodać lub odjąć jedną z tych wartości.
Wybory i tak/nie
Opcje wyboru i typy danych z dwiema opcjami umożliwiają wybranie co najmniej dwóch opcji dla użytkownika aplikacji. Na przykład wybór stanu zamówienia może oferować opcje Nowy, Wysłano, Zafakturowany i Zamknięty. Typ danych z dwiema opcjami daje tylko dwie opcje.
Oba te typy danych pokazują etykiety jako tekst. Na przykład formant etykiety pokazuje jedną z opcji stanu zamówienia, jeśli we właściwości Text formantu ustawiono formułę, która odwołuje się do tego wyboru. Etykiety opcji można lokalizować dla użytkowników aplikacji w różnych lokalizacjach.
Gdy użytkownik aplikacji wybierze opcję i zapisze zmianę, aplikacja wysyła dane do bazy danych, która przechowuje je w sposób niezależny od języka. Opcja w wybranym polu jest wysyłana i przechowywana jako liczba, a opcja w typie danych z dwiema opcjami jest wysyłana i przechowywana jako wartość logiczna.
Etykiety są przeznaczone tylko do wyświetlania. Nie można porównać etykiet bezpośrednio, ponieważ są one specyficzne dla języka. Zamiast tego każdy wybór ma wyliczenie, które działa z bazową liczbą lub wartością logiczną. Na przykład tej formuły nie można użyć:
If( ThisItem.OrderStatus = "Active", ...
Ale tej formuły można użyć:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
W przypadku opcji globalnych (udostępnianie tabel) nazwa wyliczenia zestawu opcji jest odpowiada nazwie wyboru globalnego. W przypadku opcji lokalnych (które są ograniczone do tabeli), nazwa może zawierać nazwę tabeli. To zachowanie pozwala uniknąć konfliktów, jeśli wiele tabel ma opcje o tej samej nazwie. Na przykład w tabeli Konta może być wybierany OrderStatus, a jej nazwa może się okazać OrderStatus (Accounts). Ta nazwa zawiera spacje i nawiasy, dlatego należy otaczać ją pojedynczymi cudzysłowami, jeśli odwołujesz się do niej w formule.
Dwie opcje wartości zachowują się również jako wartości logiczne. Na przykład dwie opcje o nazwie TaxStatus mogą mieć etykiety Taxable i Non-Taxable, które odpowiadają true i false. Aby to pokazać, użyj następującej formuły:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Możesz również użyć tej formuły:
If( ThisItem.Taxable, ...