Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Notiz
Microsoft Power Fx ist der neue Name für die Formelsprache für Canvas-Apps. Diese Artikel werden ausgeführt, da Microsoft die Sprache aus Canvas-Apps extrahiert, in andere Microsoft Power Platform Produkte integriert und als Open Source verfügbar macht. Beginnen Sie mit der Microsoft Power Fx-Übersicht, um eine Einführung in die Sprache zu erhalten.
Microsoft Power Fx-Tabellen organisieren Daten in Datensätzen, Feldern und Spalten aus Quellen wie Microsoft Excel, SharePoint und SQL Server. Lernen Sie diese Strukturen kennen, um Formeln zu schreiben, die auf tabellarische Daten zugreifen, formen und effektiv bearbeiten.
- Ein Datensatz enthält mindestens eine Kategorie von Informationen zu einer Person, einem Ort oder einem Gegenstand. Ein Datensatz kann z.B. den Namen, die E-Mail-Adresse und die Telefonnummer eines einzelnen Kunden enthalten. Andere Tools bezeichnen einen Datensatz als Zeile oder Element.
- Eine Tabelle enthält einen oder mehrere Datensätze, die die gleichen Kategorien von Informationen enthalten. Eine Tabelle kann z.B. die Namen, die E-Mail-Adressen und die Telefonnummern von 50 Kunden enthalten.
Sie können eine Vielzahl von Formeln erstellen, die den Namen einer Tabelle als Argument verwenden, so wie eine Formel in Excel eine oder mehrere Zellreferenzen als Argumente akzeptiert. Einige Formeln in Power Fx geben eine Tabelle zurück, die die anderen von Ihnen angegebenen Argumente widerspiegelt. Sie können beispielsweise eine Formel erstellen:
- einen Datensatz in einer Tabelle zu aktualisieren, indem Sie diese Tabelle als eines von mehreren Argumente für die Patch-Funktion angeben.
- Spalten in einer Tabelle hinzufügen, entfernen und umbenennen, indem Sie diese Tabelle als Argument für die Funktionen AddColumns, DropColumns oder RenameColumns angeben. Keine dieser Funktionen verändert die ursprüngliche Tabelle. Stattdessen gibt die Funktion eine andere Tabelle auf Grundlage der anderen, von Ihnen angegebenen Argumente zurück.
Elemente einer Tabelle
Einträge
Jeder Datensatz enthält mindestens eine Kategorie von Informationen für eine Person, einen Ort oder eine Sache. Das beispiel oben zeigt einen Datensatz für jedes Produkt (Schokolade, Brot und Wasser) und eine Spalte für jede Informationskategorie (Preis, Menge zur Hand und Menge auf Bestellung).
In einer Formel können Sie mit geschweiften Klammern auf einen Datensatz selbst, außerhalb eines Tabellenkontexts verweisen. Angenommen, der Datensatz { Name: Strawberries, Price: 7,99 } ist nicht mit einer Tabelle verknüpft. Beachten Sie, dass die Feldnamen in diesem Beispiel, Name und Price, nicht in doppelte Anführungszeichen eingeschlossen sind.
Felder
Ein Feld ist eine einzelne Information in einem Datensatz. Sie können diese Art von Feld als Wert in einer Spalte eines bestimmten Datensatzes visuell darstellen.
Wie mit einem Steuerelement verweisen Sie auf ein Feld, indem Sie den .Operator auf einen Datensatz anwenden. First(Products).Name gibt beispielsweise das Feld Name für den ersten Datensatz in der Tabelle Products (Produkte) zurück.
Ein Feld kann einen anderen Datensatz oder eine andere Tabelle enthalten, wie im Beispiel zur GroupBy-Funktion dargestellt. Sie können beliebig viele Ebenen von Datensätzen und Tabellen verschachteln.
Spalten
Eine Spalte bezieht sich auf dasselbe Feld für einen oder mehrere Datensätze in einer Tabelle. Im vorherigen Beispiel weist jedes Produkt ein Preisfeld auf, und dieser Preis befindet sich in derselben Spalte für alle Produkte. Die vorstehende Tabelle weist vier Spalten auf, die horizontal über dem oberen Rand angezeigt werden:
- Name
- Preis
- Menge auf Lager
- Menge auf Bestellung
Der Name der Spalte gibt die Felder in dieser Spalte an.
Alle Werte innerhalb einer Spalte sind vom gleichen Datentyp. Im vorherigen Beispiel enthält die Spalte "Menge auf Lager" immer eine Zahl und darf keine Zeichenfolge enthalten, z. B. "12 Einheiten", bei einem Datensatz. Der Wert eines Felds kann auch leer sein.
In anderen Tools haben Sie möglicherweise Spalten als „Felder“ bezeichnet.
Tabelle
Eine Tabelle umfasst mindestens einen Datensatz, jeder mit mehreren Feldern, die datensatzübergreifend konsistente Namen aufweisen.
Alle Tabellen, die in einer Datenquelle oder eine Sammlung gespeichert sind, haben einen Namen, den Sie dazu verwenden können, um auf die Tabelle zu verweisen und sie an Funktionen zu übergeben, die Tabellen als Argumente akzeptieren. Tabellen können auch das Ergebnis einer Funktion oder eine Formel sein.
Sie können wie im folgenden Beispiel eine Tabelle in einer Formel ausdrücken, indem Sie die Table-Funktion mit einer Reihe von Datensätzen verwenden, die Sie in geschweiften Klammern ausdrücken:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Sie können auch eine einspaltige Tabelle mit eckigen Klammern definieren. Alternativ können Sie den obigen Ausdruck wie folgt schreiben:
[ "Strawberry", "Vanilla" ]
Tabellenformeln
In Excel und Power Fx verwenden Sie Formeln zum Bearbeiten von Zahlen und Textzeichenfolgen auf ähnliche Weise:
- Geben Sie in Excel in Zelle A1 einen Wert ein, z.B. 42, und geben Sie dann in eine andere eine Formel, z.B. A1+2, ein, um den Wert 44 anzuzeigen.
- Legen Sie in Power Apps die Default-Eigenschaft von Slider1 auf 42 fest, und legen Sie die Text-Eigenschaft eines Schiebereglers auf Slider1.Value + 2, um den Wert 44 anzuzeigen.
In beiden Fällen ändert sich der berechnete Wert automatisch, wenn die Werte der Argumente geändert werden (z.B. die Zahl in Zelle A1 oder der Wert von Slider1).
Sie können Formeln auf ähnliche Weise verwenden, um auf Daten in Tabellen und Datensätzen zuzugreifen und diese zu bearbeiten. In einigen Formeln können Sie Tabellennamen wie Min(Catalog, Price) als Argumente verwenden, um den niedrigsten Wert in der Spalte Price der Catalog-Tabelle anzuzeigen. Andere Formeln stellen ganze Tabellen als Rückgabewerte bereit, wie z.B. RenameColumns(Catalog, Price, Cost), womit alle Datensätze aus der Catalog-Tabelle zurückgegeben werden, jedoch der Name der Spalte Price in Cost (Kosten) geändert wird.
Ebenso wie Zahlen, werden Formeln, die Tabellen und Datensätze enthalten, automatisch neu berechnet, wenn die zugrunde liegenden Tabelle oder der zugrunde liegende Datensatz geändert wird. Wenn die Kosten eines Produkts in die Catalog-Tabelle unter den vorherigen Mindestwert sinken, wird der Rückgabewert der Min-Formel automatisch geändert und angepasst.
Tabellenfunktionen und Steuerelementeigenschaften
Nutzen Sie die Funktion Lower. Wenn die Variable Willkommen die Textzeichenfolge Hallo, Welt enthält, gibt die Formel Lower( welcome )Hallo, Welt zurück. Diese Funktion ändert den Wert in dieser Variablen nicht. Lower ist eine reine Funktion, da sie nur Input verarbeitet und Output erzeugt. Das ist alles; es hat keine Nebenwirkungen. Alle Funktionen in Excel und die meisten Funktionen in Power Fx sind reine Funktionen, mit denen die Arbeitsmappe oder die App automatisch neu berechnet werden kann.
Power Fx bietet eine Reihe von Funktionen, die auf die gleiche Weise auf Tabellen wirken. Diese Funktionen nehmen Tabellen als Eingabe und filtern, sortieren, transformieren, reduzieren und fassen ganze Datentabellen zusammen. Tatsächlich können Lower und viele andere Funktionen, die typischerweise einen einzelnen Wert annehmen, auch eine einspaltige Tabelle als Eingabe verwenden.
Viele Funktionen verwenden eine einspaltige Tabelle als Eingabe. Wenn eine ganze Tabelle nur eine Spalte hat, können Sie sie nach Namen angeben. Wenn eine Tabelle mehrere Spalten hat, können Sie eine dieser Spalten mit Tabelle.Spalte Syntax angeben. Beispielsweise gibt Products.Name die einspaltige Tabelle mit nur Name Werten aus der Tabelle Products zurück.
Sie können eine Tabelle nach Belieben vollständig umgestalten, indem Sie die Funktion Spalten hinzufügen, Spalten umbenennen, Spalten anzeigen oder Spalten löschen verwenden. Auch hier ändern diese Funktionen nur die Ausgabe, nicht die Quelle.
Verhaltensformeln
Andere Funktionen sind speziell auf die Änderung von Daten ausgelegt und haben Nebenwirkungen. Da diese Funktionen nicht sauber sind, müssen Sie sie sorgfältig erstellen, und sie können nicht an der automatischen Neuberechnung von Werten in der App teilnehmen. Sie können diese Funktionen nur innerhalb von Verhaltensformeln verwenden.
Datensatzebene
Einige Funktionen funktionieren, indem eine Formel für alle Datensätze einer Tabelle ausgewertet wird, jeweils ein Datensatz. Das Ergebnis der Formel wird auf unterschiedliche Weise verwendet:
- AddColumns – Die Formel stellt den Wert für die neue Spalte bereit.
- Average, Max, Min, Sum, StdevP, VarP: Die Formeln stellen den zu aggregierenden Wert bereit.
- Filter, Lookup: Die Formel bestimmt, ob der Datensatz in die Ausgabe aufgenommen werden soll.
- Concat: Die Formel bestimmt die zu verkettenden Zeichenfolgen.
- Distinct: Die Formel gibt einen Wert zurück, mit dem doppelte Datensätze ermittelt werden können.
- ForAll: Die Formel kann einen beliebigen Wert zurückgeben, u.U. mit Nebeneffekten.
- Sort: Die Formel stellt den Wert bereit, nach dem die Datensätze sortiert werden sollen.
- Mit - Die Formel kann jeden Wert zurückgeben, möglicherweise mit Nebenwirkungen.
Innerhalb dieser Formeln können Sie auf die Felder des aktuell verarbeiteten Datensatzes verweisen. Jede dieser Funktionen erstellt eine „Datensatzebene“, in dem die Formel ausgewertet wird und in dem die Felder des Datensatzes als Bezeichner der obersten Ebene verfügbar sind. Sie können auch Eigenschaften von Steuerelementen und andere Werte aus Ihrer App verweisen.
Nehmen Sie zum Beispiel eine Tabelle von Produkten in eine globale Variable eingefügt:
Set( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
So ermitteln Sie, ob eines dieser Produkte mehr angefordert wurde als verfügbar:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Das erste Argument für Filter ist die Tabelle von Datensätzen, die verarbeitet wird, und das zweite Argument ist eine Formel. Filter erstellt eine Datensatzebene für die Auswertung dieser Formel, in dem die Felder jedes Datensatzes verfügbar sind, in diesem Fall Product, Quantity Requested (Nachgefragte Menge) und Quantity Available (verfügbare Menge). Das Ergebnis des Vergleichs bestimmt, ob jeder Datensatz in das Ergebnis der Funktion aufgenommen werden soll:
Wenn Sie zu diesem Beispiel hinzufügen, können Sie berechnen, wie viel von den einzelnen Produkten bestellt werden soll:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Hier fügen Sie dem Ergebnis eine berechnete Spalte hinzu. AddColumns verfügt über einen eigenen Datensatzbereich, der zum Berechnen des Unterschieds zwischen dem angeforderten und dem verfügbaren Datensatz verwendet wird.
Schließlich können Sie die Ergebnistabelle auf die gewünschten Spalten reduzieren:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Beachten Sie, dass Sie in den vorangehenden Beispielen doppelte Anführungszeichen (") an einigen Stellen und einfachen Anführungszeichen (') an anderen Stellen verwenden. Einfache Anführungszeichen sind erforderlich, wenn auf den Wert eines Objekts verwiesen wird, z. B. ein Feld oder eine Tabelle, wenn der Name des Objekts ein Leerzeichen enthält. Verwenden Sie doppelte Anführungszeichen, wenn Sie nicht auf den Wert eines Objekts verweisen, sondern stattdessen darüber sprechen, insbesondere in Situationen, in denen das Objekt noch nicht vorhanden ist, wie bei AddColumns.
Mehrdeutigkeitsvermeidung
Feldnamen, die Sie mit dem Datensatzbereich hinzufügen, setzen dieselben Namen von anderen Stellen in der App außer Kraft. Wenn diese Außerkraftsetzung erfolgt, können Sie weiterhin auf Werte außerhalb des Datensatzbereichs zugreifen, indem Sie den @ Mehrdeutigkeitsoperator verwenden:
- Um auf Werte aus geschachtelten Datensatzbereichen zuzugreifen, verwenden Sie den @ Operator mit dem Namen der Tabelle, auf der Sie arbeiten, im Folgenden dieses Musters:
Table[@FieldName] - Verwenden Sie zum Zugreifen auf globale Werte, z.B. Datenquellen, Sammlungen und Kontextvariablen, das Muster [@Objektname] (ohne Tabellenbezeichnung).
Wenn die tabelle, auf der Sie arbeiten, ein Ausdruck ist, z. B. Filter(Table, ... ), Sie können den Mehrdeutigkeitsoperator nicht verwenden. Nur der innerste Datensatzbereich kann auf Felder aus diesem Tabellenausdruck zugreifen, indem nicht der Mehrdeutigkeitsoperator verwendet wird.
Angenommen, Sie haben eine Sammlung X:
Sie können diese Sammlung mithilfe von ClearCollect( X, [1, 2] )erstellen.
Und eine weitere Sammlung Y:
Sie können diese Sammlung mithilfe von ClearCollect( Y, ["A", "B"] )erstellen.
Definieren Sie darüber hinaus eine Kontextvariable namens Value mit dieser Formel: UpdateContext( {Value: !} )
Lassen Sie uns alle Puzzleteile zusammensetzen. In diesem Kontext ergibt die folgende Formel:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
die folgende Tabelle:
Was geht da vor? Die äußerste ForAll-Funktion definiert einen Datensatzbereich für X, sodass Sie während der Prozesse auf das Wertfeld jedes Datensatzes zugreifen können. Sie können darauf zugreifen, indem Sie einfach das Wort Wert oder X[@Value]verwenden.
Die innerste ForAll-Funktion definiert einen weiteren Datensatzbereich für Y. Da diese Tabelle auch ein Wertfeld definiert hat, bezieht sich die Verwendung von Value hier auf das Feld im Y-Datensatz und nicht mehr auf das Feld aus X. Um auf das Feld "Wert" von X zuzugreifen, müssen Sie die längere Version mit dem Mehrdeutigkeitsoperator verwenden.
Da Y der innerste Datensatzbereich ist, erfordert der Zugriff auf Felder dieser Tabelle keine Mehrdeutigkeit, sodass Sie diese Formel mit demselben Ergebnis verwenden können:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Alle Datensatzebenen von ForAll sind dem globalen Bereich übergeordnet. Die von Ihnen definierte Wertkontext-Variable ist ohne Verwendung des Mehrdeutigkeitsoperators nicht namentlich verfügbar. Um auf diesen Wert zuzugreifen, verwenden Sie [@Value].
Ungroup verflacht das Ergebnis, da verschachtelte ForAll Funktionen zu einer verschachtelten Ergebnistabelle führen.
Einspaltige Tabellen
Um eine einzelne Spalte aus einer Tabelle zu bearbeiten, verwenden Sie wie in diesem Beispiel die Funktion Spalten anzeigen:
ShowColumns( Products, "Product" )
Diese Formel ergibt diese einspaltige Tabelle:
Für eine kürzere Alternative geben Sie Table.Column an, wodurch die einspaltige Tabelle von nur Column aus Table extrahiert wird. Diese Formel ergibt z.B. genau dasselbe Ergebnis wie die Verwendung von Spalten anzeigen.
Products.Product
Inline-Datensätze
Datensätze werden mit geschweiften Klammern ausgedrückt, die die Namen von Feldwerten enthalten. Sie können den ersten Datensatz in der Tabelle am Anfang dieses Themas z.B. mit dieser Formel ausdrücken:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Sie können Formeln auch in andere Formeln einbetten, wie in diesem Beispiel gezeigt:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Datensätze lassen sich auch schachteln, indem geschweifte Klammern geschachtelt werden, wie in diesem Beispiel gezeigt:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Schließen Sie jeden Spaltenname, die ein Sonderzeichen wie ein Leerzeichen oder einen Doppelpunkt enthält, in einfache Anführungszeichen ein. Um ein einfaches Anführungszeichen in einem Spaltennamen zu verwenden, verdoppeln Sie es.
Beachten Sie, dass der Wert in der Price-Spalte kein Währungssymbol wie ein Dollarzeichen enthält. Diese Formatierung wird angewendet, wenn der Wert angezeigt wird.
Inline-Tabellen
Mithilfe mit der Table-Funktion und einem Satz von Datensätzen können Sie eine Tabelle erstellen. Die Tabelle zu Beginn dieses Themas lässt sich mit dieser Formel ausdrücken:
Table(
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 }
)
Sie können Tabellen auch schachteln:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Inline-Wertetabellen
Sie können einspaltige Tabellen erstellen, indem Sie Werte in eckigen Klammern angeben. Die daraus resultierende Tabelle enthält eine einzelne Spalte namens Value.
Beispielsweise ist [ 1, 2, 3, 4 ] gleichbedeutend mit Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) und gibt diese Tabelle zurück: