Funktion „With“
Gilt für: Canvas-Apps Desktop-Flows Modellgesteuerte Apps Power Pages Power Platform CLI
Berechnet Werte und führt Aktionen für einen einzelnen Datensatz aus, einschließlich der Inlinedatensätze benannter Werte.
Beschreibung
Die With-Funktion, wertet eine Formel für einen einzelnen Datensatz aus. Die Formel kann einen Wert berechnen und/oder Aktionen wie das Ändern von Daten oder das Arbeiten mit einer Verbindung ausführen. Verwenden Sie die ForAll-Funktion, um eine Formel für alle Datensätze in einer Datensatztabelle auszuwerten.
Die Felder des aktuell verarbeiteten Datensatzes sind in der Formel verfügbar. Verwenden Sie den ThisRecord-Operator, oder referenzieren Sie Felder einfach namentlich wie jeden anderen Wert. Der As-Operator kann auch verwendet werden, um den zu verarbeitenden Datensatz zu benennen, wodurch Ihre Formel leichter verständlich wird und verschachtelte Datensätze zugänglich werden. Weitere Informationen finden Sie in den folgenden Beispielen und unter Arbeiten mit Datensatzumfang.
Verwenden Sie With, um die Lesbarkeit komplexer Formeln durch Aufteilung in kleinere benannte Unterformeln zu verbessern. Diese benannten Werte wirken wie einfache lokale Variablen, die auf den Umfang der With beschränkt sind. Dieselbe Inlinedatensatzsyntax, die mit der UpdateContext-Funktion verwendet wird, kann mit With verwendet werden. Die Verwendung von With gegenüber Kontext- oder globalen Variablen wird bevorzugt, da sie in sich geschlossen und leicht verständlich ist und in jedem deklarativen Formelkontext verwendet werden kann.
Verwenden Sie With, um auf die Felder des Datensatzes zuzugreifen, die von Funktionen wie Patch oder Match zurückgegeben werden. With hält den Wert dieser Funktionen lange genug, um ihn in weiteren Berechnungen oder Aktionen zu verwenden.
Wenn das Record-Argument zu With ein Fehler ist, wird dieser Fehler von der Funktion zurückgegeben und Formula wird nicht ausgewertet.
Syntax
Mit( Datensatz, Formel )
- Datensatz – Erforderlich. Zugrunde liegender Datensatz. Verwenden Sie für Namenswerte die Inlinesyntax
{ name1: value1, name2: value2, ... }
- Formel – Erforderlich. Die für Record auszuwertende Formel. Die Formel kann auf eines der Felder von Record direkt als Datensatzbereich verweisen.
Beispiele
Einfache benannte Werte
With( { radius: 10,
height: 15 },
Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)
In diesem Beispiel wird ein Datensatz mit benannten Werten verwendet, um das Volumen eines Zylinders zu berechnen. Mit werden alle Eingabewerte gemeinsam erfasst, sodass sie leicht von der Berechnung selbst getrennt werden können.
Verschachtelte „With“
With( { AnnualRate: RateSlider/8/100, // slider moves in 1/8th increments and convert to decimal
Amount: AmountSlider*10000, // slider moves by 10,000 increment
Years: YearsSlider, // slider moves in single year increments, no adjustment required
AnnualPayments: 12 }, // number of payments per year
With( { r: AnnualRate/AnnualPayments, // interest rate
P: Amount, // loan amount
n: Years*AnnualPayments }, // number of payments
r*P / (1 - (1+r)^-n) // standard interest calculation
)
)
Dieses Beispiel verschachtelt With-Funktionen zum Erstellen einer zweistufigen Berechnung für monatliche Hypothekenzahlungen. Solange es keinen Konflikt gibt, sind alle äußeren With-benannten Werte in der inneren With verfügbar.
Da sich die Schieberegler nur in Schritten von 1 bewegen können, werden die Schieberegler geteilt oder multipliziert, um effektiv ein benutzerdefiniertes Inkrement zu erstellen. Im Falle des Zinssatzes hat RateSlider seine Max-Eigenschaft auf 48 gesetzt, geteilt durch 8 für ein Inkrement von 1/8 Prozentpunkten und geteilt durch 100, um von einem Prozentsatz in eine Dezimalzahl umzuwandeln, wobei der Bereich von 0,125 bis 6 %% abgedeckt wird. Im Falle des Darlehensbetrags hat AmountSlider seine Max-Eigenschaft auf 60 gesetzt und wird mit 10.000 multipliziert, wobei der Bereich von 10.000 bis 600.000 abgedeckt wird.
Die With wird automatisch neu berechnet, wenn sich die Schieberegler bewegen und die neue Darlehenszahlung angezeigt wird. Es werden keine Variablen verwendet und es besteht keine Notwendigkeit, die OnChange-Eigenschaft der Schiebereglersteuerelemente zu verwenden.
Hier sind die detaillierten Anweisungen zum Erstellen dieser App:
- Erstellen Sie eine neue App.
- Fügen Sie ein Slider-Steuerelement hinzu, und nennen Sie es RateSlider. Legen Sie die Max-Eigenschaft auf 48 fest.
- Fügen Sie ein Label-Steuerelement links vom Schiebereglersteuerelement hinzu. Legen Sie die Text-Eigenschaft auf "Interest Rate:" fest.
- Fügen Sie ein Label-Steuerelement rechts vom Schiebereglersteuerelement hinzu. Legen Sie die Text-Eigenschaft auf die Formel RateSlider/8 & „%%“ fest.
- Fügen Sie ein weiteres Slider-Steuerelement hinzu, und nennen Sie es AmountSlider. Legen Sie die Max-Eigenschaft auf 60 fest.
- Fügen Sie ein Label-Steuerelement links vom Schiebereglersteuerelement hinzu. Legen Sie die Text-Eigenschaft auf "Loan Amount:" fest.
- Fügen Sie ein Label-Steuerelement rechts vom Schiebereglersteuerelement hinzu. Legen Sie die Text-Eigenschaft auf die Formel AmountSlider/8 * 10000 fest.
- Fügen Sie ein weiteres Slider-Steuerelement hinzu, und nennen Sie es YearsSlider. Legen Sie die Max-Eigenschaft auf 40 fest.
- Fügen Sie ein Label-Steuerelement links vom Schiebereglersteuerelement hinzu. Legen Sie die Text-Eigenschaft auf "Number of Years:" fest.
- Fügen Sie ein Label-Steuerelement rechts vom Schiebereglersteuerelement hinzu. Legen Sie die Text-Eigenschaft auf die Formel YearsSlider fest.
- Fügen Sie ein Label-Steuerelement hinzu, und legen Sie dessen Text-Eigenschaft auf die oben gezeigte Formel fest.
- Fügen Sie ein Label-Steuerelement links vom letzten Label-Steuerelement hinzu. Legen Sie die Text-Eigenschaft auf "Recurring Monthly Payment:" fest.
Vom Patch zurückgegebener Primärschlüssel
With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
ForAll( NewOrderDetails,
Patch( OrderDetails, Defaults( OrderDetails ),
{ Order: OrderID, // from With's first argument, primary key of Patch result
Quantity: Quantity, // from ForAll's NewOrderDetails table
ProductID: ProductID } // from ForAll's NewOrderDetails table
)
)
)
In diesem Beispiel wird der Order-Tabelle im SQL Server ein Datensatz hinzugefügt. Anschließend wird der zurückgegebene Primärschlüssel für die Bestellung verwendet, der von der Patch-Funktion im OrderID-Feld zurückgegeben wird, um zugehörige Datensätze in der OrderDetails-Tabelle zu erstellen.
Extrahierte Werte mit einem regulären Ausdruck
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)
In diesem Beispiel werden die Stunden, Minuten und Sekunden aus einem Wert für die Dauer von ISO 8601 extrahiert und anschließend anhand dieser Unterübereinstimmungen ein Datum-/Uhrzeitwert erstellt.
Beachten Sie, dass die Unterübereinstimmungen zwar Zahlen enthalten, sich jedoch immer noch in einer Textzeichenfolge befinden. Verwenden Sie die Value-Funktion zum Konvertieren in eine Zahl vor dem Ausführen mathematischer Vorgänge.
Ordnen Sie einen Datensatz in einer Komponente zu
Siehe Datensatz zuordnen