Data types
Informationen fließen in kleinen, diskreten Werten, ähnlich den Zellen einer Tabelle, durch Power Fx. 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. Power Fx 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 von Power Fx unterstützten Datentypen. Wenn Power Fx eine Verbindung zu einer externen Datenquelle herstellt, wird jeder Datentyp in dieser Quelle einem Datentyp in Power Fx zugeordnet.
Datentyp | Beschreibung | Beispiele |
---|---|---|
Boolesch | Ein Wert wahr oder falsch. Kann direkt in If, Filter und anderen Funktionen ohne Vergleich verwendet werden. | wahr |
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. Dieser Datentyp wird von der Typ-Funktion unterstützt, wenn eine Instanz eines Auswahlfelds anhand des Namens verwendet wird. | ThisItem.OrderStatus |
Farbe | Eine Farbspezifikation, einschließlich eines Alphakanals. |
Color.Red ColorValue( "#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. Der Datentyp Währung wird von der Funktion Typ nicht unterstützt. |
123 4.56 |
Datum | Ein Datum ohne Uhrzeit in der Zeitzone des App-Benutzers. | Date( 2019, 5, 16 ) |
DateTime | Ein Datum mit Uhrzeit in der Zeitzone des App-Benutzers. | DateTimeValue( "May 16, 2019 1:23:09 PM" ) |
Dezimalzahl | Eine Zahl mit hoher Präzision, Basis-10-Vorgängen und begrenztem Bereich. |
123 Decimal( „1,2345“ ) |
Float | Eine Zahl mit Standard-Präzision, Basis-2-Vorgängen und weitem Bereich. |
123 8.903e121 1.234e-200 |
GUID | A Globally Unique Identifier. |
GUID() GUID( „123e4567-e89b-12d3-a456-426655440000“ ) |
Link | 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. Der Datentyp Bild wird von der Funktion Typ nicht unterstützt. |
Mein Bild als App-Ressource hinzugefügt „https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
Medien | Eine URI-Textzeichenfolge für eine Video- oder Audioaufnahme. Der Datentyp Medien wird von der Funktion Typ nicht unterstützt. |
MyVideo als App-Ressource hinzugefügt „https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
Anzahl | Ein Alias für Dezimal (die meisten Power Fx-Hosts) oder Gleichkomma (Canvas-Apps). Wenn jede der Zahlenvarianten für eine bestimmte Situation verwendet werden kann, verwenden Sie Zahl, um eine maximale Kompatibilität zu erreichen. |
123 0.0123 1e4 |
Datensatz | Eine Aufzeichnung von Datenwerten. Dieser zusammengesetzte Datentyp enthält Instanzen anderer Datentypen, die in diesem Thema aufgeführt sind. Weitere Informationen: Verwenden von Tabellen. Dieser Datentyp wird von der Typ-Funktion unterstützt, wenn eine Instanz eines Datensatzes anhand des Namens verwendet wird. |
{ Company: „Northwind Traders“, Personal: 35, NonProfit: false } |
Referenz aufzeichnen | Ein Verweis auf einen Datensatz in einer Tabelle. Solche Referenzen werden häufig bei polymorphen Suchen verwendet. Weitere Informationen: Verwenden von Referenzen. Dieser Datentyp wird von der Funktion Typ nicht unterstützt. | First(Accounts).Owner |
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. Dieser Datentyp wird von der Typ-Funktion unterstützt, wenn eine Instanz einer Tabelle anhand des Namens verwendet wird. |
Table( { FirstName: „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 ) |
Nicht typisiert | Ein Objekt eines nicht deklarierten Typs. Das zugrunde liegende Objekt kann ein beliebiger vorhandener Typ sein und mit Funktionen wie Boolean(), Value(), Table() in kompatible Typen konvertiert werden. Weitere Informationen finden Sie unter Nicht typisiertes Objekt und Arbeiten mit JSON. | ParseJSON("{ ""Feld"" : 1234 }").Feld |
Stornieren | Er wird nur von benutzerdefinierten Verhaltensfunktionen verwendet und gibt an, dass eine Funktion keinen Rückgabetyp hat. Dieser Datentyp wird von der Funktion Typ nicht unterstützt. Auch wenn eine Funktion keinen Rückgabetyp oder Wert hat, kann sie immer einen Fehler zurückgeben. | Hi(): Void = { Notify( „Hello!“ ) } |
Ja/Nein | 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. Dieser Datentyp wird von der Typ-Funktion unterstützt, wenn eine Instanz eines Ja/Nein-Felds anhand des Namens verwendet wird. | ThisItem.Taxable |
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. Dieser Ansatz ist oft einfacher zu handhaben und die Ausgabe ist einfacher zu visualisieren als wenn die Funktion Verketten oder der Operator & verwendet wird.
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, und 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 weiterhin 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"
Aus der Formel ergebe sich drei Zeilen, die im Steuerelement „Beschriftung“ angezeigt werden:
Zeilenumbrüche werden auch mit Zeichenfolgeninterpolation unterstützt:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Dies führt zur selben 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 heißt, der 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 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 Kamera-Steuerelement aufgenommen wurde und auf das jetzt als „appres://...“ verwiesen wird, so groß und hochauflösend sein, wie mit der Kamera des Geräts möglich. 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. Unterstützung für Dezimal wird in Kürze hinzugefügt.
Power Fx unterstützt zwei Arten von Zahlen: Dezimal und Gleitkomma (mit Synonymen Zahl und Währung).
Dezimal ist für die meisten geschäftlichen Berechnungen am besten geeignet. Es kann Zahlen mit der Basis zehn korrekt darstellen, was bedeutet, dass 0.1
korrekt dargestellt werden kann und bei Berechnungen keine Rundungsfehler auftreten. 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, der verwendet wird, wenn man einfach 2*2
schreibt.
Gleitkomma eignet sich am besten für wissenschaftliche Berechnungen. Es kann Zahlen in einem 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. Gleitkomma hat auch eine höhere Leistung und wird bevorzugt, wenn dies ein Faktor ist und die Präzision nicht entscheidend 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.
Dezimal rechnet so, wie Sie es in der Schule gelernt haben, und verwendet zehn Ziffern, was wichtig ist, um Rundungsfehler aus sehr kleinen Unterschieden zu vermeiden, die sich beim Rechnen mit der Basis zwei (wie beim Gleitkomma) akkumulieren 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.
Das Gleitkomma kann ganze Zahlen (oder Integer) von –9.007.199.254.740.991 (–253 – 1) bis einschließlich 9.007.199.254.740.991 (253 – 1) 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 Zahl in einem Textfeld speichern oder eine berechnete Spalte verwenden, um eine Kopie der Zahl 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, eingeben und 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. Je nach den Genauigkeitsanforderungen Ihrer App möchten Sie mit diesen Werten möglicherweise als Text arbeiten, genau wie zuvor für große ganze Zahlen beschrieben.
Standard und Konvertierungen
Anmerkung
Power Apps unterstützt heute nur Gleitkomma und es ist der Typ aller Zahlen. Unterstützung für Dezimal wird in Kürze hinzugefügt.
Die meisten Power Fx-Hosts verwendet Dezimal standardmäßig. Diese Standardeinstellung bedeutet:
- Literale Zahlen in Formeln. Die Zahl
1.234
wird als Dezimalwert interpretiert. Die Formel1.234 * 2
interpretiert z. B.1.234
und2
als Dezimalzahl und gibt ein Dezimalergebnis zurück. - Funktion „Value“.
Value( "1.234" )
gibt einen Dezimalwert zurück. In der FormelValue( "1.234" ) * 2
interpretiert die Wert-Funktion beispielsweise den Inhalt der Textzeichenfolge"1.234"
als Dezimalzahl.
Arbeiten mit Gleitkomma-Wertne, die die Funktion Gleitkomma verwenden. Wenn wir unser Beispiel erweitern, rechnet Float( 1.234 )
die Dezimalzahl1.234
in einen Gleitkommawert.
Gleitkomma kann auch als Ersatz für Wert verwendet werden, um eine Zeichenfolge, die eine Gleitkommazahl wie Float( "1.234" )
enthält, in einen Gleitkommawert umzuwandeln, der erforderlich ist, wenn die Zahl nicht als Dezimalzahl dargestellt werden kann.
Zusammenfassend:
Verbrauch | Dezimalzahl | Float |
---|---|---|
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
Gleitkomma- und Dezimal-Werte können nach belieben gemischt werden. Beim Kombinieren werden Dezimalwerte aufgrund des größeren Bereichs in Gleitkommawerte konvertiert. Da diese Konvertierung zu einem Verlust an Präzision führen kann, ist es wichtig, die beiden nicht unnötig zu mischen. Da Dezimal der Standardliteraldatentyp ist und die meisten numerischen Funktionen diesen Typ beibehalten, ist es relativ einfach, zu verhindern, zum Gleitkomma zu wechseln, wenn dies nicht ausdrücklich gewünscht ist.
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 ausgeführt und der kleine Bruchteil würde verloren gehen:
>> 1.0000000000000000000000000001 * Float(2)
2
Datum, Uhrzeit und DateTime
Zeitzonen
Datums-/Uhrzeitwerte fallen in folgende Kategorien:
- Ortszeit Benutzer: Diese Werte werden in UTC (koordinierte Weltzeit) gespeichert, die Zeitzone des App-Benutzers beeinflusst jedoch, 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 auf dieselbe Weise an und der App-Benutzer gibt sie unabhängig von der Zeitzone auf dieselbe Weise an. 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 |
---|---|---|---|
Ortszeit Benutzer | 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:
Datums-/Uhrzeittyp | In der Datenbank gespeicherter Wert | 7 Stunden westlich von UTC angezeigter und eingegebener Wert | Value-Funktion gibt zurück |
---|---|---|---|
Ortszeit Benutzer | 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, Zeit und DateTime haben unterschiedliche Namen, aber alle enthalten die gleichen 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, ...