Freigeben über


Dynamische Werte

Dynamisch ist ein Datentyp in Power Fx, der jede Datenstruktur, komplex oder einfach enthalten kann. Sie kann nicht direkt und zur Laufzeit in einen anderen Datentyp konvertiert werden, entweder explizit oder implizit. Auf Felder von Datensätzen in einem dynamischen Wert kann mithilfe der Punktnotation zugegriffen werden, und das Vorhandensein von Feldern wird nur zur Laufzeit überprüft.

Es gibt zwei Möglichkeiten zum Erstellen eines dynamischen Werts:

  • Verwenden der ParseJSON-Funktion.
  • Verwenden eines Verbinders, der einen "dynamischen" Typ zurückgibt.

Hinweis

Dynamic wurde früher als "UntypedObject" bezeichnet. Nur der Name hat sich geändert, es gibt keine Änderung in der Semantik. Der einzige Ort, an dem der Name in einer Formel erscheinen würde, ist in den experimentellen Versionen von benutzerdefinierten Funktionen und benutzerdefinierten Typen.

Einfache Typen

Der Wert einer Variablen, die einen dynamischen Wert enthält, kann nicht direkt verwendet werden. Sie müssen sie immer mit dem entsprechenden Typkonstruktor richtig eingeben oder sie mit den Funktionen AsType und ParseJSON in einen bestimmten Typ konvertieren.

In den folgenden Beispielen wird der Wert einer dynamischen Variablen mit dem Namen DynValuekonvertiert.

Text(DynValue)
Value(DynValue)

In der folgenden Tabelle sind die Datentypen und die entsprechenden Funktionen aufgeführt, die in diesen Datentyp konvertiert werden sollen.

Datentyp Function Beschreibung des Dataflows
Boolesch Boolean() Beim Konvertieren von Dynamic in Boolean muss der zugrunde liegende Wert einen booleschen Wert oder einen Typ darstellen, der automatisch konvertiert werden kann (z. B. eine Zeichenfolge "true").
Color ColorValue() oder RGBA() Farben können in Cascading Style Sheets (CSS)-Notation der Farbdefinition als Zeichenfolge oder als einzelne RGBA-Komponenten dargestellt werden. Die Dynamische kann direkt aus einer CSS-Farbdefinitionszeichenfolge (Cascading StyleSheet) mithilfe der ColorValue()-Funktion oder aus einzelnen RGBA-Zahlen mithilfe der RGBA()-Funktion in Farbe konvertiert werden.
Währung, Zahl Value() Beim Konvertieren von Dynamic in Zahl muss der zugrunde liegende Wert eine Zahl oder einen Typ darstellen, der automatisch konvertiert werden kann (z. B. eine Zeichenfolge "123,456").
Datum, DateTime und Uhrzeit DateValue(), TimeValue() oder DateTimeValue() Datum, Uhrzeit und Datetime können direkt von "Dynamisch " in ihren jeweiligen Typ konvertiert werden, wenn es im ISO 8601-Format dargestellt wird. Andere Formate müssen zuerst mithilfe der Text()-Funktion in Text konvertiert werden und dann in die Funktion DateValue(), TimeValue() oder DateTimeValue() übergeben werden, die standardmäßig die Sprache der aktuellen Benutzereinstellungen verwendet, um das Datum und die Uhrzeit zu interpretieren.
GUID GUID() Ein dynamischer Wert kann direkt in GUID konvertiert werden, wenn das zugrunde liegende Objekt eine GUID darstellt oder eine Zeichenfolge darstellt.
HyperLink, Bild und Medien Text() Diese Datentypen sind Textdatentypen und können in Text konvertiert und dann in Power Fx verwendet werden.
Auswahl, Zwei Optionen Switch() oder If() Auswahlen und zwei Optionen werden als lokalisierte Zeichenfolgen in Power Fx dargestellt. Auswahlen werden durch eine Zahl und zwei Optionen als boolesche Werte unterstützt. Es gibt keine direkte Konvertierung von Boolean, Zahl oder Zeichenfolge in eine Auswahl oder zwei Optionen, aber die Funktionen Switch() oder If() können auf den booleschen Wert, Text- oder Zahlenwert angewendet werden, um den Wert für Auswahl oder zwei Optionen korrekt zuzuweisen.
Datensatz Nicht zutreffend Es gibt keine direkte Konvertierung von Dynamic in eine Datensatzstruktur, aber einzelne Felder können aus der Dynamischen abgerufen werden, um einen neuen Datensatz zu erstellen.
Datensatzverweis Nicht zutreffend Datensatzverweise sind für Datenquellen eindeutig und weisen keine aussagekräftige Darstellung in "Dynamic" auf.
Table Table() und ForAll() Eine Dynamische kann ein Array darstellen, das in eine Tabelle konvertiert werden kann. Diese Objekte können Arrays von Datensätzen oder Arrays von Werten sein, die effektiv einspaltige Tabellen sind. ForAll() kann verwendet werden, um eine Tabelle mit vollständig typisierten Datensätzen zu erstellen. Weitere Informationen finden Sie in den Beispielen weiter unten in diesem Artikel.
Text Text() Text kann direkt konvertiert werden. Wenn ein dynamischer Wert eine Zahl darstellt, müssen Sie die dynamische Zahl zuerst mithilfe von Value() in Zahl konvertieren, bevor Sie in Text konvertieren.

Datensatztypen

Sie können auf Felder für eine Variable zugreifen, die einen dynamischen Datensatz darstellt, indem Sie eine normale Punktnotation verwenden, die für Datensätze verwendet wird. Die Existenz der Felder wird jedoch erst zur Laufzeit verifiziert. Infolgedessen ist auch kein Intellisense verfügbar. Wenn ein Feld nicht vorhanden ist oder einen zugrunde liegenden Wert Null hat, führt der Zugriff darauf zu einem Blank()-Wert.

Jedes Feld im Datensatz ist ebenfalls vom Typ "Dynamisch" und muss ordnungsgemäß eingegeben werden. Das Feld kann ein dynamischer Datensatz vom einfachen Typ sein. Falls es sich um einen Datensatz handelt, können Sie die Punktnotation verketten. Wenn ein Feld in der Kette nicht vorhanden ist, wird Blank() zurückgegeben.

In den folgenden Beispielen werden Felder aus einer dynamischen Variablen mit dem Namen DynRecordverwendet.

Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)

Falls ein Feldname aus einem ungültigen Bezeichnernamen besteht, beispielsweise wenn der Feldname mit einer Zahl beginnt oder ungültige Zeichen wie einen Bindestrich enthält, können Sie die Feldnamen in einfache Anführungszeichen setzen:

dynamic.'01'
dynamic.'my-field'

Dynamischer Spaltenzugriff

Manchmal sind die Namen von Spalten in einem Datensatz dynamisch. Verwenden Sie die ColumnNames-Funktion, um zu bestimmen, welche Spaltennamen in einem Datensatz verfügbar sind, und verwenden Sie dann die Column-Funktion, um den Wert einer benannten Spalte abzurufen.

Beispiel:

LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );

Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"

Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5

Arrays

Eine dynamische Variable kann ein Array enthalten. Obwohl das Array entweder ein Array von Datensätzen oder Arrays einfacher Typen sein könnte, führt das Konvertieren des dynamischen Arrays mithilfe der Funktion "Tabelle()" immer zu einer einspaltigen Tabelle " Dynamic". Für Funktionen wie ForAll() und Index() müssen Sie nicht zuerst eine Tabelle() erstellen und erfordern kein einspaltiges Feld Value.

Um beispielsweise die zweite Zahl in einem Array mit dynamischen Zahlenwerten [1, 2, 3] ( ) abzurufen, kann die folgende Formel verwendet werden, um die zweite Zeile in der Tabelle abzurufen und Spalte in eine Zahl zu konvertieren:

Value( Index( UOArray, 2 ) )

Wenn die Dynamische zuerst in eine Tabelle() konvertiert wurde, ist die zweite Zeile in der Ergebnistabelle eine Value Spalte mit der Dynamischen:

Value( Index( Table( UOArray ), 2 ).Value )

Für ein Array von Datensätzen mit einer Textspalte namens Field, gilt die gleiche Logik. Auf die dynamische Funktion kann direkt zugegriffen werden, oder wenn die Funktion Tabelle() verwendet wird, führt dies zu einer einspaltigen Tabelle " Dynamic".

Die Field Spalte kann direkt über die von der Index()-Funktion zurückgegebene Dynamische zugreifen.

Text( Index( UORecordArray, 2 ).Field )

Rufen Sie bei Verwendung der Funktion "Table()" zuerst die einspaltige Value Spalte ab, um die Dynamische abzurufen, und greifen Sie dann auf die Field Spalte zu:

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Um ein Array von Datensätzen in eine typisierte Tabelle zu konvertieren, können Sie die ForAll() Funktion verwenden und jedes einzelne Feld umwandeln.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Wenn die Dynamische zuerst in eine Tabelle konvertiert wird, müssen Sie die resultierende einspaltige Tabelle von Dynamic erneut verwenden Value , um die Felder abzurufen.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )

Konvertierung in typisierte Datensätze und Tabellen

Von Bedeutung

Anstatt jeden einfachen Wert einzeln zu konvertieren, können die Funktionen ParseJSON, IsType und AsType verwendet werden, um eine Dynamische in ein typiertes Objekt in Massen zu konvertieren. Verwenden Sie die Type-Funktion , um einen Typ zu erstellen, der die dynamische Struktur einer typierten Struktur zuzuordnen.

Hier werden beispielsweise die JSON-Zeichenfolgen als Datums-/Uhrzeitwerte interpretiert, ohne dass die DateTimeValue-Funktion aufgerufen werden muss:

Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
                     Type( { Start: DateTime, End: DateTime } ) );

DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7