Tabellen
Anmerkung
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.
In Microsoft Power Fx können Sie eine Formel schreiben, die auf Informationen in Microsoft Excel, SharePoint, SQL Server und mehreren anderen Quellen zugreift, die Daten in Datensätzen und Tabellen speichern. Um möglichst effizient mit diesen Daten umzugehen, machen Sie sich mit den Konzepten vertraut, die diesen Strukturen zugrunde liegen.
- 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 obige Beispiel zeigt einen Datensatz für jedes Produkt (Schokolade, Brot und Wasser) und eine Spalte für jede Kategorie von Informationen (Preis, Menge auf Lager 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 obigen Beispiel hat jedes Produkt ein Preisfeld, und dieser Preis steht für alle Produkte in der gleichen Spalte. Die obige Tabelle besteht aus vier Spalten, die horizontal über den gesamten Bereich verteilt sind:
- Name
- Preis
- Vorrätige Menge
- Bestellmenge
Der Name der Spalte gibt die Felder in dieser Spalte an.
Alle Werte innerhalb einer Spalte sind vom gleichen Datentyp. Im obigen Beispiel enthält die Spalte „Menge auf Lager“ immer eine Zahl und kann keine Zeichenfolge für einen Datensatz enthalten, wie beispielsweise „12 Einheiten“. Der Wert eines Felds kann auch leer sein.
In anderen Tools können Spalten „Felder“ genannt werden.
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 in keiner Weise den Wert in dieser Variablen. Lower ist eine reine Funktion, da sie nur Eingaben verarbeitet und Ausgaben 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 werten eine Formel in allen Datensätzen einer Tabelle einzeln aus. Das Ergebnis der Formel wird auf verschiedene Weise verwendet:
- AddColumns – Die Formel liefert den Wert des hinzugefügten Felds.
- Durchschnitt, Max, Min, Summe, StdevP, VarP – Die Formel liefert den zu aggregierenden Wert.
- Filter, Nachschlagen – Die Formel bestimmt, ob der Datensatz in die Ausgabe aufgenommen werden soll.
- Concat – Die Formel bestimmt die Zeichenfolgen, die miteinander verkettet werden sollen.
- Distinct – Die Formel gibt einen Wert zurück, der zur Identifizierung doppelter Datensätze verwendet wird.
- ForAll – Die Formel kann beliebige Werte zurückgeben, möglicherweise mit Nebenwirkungen.
- Sortieren – Die Formel liefert den Wert, nach dem die Datensätze sortiert werden.
- Mit – Die Formel kann jeden beliebigen 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 }
)
)
Um festzustellen, ob bei einem dieser Produkte die Nachfrage das Angebot überstieg, verwenden Sie diese Formel:
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 einen Datensatzbereich zur Auswertung dieser Formel, in dem die Felder jedes Datensatzes verfügbar sind, in diesem Fall Produkt, Angeforderte Menge und Verfügbare Menge. Das Ergebnis des Vergleichs bestimmt, ob jeder Datensatz in das Ergebnis der Funktion aufgenommen werden soll:
Außerdem können wir berechnen, wie viel von jedem Produkt bestellt werden soll:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Hier wird dem Ergebnis eine berechnete Spalte hinzugefügt. AddColumns verfügt über einen eigenen Datensatzbereich, mit dem es die Differenz zwischen dem Angeforderten und dem Verfügbaren berechnet.
Schließlich kann die Ergebnistabelle auf nur bestimmte Spalten reduziert werden:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Beachten Sie, dass wir oben an einigen Stellen doppelte Anführungszeichen (") und an anderen einfache Anführungszeichen (') verwendet haben. Einfache Anführungszeichen sind beim Verweisen auf den Wert eines Objekts wie ein Feld oder eine Tabelle erforderlich, wenn der Name des Objekts ein Leerzeichen enthält. Doppelte Anführungszeichen werden verwendet, wenn nicht auf den Wert eines Objekts verweisen wird, sondern darüber gesprochen. Dies kommt vor allem dann vor, wenn das Objekt noch nicht vorhanden ist, wie bei AddColumns.
Mehrdeutigkeitsvermeidung
Feldnamen, die mit dem Datensatzbereich hinzugefügt werden, setzen die gleichen Namen von anderen Orten der App außer Kraft. In diesem Fall können Sie weiterhin von außerhalb der Datensatzebene mithilfe des @-Operators zur Mehrdeutigkeitsvermeidung auf Werte zugreifen:
- Verwenden Sie zum Zugreifen auf Werte aus geschachtelten Datensatzbereichen den @-Operator mit dem Namen der jeweiligen Tabelle, indem Sie das folgende Muster nutzen:
Tabelle[@Feldname] - Verwenden Sie zum Zugreifen auf globale Werte, z.B. Datenquellen, Sammlungen und Kontextvariablen, das Muster [@Objektname] (ohne Tabellenbezeichnung).
Wenn es sich bei der gerade verarbeiteten Tabelle um einen Ausdruck wie Filter handelt(Tabelle, ...), kann der Operator zur Mehrdeutigkeitsvermeidung nicht verwendet werden. Nur die innerste Datensatzebene kann auf Felder aus diesem Tabellenausdruck zugreifen, indem der Operator zur Mehrdeutigkeitsvermeidung nicht verwendet wird.
Angenommen, Sie haben eine Sammlung X:
Sie können diese Sammlung mit ClearCollect( X,, [1, 2] ) erstellen.
Und eine weitere Sammlung Y:
Sie können diese Sammlung mit 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 ist hier passiert? Die äußerste ForAll-Funktion definiert eine Datensatzebene für X und erlaubt den Zugriff auf das Value-Feld jedes Datensatzes während der Verarbeitung. Der Zugriff erfolgt einfach mithilfe des Wortes Value oder mithilfe von X[@Value].
Die innerste Funktion ForAll definiert einen weiteren Datensatzumfang für Y. Da auch in dieser Tabelle ein Feld Wert definiert ist, bezieht sich die Verwendung von Wert hier auf das Feld im Datensatz von Y und nicht mehr auf das von X. Um hier auf das Feld X Wert zuzugreifen, müssen wir die längere Version mit dem Disambiguationsoperator verwenden.
Da Y die innerste Datensatzebene darstellt, ist beim Zugriff auf Felder dieser Tabelle keine Mehrdeutigkeitsvermeidung erforderlich. Die Verwendung dieser Formel erzielt daher dasselbe Ergebnis:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Alle Datensatzebenen von ForAll sind dem globalen Bereich übergeordnet. Die von uns definierte Value-Kontextvariable ist ohne den Operator zur Mehrdeutigkeitsvermeidung nicht anhand des Namens verfügbar. Um auf diesen Wert zuzugreifen, verwenden Sie [@Value].
Durch Aufheben der Gruppierung wird das Ergebnis vereinfacht, 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. Die 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: