Data types
Notiz
Microsoft Power Fx ist der neue Name für die Formelsprache für Canvas-Apps. Diese Artikel werden ständig weiterentwickelt, da wir die Sprache aus Canvas-Apps extrahieren, in andere Microsoft Power Platform-Produkte integrieren und als Open Source zur Verfügung stellen. Beginnen Sie mit der Microsoft Power Fx-Übersicht, um eine Einführung in die Sprache zu erhalten.
Informationen fließen in kleinen, diskreten Werten durch eine App, ähnlich wie die Zellen einer Tabelle. Zum Beispiel würden Daten in einem Geburtstag-Feld und einem Jahrestag-Feld beide als ein Datum-Wert durchfließen, der das Jahr, den Monat und den Tag enthält. Die App weiß, wie diese Werte formatiert, die Eingabe auf die jeweils geeigneten Werte beschränkt und die Werte für eine Datenbank freigegeben werden. Geburtstage unterscheiden sich von Jahrestagen zu Personen, aber das System behandelt sie genauso. In diesem Fall ist Datum ein Beispiel für einen Datentyp.
Dieser Artikel enthält Details zu den Datentypen, die Canvas-Apps unterstützen. Wenn eine App eine Verbindung zu einer externen Datenquelle herstellt, wird jeder Datentyp in dieser Quelle einem Datentyp für Canvas-Apps zugeordnet.
Datentyp | Beschreibung | Beispiele |
---|---|---|
boolesch | Ein Wert wahr oder falsch. Kann direkt in If, Filter und anderen Funktionen ohne Vergleich verwendet werden. | WAHR |
Farbe | Eine Farbspezifikation, einschließlich eines Alphakanals. | Farbe: Rot Farbwert( "102030" ) RGBA (255, 128, 0, 0,5) |
Währung | Ein Währungswert, der in einer Gleitkommazahl gespeichert ist. Währungswerte sind dieselben wie Zahlenwerte mit Währungsformatierungsoptionen. | 123 4,56 |
Datum | Ein Datum ohne Uhrzeit in der Zeitzone des App-Benutzers. | Datum (16.5.2019) |
Datum/Uhrzeit | Ein Datum mit Uhrzeit in der Zeitzone des App-Benutzers. | DateTimeValue( "16. Mai, 2019 1:23:09 Uhr" ) |
Dezimal | Eine Zahl mit hoher Präzision, Basis-10-Vorgängen und begrenztem Bereich. | 123 Dezimalzahl( "1.2345" ) |
GUID | A Globally Unique Identifier. | GUID() GUID( "123e4567-e89b-12d3-a456-426655440000 " ) |
Hyperlink | Eine Textzeichenfolge, die einen Hyperlink enthält. | "https://powerapps.microsoft.com" ; |
Bild | Eine Textzeichenfolge Universal Resource Identifier (URI) zu einem Bild in den Formaten .jpeg, .png, .svg, .gif oder einem anderen gängigen Webbildformat. | MeinBild als App-Ressource hinzugefügt "https://northwindtraders.com/logo.jpg" ; „erlaubt://blobmanager/7b12ffa2 …“ |
Medien | Eine URI-Textzeichenfolge für eine Video- oder Audioaufnahme. | MeinVideo als App-Ressource hinzugefügt "https://northwindtraders.com/intro.mp4" ; „appres://blobmanager/3ba411c …“ |
Nummer oder Schweben | Eine Zahl mit Standard-Präzision, Basis-2-Vorgängen und weitem Bereich. | 123 8,903 € 1,234 € |
Auswahl | Eine Auswahl aus einer Reihe von Optionen, die durch eine Zahl unterstützt werden. Dieser Datentyp kombiniert eine lokalisierbare Textbezeichnung mit einem numerischen Wert. Das Etikett wird in der App angezeigt und der numerische Wert wird gespeichert und für Vergleiche verwendet. | ThisItem.OrderStatus |
Aufzeichnen | Eine Aufzeichnung von Datenwerten. Dieser zusammengesetzte Datentyp enthält Instanzen anderer Datentypen, die in diesem Thema aufgeführt sind. Weitere Informationen: Verwenden von Tabellen. | { Firma: "Northwind Traders", Personal: 35, NonProfit: false } |
Datensatzreferenz | Ein Verweis auf einen Datensatz in einer Tabelle. Solche Referenzen werden häufig bei polymorphen Suchen verwendet. Weitere Informationen: Verwenden von Referenzen. | Vorname(Konten).Eigentümer |
Tabelle | Eine Tabelle mit Datensätzen. Alle Datensätze müssen für ihre Felder mit denselben Datentypen dieselben Namen haben, und ausgelassene Felder werden als leer behandelt. Dieser zusammengesetzte Datentyp enthält Instanzen anderer Datentypen, die in diesem Thema aufgeführt sind. Weitere Informationen: Verwenden von Tabellen. | Tisch( { Vorname: "Sidney", LastName: „Higa“}, { FirstName: „Nancy“, LastName: „Anderson“} ) |
Text | Eine Unicode-Textzeichenfolge. | „Hallo Welt“ |
Zeit | Eine Uhrzeit ohne Datum in der Zeitzone des App-Benutzers. | Zeit (11, 23, 45) |
Zwei Option | Eine Auswahl aus einer Reihe von zwei Optionen, die durch einen booleschen Wert unterstützt werden. Dieser Datentyp kombiniert eine lokalisierbare Textbezeichnung mit einem booleschen Wert. Das Etikett wird in der App angezeigt und der boolesche Wert wird gespeichert und für Vergleiche verwendet. | ThisItem.Taxable |
nicht typisiertes Objekt | Ein Objekt eines nicht deklarierten Typs. Das zugrunde liegende Objekt kann ein beliebiger vorhandener Typ sein und kann mit Funktionen wie Boolean(), Value(), Table() usw. in kompatible Typen konvertiert werden. Weitere Informationen finden Sie unter Nicht typisiertes Objekt und Arbeiten mit JSON. | ParseJSON("{ ""Feld"" : 1234 } ").Feld |
Viele dieser Datentypen sind ähnlich und haben dieselbe zugrunde liegende Darstellung, z. B. Hyperlink-Feld behandelt als Text. Die zusätzlichen Datentypen bieten bessere Standarderfahrungen in Formularen und anderen Steuerelementen.
Blank
Alle Datentypen können einen Wert von leer haben (mit anderen Worten, kein Wert). Der Begriff "null" wird in Datenbanken häufig für dieses Konzept verwendet.
Verwenden Sie die Funktion Blank mit der Funktion Set oder Patch zum Setzen einer Variablen oder eines Feldes auf leer. Zum Beispiel entfernt Set( x, Blank() ) jeden Wert in der globalen Variable x.
Test für einen leeren Wert durch die Verwendung der Funktion IsBlank. Ersetzen Sie mögliche leere Werte mit nicht-leeren Werten unter Verwendung der Funktion Coalesce.
Weil alle Datentypen leer unterstützen, haben die Datentypen Boolesch und Zwei Optionen effektiv drei mögliche Werte.
Text, Hyperlink, Bild und Medien
Alle vier dieser Datentypen basieren auf einer Unicode-Textzeichenfolge.
Eingebetteter Text
Eingebettete Textzeichenfolgen in einer Formel werden in doppelte Anführungszeichen gesetzt. Verwenden Sie zwei doppelte Anführungszeichen zusammen, um ein einfaches doppeltes Anführungszeichen in der Textzeichenfolge darzustellen. Verwenden Sie beispielsweise die folgende Formel in der Eigenschaft OnSelect eines Button-Steuerelements:
Notify( "Jane said ""Hello, World!""" )
Wenn Sie auf die Schaltfläche drücken, wird ein Banner angezeigt, in dem das erste und das Letzte doppelte Anführungszeichen (da sie die Textzeichenfolge begrenzen) und die wiederholten doppelten Anführungszeichen um Hallo Welt! werden durch einfache Anführungszeichen ersetzt:
Für Bezeichnernamen die Sonderzeichen enthalten und innerhalb einer Textzeichenfolge keine besondere Bedeutung haben, werden einfache Anführungszeichen verwendet.
Zeichenfolgeninterpolation
Verwenden Sie Zeichenfolgeninterpolation, um Formeln in eine Textzeichenfolge einzubetten. Dies ist oft einfacher zu handhaben, und die Ausgabe ist einfacher zu visualisieren als die Verwendung der Funktion Concatenate bzw. des Operators &.
Stellen Sie der Textzeichenfolge ein Dollarzeichen $ voran und schließen Sie die einzubettende Formel in geschweifte Klammern { } ein. Um eine geschweifte Klammer in die Textzeichenfolge einzufügen, verwenden Sie wiederholte geschweifte Klammern: {{ oder }}. Die Zeichenfolgeninterpolation kann überall dort verwendet werden, wo eine Standardtextzeichenfolge verwendet werden kann.
Stellen Sie sich beispielsweise diese Formel mit globalen Variablen Äpfel auf 3 gesetzt und Bananen auf 4 gesetzt vor:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Diese Formel gibt die Textzeichenfolge zurück Wir haben 3 Äpfel, 4 Bananen, was insgesamt 7 Früchte ergibt. Die Variablen Äpfel und Bananen werden in den Text eingefügt, der die geschweiften Klammern ersetzt, zusammen mit dem Ergebnis der mathematischen Formel Äpfel + Bananen. Leerzeichen und andere Zeichen um die geschweiften Klammern herum bleiben unverändert.
Eingebettete Formeln können beliebige Funktionen oder Operatoren enthalten. Alles, was erforderlich ist, ist, dass das Ergebnis der Formel in eine Textzeichenfolge umgewandelt werden kann. Diese Formel fügt zum Beispiel in einer Begrüßung NickName ein, wenn er bereitgestellt wird, oder FirstName, wenn nicht:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )
Wenn NickName auf „Joe“ gesetzt ist, dann erzeugt diese Formel die Textzeichenfolge Willkommen Joe, schön dich kennenzulernen!. Falls NickName aber leer ist und in FirstName „Joseph“ eingegeben ist, dann ergibt diese Formel Lieber Josef, schön dich kennenzulernen!
Die Zeichenfolgeninterpolation kann Standardtextzeichenfolgen in die eingebettete Formel aufnehmen. Wenn zum Beispiel weder NickName noch FirstName geliefert wurden, konnten wir noch „Freund“ als Ersatz bereitstellen:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Zeichenfolgeninterpolationen können sogar verschachtelt werden. Sehen Sie sich dieses Beispiel an, in dem Vor-, 2. Vor- und Nachname zu einer Begrüßung kombiniert werden. Auch wenn ein oder zwei dieser Werte leer bleiben, steht die richtige Anzahl von Leerzeichen zwischen den Namensteilen. Wenn keiner der Teile bereitgestellt wird, wird die innere Zeichenfolgeninterpolation zu einer leeren Zeichenfolge reduziert und durch die Funktion Coalesce durch „Freund“ ersetzt.
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Vorname | 2. Vorname | Nachname | Ergebnis |
---|---|---|---|
John | Qunicy | Doe | Welcome John Quincy Doe! |
John | leer | Doe | Welcome John Doe! |
leer | leer | Doe | Welcome Doe! |
leer | leer | leer | Welcome Friend! |
Zeilenumbrüche
Eingebettete Textzeichenfolgen können Zeilenumbrüche enthalten. Überlegen Sie beispielsweise, die Eigenschaft Text auf ein Label-Steuerelement auf Folgendes festzulegen:
"Line 1
Line 2
Line 3"
Die obige Formel führt zu drei Zeilen, die im „Label“-Steuerelement angezeigt werden:
Zeilenumbrüche werden auch mit Zeichenfolgeninterpolation unterstützt, wie unten gezeigt:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Die obige Formel führt zu derselben Ausgabe:
Bild- und Medienressourcen
Durch das Menü Datei können Sie Bild-, Video- und Audiodateien als App-Ressourcen hinzufügen. Der Name der importierten Datei wird zum Ressourcennamen in der App. In dieser Grafik wurde das Northwind Traders-Logo, das nwindlogo benannt ist, einer App hinzugefügt:
Um diese Ressource in einer App zu verwenden, geben Sie sie in der Eigenschaft Bild eines Image-Steuerelements an:
URIs für Bilder und andere Medien
Sie können etwas tiefer in dieses letzte Beispiel eintauchen, indem Sie die Eigenschaft Text eines Label-Steuerelements auf nwindlogo festlegen. Die Beschriftung zeigt eine Textzeichenfolge:
Canvas-Apps verweisen auf jedes Bild oder jede andere Mediendatei, unabhängig davon, ob sie sich in der Cloud befinden oder als App-Ressource hinzugefügt wurden, durch eine URI-Textzeichenfolge.
Zum Beispiel akzeptiert die Eigenschaft Bild eines Bildsteuerelements nicht nur App-Ressourcen, sondern auch Links zu Bildern im Web, z. B. https://northwindtraders.com/logo.jpg". Die Eigenschaft akzeptiert auch Inline-Bilder, die das Daten-URI-Schema verwenden, wie in diesem Beispiel:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
Dieser URI zeigt eine vergrößerte Version von zwei lila Diamanten an:
Sie können das zuletzt in einem Camera-Steuerelement aufgenommene Bild anzeigen, wenn Sie die Image-Eigenschaft eines Bildsteuerelements auf die Photo-Eigenschaft des camera-Steuerelements festlegen. Die App hält das Bild im Speicher und die Photo-Eigenschaft des camera-Steuerelements gibt eine URI-Referenz auf das Bild zurück. Sie können beispielsweise ein Bild machen und die Eigenschaft Photo der Kamera könnte zu "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1" zurückkehren.
Sie verwenden einen URI, um auf ein Bild oder eine andere in einer Datenbank gespeicherte Mediendatei zu verweisen. Auf diese Weise ruft die App die tatsächlichen Daten erst ab, wenn sie tatsächlich benötigt werden. Zum Beispiel ein Anhang in einer Microsoft Dataverse Tabelle könnte "appres://datasources/Contacts/table/..." zurückgeben, Wie im Kamerabeispiel können Sie dieses Bild anzeigen, indem Sie die Image Eigenschaft eines Bildsteuerelements auf diese Referenz festlegen, die die Binärdaten abruft.
Wenn Sie einen Mediendatentyp, z. B. ein Bild, in einer Datenbank speichern, sendet die App das tatsächliche Bild oder die Mediendaten und nicht die URI-Referenz.
Größenbeschränkungen
Als Textzeichenfolgen und URIs haben diese Datentypen keine voreingestellte Länge.
Die Binärdaten, auf die diese Datentypen verweisen, haben auch keine voreingestellte Größenbeschränkung. Zum Beispiel kann ein Bild, das über das camera-Steuerelement aufgenommen wurde und auf das jetzt als "appres://..." verwiesen wird, so groß und hochauflösend sein, wie die Kamera des Geräts aufbringen kann. Die Auflösung, Bildrate und andere Attribute von Mediendateien sind nicht durch den Datentyp begrenzt, aber bestimmte Steuerelemente zum Abspielen und Aufnehmen von Medien können ihre eigenen Einschränkungen haben.
Alle Datengrößen hängen jedoch von der Menge des verfügbaren Speichers in der App ab. Browser, die auf einem Desktop-Computer ausgeführt werden, unterstützen normalerweise mehr als 100 Megabyte Daten. Die Menge des verfügbaren Speichers auf einem Gerät wie einem Telefon kann jedoch weitaus geringer sein, normalerweise im Bereich von 30 bis 70 Megabyte. Um festzustellen, ob Ihre App innerhalb dieser Grenzen ausgeführt wird, testen Sie allgemeine Szenarien auf allen Geräten, auf denen sie ausgeführt werden soll.
Bewahren Sie Daten als bewährte Methode nur so lange im Speicher auf, wie dies erforderlich ist. Laden Sie Bilder so schnell wie möglich in eine Datenbank hoch. Laden Sie Bilder nur herunter, wenn der Benutzer der App sie anfordert.
Zahlen
Anmerkung
Power Apps unterstützt heute nur Gleitkomma und es ist der Typ aller Zahlen. Dezimal- Unterstützung wird bald hinzugefügt.
Power Fx unterstützt zwei Arten von Zahlen: Dezimal und Gleitkomma (mit Synonymen Zahl und Währung).
Für die meisten geschäftlichen Berechnungen eignet sich das Dezimalsystem am besten. Es kann Zahlen zur Basis 10 genau darstellen, was bedeutet, dass 0.1
genau dargestellt werden kann und bei Berechnungen nicht anfällig für Rundungsfehler ist. Der Bereich ist groß genug für alle geschäftlichen Anforderungen, bis zu 1028 mit einer Genauigkeit von bis zu 28 Stellen. Dezimal ist der standardmäßige numerische Datentyp für die meisten Power Fx Hosts und wird verwendet, wenn einfach 2*2
geschrieben wird.
Float eignet sich am besten für wissenschaftliche Berechnungen. Es kann Zahlen in einem viel größeren Bereich darstellen, bis zu 10308. Die Genauigkeit ist auf 15 Dezimalstellen begrenzt und die Mathematik basiert auf der Basis 2, sodass einige gängige Dezimalwerte nicht präzise dargestellt werden können. Float hat außerdem eine höhere Leistung und wird bevorzugt, wenn dies ein Faktor ist und die Genauigkeit nicht kritisch ist.
Dezimalzahlen
Der Datentyp Dezimal verwendet am häufigsten den .NET-Dezimaldatentyp. Einige Hosts, z. B. Dataverse Formelspalten, die in SQL Serer ausgeführt werden, verwenden den dezimalen Datentyp von SQL Server.
Decimal rechnet so, wie Sie es in der Schule gelernt haben, und zwar mit Ziffern auf der Basis 10. Dies ist sehr wichtig, um Rundungsfehler durch sehr kleine Differenzen zu vermeiden, die sich bei der Verwendung der Basis-2-Mathematik (wie sie von Gleitkomma verwendet wird) ansammeln können.
Der Bereich reicht von positiv 79,228,162,514,264,337,593,543,950,335 bis negativ 79,228,162,514,264,337,593,543,950,335. Das Dezimaltrennzeichen kann an einer beliebigen Stelle innerhalb dieser Zahlen platziert werden, bietet eine Genauigkeit von bis zu 28 Stellen und wird dennoch präzise dargestellt. Beispielsweise kann 79,228,162,514,264.337593543950335 genau dargestellt werden, ebenso wie 7.9228162514264337593543950335.
Gleitkommazahlen
Der Datentyp Gleitkomma auch bekannt als Nummer oder Währung verwendet den Gleitkomma-Standard IEEE 754 mit doppelter Genauigkeit. Dieser Standard bietet einen sehr großen Bereich von Zahlen, in denen gearbeitet werden kann, von –1,79769 x 10308 bis 1.79769 x 10308. Der kleinste Wert, der dargestellt werden kann, ist 5 x 10–324.
Float kann ganze Zahlen (oder Ganzzahlen) zwischen –9,007,199,254,740,991 (–(253 – 1)) und 9,007,199,254,740,991 (253 – 1) einschließlich exakt darstellen. Dieser Bereich ist größer als die 32-Bit- (oder 4-Byte-) Ganzzahldatentypen, die normalerweise von Datenbanken verwendet werden. Canvas-Apps können jedoch keine 64-Bit- (oder 8-Byte-) Ganzzahldatentypen darstellen. Möglicherweise möchten Sie die Nummer in einem Textfeld speichern oder eine berechnete Spalte verwenden, um eine Kopie der Nummer in einem Textfeld zu erstellen, damit sie einem Text-Datentyp der Canvas-App zugeordnet wird. Auf diese Weise können Sie diese Werte halten, anzeigen und eingeben sowie vergleichen, um festzustellen, ob sie gleich sind. In dieser Form können Sie jedoch keine numerischen Berechnungen durchführen.
Die Gleitkommaarithmetik ist ungefähr und kann daher mit vielen dokumentierten Beispielen manchmal zu unerwarteten Ergebnissen führen. Sie könnten erwarten, dass die Formel 55 / 100 * 100 genau 55 und die Formel (55 / 100 * 100) - 55 genau Null zurückgibt. Die letztere Formel gibt jedoch 7,1054 x 10–15 zurück, was sehr klein ist, aber nicht Null. Dieser winzige Unterschied verursacht normalerweise kein Problem, und die App rundet ihn ab, wenn das Ergebnis angezeigt wird. Kleine Unterschiede können sich jedoch in nachfolgenden Berechnungen verstärken und scheinen die falsche Antwort zu geben.
Datenbanksysteme speichern häufig Währungen und führen Berechnungen mithilfe von Dezimalrechnungen durch, die einen kleineren Bereich, aber eine bessere Kontrolle über die Genauigkeit bieten. Standardmäßig ordnen Canvas-Apps Währungen in und aus Gleitkommawerten zu. Daher kann das Ergebnis von Berechnungen abweichen, die in einem nativen Dezimaldatentyp durchgeführt werden. Wenn diese Art von Diskrepanz Probleme verursacht, möchten Sie möglicherweise mit diesen Werten als Text arbeiten, genau wie bei großen Ganzzahlen, die weiter oben in diesem Abschnitt beschrieben wurden.
Standard und Konvertierungen
Anmerkung
Power Apps unterstützt heute nur Gleitkomma und es ist der Typ aller Zahlen. Dezimal- Unterstützung wird bald hinzugefügt.
Die meisten Power Fx-Hosts verwendet Dezimal standardmäßig. Dies hat Auswirkungen auf:
- Literale Zahlen in Formeln. Die Nummer
1.234
wird als Dezimal Wert interpretiert. Zum Beispiel die Formel1.234 * 2
1.234
interpretieren und2
als Dezimal und gib in Ergebnis Dezimal zurück. - Funktion „Value“.
Value( "1.234" )
gibt einen Dezimalwert zurück. Zum Beispiel die FormelValue( "1.234" ) * 2
der Funktion Value interpretiert den Inhalt der Textzeichenfolge"1.234"
als ein Dezimal.
Arbeiten mit Gleitkomma-Wertne, die die Funktion Gleitkomma verwenden. Erweitern wir das obige Beispiel, Float( 1.234 )
wird das Dezimal1.234
zu Gleitkomma konvertieren. Float kann auch als Ersatz für Value verwendet werden, um eine Zeichenfolge mit einer Gleitkommazahl zeigen wie Float( "1.234" )
in einen Float Wert umzuwandeln, was erforderlich ist, wenn die Zahl nicht als Dezimalzahl dargestellt werden kann.
Zusammenfassend:
Verbrauch | Dezimal | Schweben |
---|---|---|
Literale Zahlen in Formeln | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Konvertierung aus Textzeichenfolge | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Konvertierung zwischen numerischen Typen | Decimal( float ) |
Float( decimal ) |
Konvertierung zu Textzeichenfolge | Text( decimal ) |
Text( float ) |
Numerische Typen kombinieren
Float- und Decimal- Werte können frei gemischt werden. Beim Kombinieren werden Dezimalwerte aufgrund des größeren Bereichs in Gleitkommawerte konvertiert. Da dies zu einem Verlust an Präzision führen kann, ist es wichtig, beides nicht unnötig zu vermischen. Da Dezimal der standardmäßige literale Datentyp ist und die meisten numerischen Funktionen den Typ beibehalten, ist es relativ einfach, den Wechsel zu Gleitkomma zu vermeiden ohne es zu wünschen.
Betrachten Sie beispielsweise die folgende Berechnung mit pac power-fx repl
nach der Installation der Power Platform CLI. Da beide Zahlen Dezimal sind, erfolgt die Berechnung in Dezimal und das Ergebnis behält die volle Genauigkeit:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Wenn stattdessen der zweite Operand in Gleitkomma geändert würde, würde die gesamte Berechnung in Gleitkomma und dem kleinen Bruchteil würde verloren gehen:
>> 1.0000000000000000000000000001 * Float(2)
2
Datum, Uhrzeit und DateTime
Zeitzonen
Datums-/Uhrzeitwerte fallen in folgende Kategorien:
- Ortszeit des Benutzers: Diese Werte werden in UTC (Koordinierte Weltzeit) gespeichert, aber die Zeitzone des App-Benutzers hat Einfluss darauf, wie die App diese Werte anzeigt und wie der App-Benutzer sie angibt. Beispielsweise erscheint derselbe Moment für einen Benutzer in Kanada anders als für einen Benutzer in Japan.
- Zeitzonenunabhängig: Die App zeigt diese Werte immer gleich an und der App-Benutzer gibt sie immer gleich an, unabhängig von der Zeitzone. Derselbe Moment wird für einen Benutzer in Kanada ebenso angezeigt, wie für einen Benutzer in Japan. App-Autoren, die nicht erwarten, dass ihre Apps in verschiedenen Zeitzonen ausgeführt werden, verwenden diese Werte, da sie insgesamt einfacher sind.
Diese Tabelle zeigt einige Beispiele:
Datums-/Uhrzeittyp | In der Datenbank gespeicherter Wert | 7 Stunden westlich von UTC angezeigter und eingegebener Wert | 4 Stunden östlich von UTC angezeigter und eingegebener Wert |
---|---|---|---|
Benutzer lokal | Sonntag,19.Mai2019 4:00 Uhr |
Samstag,18.Mai2019 21:00 Uhr |
Sonntag,19.Mai2019 8:00 Uhr |
Zeitzonenunabhängig | Sonntag,19.Mai2019 4:00 Uhr |
Sonntag,19.Mai2019 4:00 Uhr |
Sonntag,19.Mai2019 4:00 Uhr |
Für Datum/Uhrzeit Ortszeit Benutzer, verwenden Canvas-Apps die Zeitzone des Browsers oder Geräts, Modellgesteuerte Apps verwenden jedoch die Einstellung des Benutzers in Dataverse. Diese Einstellungen stimmen normalerweise überein, aber die Ergebnisse unterscheiden sich, wenn sich diese Einstellungen unterscheiden.
Verwenden Sie die Funktionen DateAdd und TimeZoneInformation zum Konvertieren der Ortszeit in UTC und wieder zurück. Siehe die Beispiele am Ende der Dokumentation für diese Funktionen.
Numerische Äquivalente
Canvas-Apps speichern und berechnen alle Datums-/Zeitwerte, unabhängig davon, ob Ortszeit Benutzer oder Zeitzonenunabhängig in UTC. Die App übersetzt die Werte basierend auf der Zeitzone des App-Benutzers, wenn sie angezeigt werden und wenn der App-Benutzer sie angibt.
Wenn eine Canvas-App einen Zeitzonenunabhängig-Wert aus einer Datenquelle liest oder einen solchen Wert in eine Datenquelle schreibt, passt die App den Wert automatisch an, um die Zeitzone des App-Benutzers zu kompensieren. Die App behandelt den Wert dann als UTC-Wert, der mit allen anderen Datums-/Zeitwerten in der App übereinstimmt. Aufgrund dieser Umwandlung wird der ursprüngliche Zeitzonenunabhängig-Wert angezeigt, wenn die App den UTC-Wert für die Zeitzone des App-Benutzers anpasst.
Sie können dieses Verhalten genauer beobachten, indem Sie die Funktion Value zum Zugriff auf den zugrunde liegenden numerischen Wert für einen Datums-/Zeitwert verwenden. Diese Funktion gibt den Datums-/Zeitwert als Anzahl der Millisekunden seit dem 1. Januar, 1970 00:00:00.000 UTC, zurück.
Da jeder Datums-/Zeitwert in UTC gespeichert ist, wird die Formel Value( Date( 1970, 1, 1 ) ) in den meisten Teilen der Welt keine Null zurückgeben, weil die Date-Funktion ein Datum in UTC zurückgibt. Beispielsweise würde die Formel 28,800,000 in einer Zeitzone zurückgeben, die um acht Stunden von UTC versetzt ist. Diese Zahl gibt die Anzahl der Millisekunden in acht Stunden an.
Zurück zu unserem Beispiel von oben:
Datums-/Uhrzeittyp | In der Datenbank gespeicherter Wert | 7 Stunden westlich von UTC angezeigter und eingegebener Wert | Die Funktion Value gibt Folgendes zurück: |
---|---|---|---|
Benutzer lokal | Sonntag,19.Mai2019 4:00 Uhr |
Samstag,18.Mai2019 21:00 Uhr |
1,558,238,400,000 (Sonntag,19.Mai2019 04:00 Uhr UTC) |
Zeitzonenunabhängig | Sonntag,19.Mai2019 4:00 Uhr |
Sonntag,19.Mai2019 4:00 Uhr |
1,558,263,600,000 (Sonntag,19.Mai2019 11:00 Uhr UTC) |
Unix-Zeiten konvertieren
Unix-Zeiten geben die Anzahl der Sekunden seit dem 1. Januar, 1970 00:00:00 UTC, an. Da Canvas-Apps Millisekunden anstelle von Sekunden verwenden, können Sie zwischen beiden konvertieren, indem Sie sie mit 1.000 multiplizieren oder dividieren.
Beispielsweise zeigt die Unix-Zeit den 9. September 2001 um 01:46:40 UTC als 1000000,000 an. Um diesen Datums-/Zeitwert in einer Canvas-App anzuzeigen, multiplizieren Sie diese Zahl mit 1.000, um sie in Millisekunden zu konvertieren, und verwenden Sie dann in einer Text-Funktion. Die Formel Text (1000000000 * 1000, DateTimeFormat.UTC) gibt die Zeichenfolge 2001-09-09T01:46:40.000Z zurück.
Diese Funktion gibt jedoch Samstag, 8. September, 2001 18:46:40 zurück, wenn Sie das Format DateTimeFormat.LongDateTime24 in einer Zeitzone verwenden, die -7 Stunden von UTC entfernt ist (7 Stunden westlich von UTC). Dieses Ergebnis zeigt den Wert DateTime basierend auf der lokalen Zeitzone korrekt an.
Teilen Sie das Ergebnis aus Wert durch 1.000, um es in eine Unix-Zeit zu konvertieren:
RoundDown(Wert(UnixTime) / 1000, 0)
Wenn Sie die Unix-Zeit in einem Datum-Wert für weitere Berechnungen oder die Anzeige in Power Apps benötigen, verwenden Sie diese Formel:
DateAdd(Datum(1970,1,1), UnixTime, Sekunden)
SQL Server
SQL Server hat Datetime, Datetime2 und andere Datums-/Zeitdatentypen, die keinen Zeitzonenversatz enthalten und nicht angeben, in welcher Zeitzone sie sich befinden. Canvas-Apps gehen davon aus, dass diese Werte in UTC gespeichert sind, und behandeln sie als Ortszeit Benutzer. Wenn die Werte zeitzonenunabhängig sein sollen, korrigieren Sie die UTC-Übersetzungen mithilfe der Funktion TimeZoneOffset.
Canvas-Apps verwenden die enthaltenen Zeitzoneninformationen in den Feldern Datetimeoffset beim Konvertieren eines Werts in die interne UTC-Darstellung der App. Die Apps verwenden beim Schreiben von Daten immer UTC als Zeitzone (Zeitzonenversatz Null).
Canvas-Apps lesen und schreiben Werte des Datentyps Zeit in SQL Server als Textzeichenfolgen im ISO 8601-Dauerformat. Beispielsweise müssen Sie dieses Zeichenfolgenformat analysieren und die Funktion Time zum Konvertieren der Textzeichenfolge PT2H1M39S zu einem Zeit-Wert verwenden:
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)
Angaben zu Datum und Uhrzeit vermischen
Datum, Uhrzeit und Datum/Uhrzeit haben unterschiedliche Namen, enthalten aber alle dieselben Informationen zu Datum und Uhrzeit.
Ein Datum-Wert kann Zeitinformationen enthalten, die normalerweise Mitternacht sind. Ein Zeit-Wert kann Datumsinformationen enthalten, die normalerweise der 1. Januar 1970 sind. Dataverse speichert auch Zeitinformationen mit einem Nur Datum-Feld, zeigt aber standardmäßig nur die Datumsinformationen an. In ähnlicher Weise unterscheiden Canvas-Apps manchmal zwischen diesen Datentypen, um Standardformate und Steuerelemente zu bestimmen.
Das direkte Hinzufügen und Subtrahieren von Datums- und Zeitwerten wird nicht empfohlen, da Zeitzonen und andere Konvertierungen zu verwirrenden Ergebnissen führen können. Verwenden Sie entweder die Value-Funktion, um Datums-/Zeitwerte zuerst in Millisekunden zu konvertieren und die Zeitzone des App-Benutzers zu berücksichtigen, oder verwenden Sie die Funktionen DateAdd und DateDiff zum Addieren oder Subtrahieren eines dieser Werte.
Auswahl und Ja/Nein
Auswahlmöglichkeiten und Datentypen mit zwei Optionen bieten einem App-Benutzer zwei oder mehr Auswahlmöglichkeiten. Zum Beispiel eine Bestellstatus Wahl könnte die Wahl Neu, Versandt, In Rechnung gestellt, und Geschlossen. Der Datentyp mit zwei Optionen bietet nur zwei Auswahlmöglichkeiten.
Beide Datentypen zeigen ihre Beschriftungen in einem Textzeichenfolgenkontext. Ein Beschriftungs-Steuerelement zeigt beispielsweise eine der Bestellstatusoptionen an, wenn die Eigenschaft des Steuerelements Text auf eine Formel festgelegt ist, die auf diese Auswahl verweist. Optionsbezeichnungen können für App-Benutzer an verschiedenen Standorten lokalisiert sein.
Wenn ein App-Benutzer eine Option auswählt und diese Änderung speichert, überträgt die App die Daten an die Datenbank, in der diese Daten in einer von der Sprache unabhängigen Darstellung gespeichert werden. Eine Option in einer Auswahl wird als Zahl übertragen und gespeichert, und eine Option in einem Datentyp mit zwei Optionen wird übertragen und als boolescher Wert gespeichert.
Die Beschriftungen dienen nur zu Anzeigezwecken. Sie können keine direkten Vergleiche mit den Beschriftungen durchführen, da diese sprachspezifisch sind. Stattdessen hat jede Auswahl eine Enumeration, die mit der zugrunde liegenden Zahl oder dem booleschen Wert arbeitet. Beispielsweise können Sie diese Formel nicht verwenden:
If( ThisItem.OrderStatus = "Active", ...
Aber Sie können diese Formel verwenden:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
Bei globalen Auswahlmöglichkeiten (die Tabellen gemeinsam verwenden) stimmt der Name der Optionssatz-Enumeration mit dem Namen der globalen Auswahl überein. Bei lokalen Auswahlmöglichkeiten (die auf eine Tabelle beschränkt sind) kann der Name den Namen der Tabelle enthalten. Dieses Verhalten vermeidet Konflikte, wenn mehrere Tabellen über Auswahlmöglichkeiten mit demselben Namen verfügen. Zum Beispiel die Konten Tabelle könnte einen Bestellstatus Auswahl habn, und sein Name könnte der Bestellstatus (Konten) sein. Dieser Name enthält ein oder mehrere Leerzeichen und Klammern. Sie müssen ihn daher in einfache Anführungszeichen setzen, wenn Sie in einer Formel darauf verweisen.
Darüber hinaus können sich Werte mit zwei Optionen auch als boolesche Werte verhalten. Zum Beispiel könnte ein Wert mit zwei Optionen namens TaxStatus die Bezeichnungen Steuerpflichtig und Nicht steuerpflichtig haben, die wahr beziehungsweise falsch entsprechen. Um dies zu zeigen, können Sie diese Formel verwenden:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Sie können auch diese entsprechende Formel verwenden:
If( ThisItem.Taxable, ...