Operatoren und Bezeichner

Notiz

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.

Die Operatoren in Microsoft Power Fx werden unten beschrieben. Einige dieser Operatoren sind von der Sprache des Erstellers abhängig. Weitere Informationen finden Sie unter globale Apps.

Symbol Typ Syntax Beschreibung
. Eigenschaftsauswahl Slider1.Value
Color.Red
Extrahiert eine Eigenschaft aus einer Tabelle, einem Steuerelement oder einer Enumeration. Aus Gründen der Abwärtskompatibilität darf ! auch verwendet werden.
.
sprachabhängig
Dezimaltrennzeichen 1.23 Trennzeichen zwischen dem ganzen Teil und dem Bruchteil einer Zahl. Das Zeichen ist abhängig von der Sprache.
( ) Klammern Filter(T, A < 10)

(1 + 2) * 3
Erzwingt die Rangfolge und gruppiert Unterausdrücke eines längeren Ausdrucks
+ Arithmetische Operatoren 1 + 2 Addition
-   2 - 1 Subtraktion und Vorzeichen
*   2 * 3 Multiplikation
/   2 / 3 Division (siehe auch Funktion Mod)
^   2 ^ 3 Potenzierung, entspricht der Funktion Power
%   20% Prozentsatz (entspricht „* 1/100“)
= Vergleichsoperatoren Price = 100 Entspricht
>   Price > 100 Größer als
>=   Price >= 100 Größer oder gleich
<   Price < 100 Kleiner als
<=   Price <= 100 Weniger als oder gleich
<>   Price <> 100 Entspricht nicht
& Operator für Zeichenfolgenverkettung „hello“ & „ “ & „world“ Verkettet mehrere Zeichenfolgen.
&& oder And Logische Operatoren Price < 100 && Slider1.Value = 20
oder Price < 100 And Slider1.Value = 20
Logische Konjunktion, entspricht der Funktion And
|| oder Or   Preis < 100 || Slider1.Value = 20 oder Preis < 100 Oder Slider1.Value = 20 Logische Disjunktion, entspricht der Funktion Or
! oder Not   !(Price < 100) oder Not (Price < 100) Logische Negation, entspricht der Funktion Not
exactin Mitgliedschaftsoperatoren Gallery1.Selected exactin SavedItems Gehört zu einer Sammlung oder einer Tabelle.
exactin   Windows exactin „To display windows in the Windows operating system...” Teilzeichenfolgentest (Groß-/Kleinschreibung wird berücksichtigt)
in   Gallery1.Selected in SavedItems Gehört zu einer Sammlung oder einer Tabelle.
in   „Die“ in „Tastatur und Bildschirm...“ Teilzeichenfolgentest (Groß-/Kleinschreibung wird nicht berücksichtigt)
@ Operator zur Mehrdeutigkeitsvermeidung MyTable[@fieldname] Mehrdeutigkeitsvermeidung für Felder
@   [@MyVariable] Globale Mehrdeutigkeitsvermeidung
,
[sprachabhängig]
Listentrennzeichen If( X < 10, "Low", "Good" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Trennt Folgendes:
  • Argumente in Funktionsaufrufen
  • Felder in einem Datensatz
  • Datensätze in einer Tabelle
Dieses Zeichen ist abhängig von der Sprache.
;
[sprachabhängig]
Formelverkettung Collect(T, A); Navigate(S1, "") Separate Aufrufe von Funktionen in Verhaltenseigenschaften. Der Verkettungsoperator ist von der Sprache abhängig.
Als As operator AllCustomers As Customer Überschreibt ThisItem und ThisRecord in Galerien und Funktionen für Datensatzbereiche. As ist nützlich, um einen besseren, spezifischen Namen bereitzustellen, und ist besonders wichtig in verschachtelten Szenarien.
Self-Service Selbst-Operator Self.Fill Zugriff auf Eigenschaften des aktuellen Steuerelements
Übergeordnet Parent-Operator Parent.Fill Zugriff auf Eigenschaften eines Steuerelementcontainers
ThisItem ThisItem-Operator ThisItem.FirstName Zugriff auf Felder eines Katalogs oder Form-Steuerelements
ThisRecord ThisItem-Operator ThisRecord.FirstName Zugriff auf den gesamten Datensatz und einzelne Felder des Datensatzes ForAll, Sum, With und andere Funktionen für den Datensatzbereich. Kann mit dem As-Operator überschrieben werden.

Operatoren „in“ und „exactin“

Verwenden Sie die Operator in und exactin, um in einer Datenquelle nach einer Zeichenfolge zu suchen, z.B. einer Sammlung oder importierten Tabelle. Mit dem Operator in werden Übereinstimmungen unabhängig von der Groß- und Kleinschreibung identifiziert, und mit dem Operator exactin ergeben sich nur dann Übereinstimmungen, wenn sie exakt die gleiche Schreibweise haben. Im Folgenden finden Sie ein Beispiel:

  1. Erstellen oder importieren Sie eine Sammlung namens Inventory, und zeigen Sie sie in einem Katalog an. Dies wird im ersten Verfahren unter Anzeigen von Bildern und Text in einem Katalog beschrieben.

  2. Legen Sie die Items-Eigenschaft des Katalogs auf diese Formel fest:
    Filter(Inventory, "E" in ProductName)

    Im Katalog werden alle Produkte mit Ausnahme von „Callisto“ angezeigt, weil der Name dieses Produkts der einzige Name ist, der den von Ihnen angegebenen Buchstaben nicht enthält.

  3. Ändern Sie die Items-Eigenschaft des Katalogs in diese Formel:
    Filter(Inventory, "E" exactin ProductName)

    Im Katalog wird nur „Europa“ angezeigt, weil nur dieser Name den von Ihnen angegebenen Großbuchstaben enthält.

ThisItem, ThisRecord und As operators

Einige Steuerelemente und Funktionen wenden Formeln auf einzelne Datensätze einer Tabelle an. Verwenden Sie eine der folgenden Optionen, um auf den einzelnen Datensatz in einer Formel zu verweisen:

Operator Gilt für Beschreibung
ThisItem Katalog Steuerelement
Formular bearbeiten Steuerelement
Formular anzeigen Steuerelement
Der Standardname für den aktuellen Datensatz in einem Gallery oder form-Steuerelement.
ThisRecord ForAll, Filter, Mit, Sum und andere Datensatzumfang Funktionen Der Standardname für den aktuellen Datensatz in ForAll und andere Funktionen für Datensatzbereiche.
WieName Katalog Steuerelement
ForAll, Filter, Mit, Sum und andere Datensatzumfangs-Funktionen
Definiert ein name-Element für den aktuellen Datensatz, der die Standardelemente ThisItem oder ThisRecord ersetzt. Verwenden Sie As, um Formeln beim Verschachteln leichter verständlich zu machen und Mehrdeutigkeiten aufzulösen.

ThisItem-Operator

Zum Beispiel ist im Folgenden Gallery-Steuerelement die Eigenschaft Items auf die Employees-Datenquelle (wie die Employees-Entität im Northwind Traders-Beispiel) festgelegt:

Employees

In einer Galerie angezeigte Mitarbeiter

Das erste Element in der Galerie ist eine Vorlage, die für jeden Mitarbeiter repliziert wird. In der Vorlage verwendet die Formel für das Bild ThisItem, um auf das aktuelle Element zu verweisen:

ThisItem.Picture

Formel für das Bild eines Mitarbeiters

Ebenso verwendet die Formel ThisItem auch für den Namen:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Formel für den Vor- und Nachnamen eines Mitarbeiters

ThisRecord-Operator

ThisRecord wird in Funktionen mit einem Datensatzbereich verwendet. Zum Beispiel können wir die Filter-Funktion bei der Items-Eigenschaft unserer Galerie verwenden, um nur Vornamen anzuzeigen, die mit M beginnen:

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

Filterung von Mitarbeiter anhand des Namens mithilfe von ThisRecord

ThisRecord ist optional und wird durch direkte Verwendung der Felder impliziert. In diesem Fall hätten wir beispielsweise schreiben können:

Filter( Employees, StartsWith( 'First Name', "M" ) )

Obwohl es optional ist, sind Formeln mit ThisRecord leichter verständlich und in mehrdeutigen Situationen, in denen ein Feldname auch ein Beziehungsname sein kann, kann es erforderlich sein. ThisRecord ist optional wohingegen ThisItem immer erforderlich ist.

Verwenden Sie ThisRecord, um den gesamten Datensatz mit Patch, Collect und anderen Funktionen für den Datensatzbereich zu referenzieren. Die folgende Formel legt beispielsweise den Status für alle inaktiven Mitarbeiter auf aktiv fest:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees, 
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

As Operator

Verwenden Sie den As-Operator zum Benennen eines Datensatzes in einer Galerie oder einer Datensatzbereichsfunktion, wobei die Standardeinstellung ThisItem oder ThisRecord überschrieben wird. Das Benennen des Datensatzes kann das Verständnis Ihrer Formeln erleichtern und in verschachtelten Situationen erforderlich sein, um auf Datensätze in anderen Bereichen zuzugreifen.

Zum Beispiel können Sie die Items-Eigenschaft unserer Galerie ändern, um mit As zu identifizieren, dass wir mit einem Mitarbeiter zusammenarbeiten:

Employees As Employee

Galerie der Mitarbeiter mit dem As-Operator

Die Formeln für das Bild und den Namen werden angepasst, um diesen Namen für den aktuellen Datensatz zu verwenden:

Employee.Picture

Bild eines Mitarbeiters unter Verwendung des Employee-Namenssatzes mit dem As-Operator

Employee.'First Name' & " " & Employee.'Last Name'

Vor- und Nachname eines Mitarbeiters unter Verwendung des Employee-Namenssatzes mit dem As-Operator

As kann auch mit Datensatzbereichsfunktionen verwendet werden, um den Standardnamen ThisRecord zu ersetzen. Wir können dies auf unser vorheriges Beispiel anwenden, um den Datensatz zu verdeutlichen, mit dem wir arbeiten:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee, 
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

Wenn Sie Galerien und Datensatzbereichsfunktionen verschachteln, verweisen ThisItem und ThisRecord immer auf den innersten Bereich, sodass Datensätze in äußeren Bereichen nicht verfügbar sind. Verwenden Sie As, um alle Datensatzbereiche verfügbar zu machen, indem Sie jedem einen eindeutigen Namen geben.

Diese Formel erzeugt beispielsweise ein Schachbrettmuster als Textzeichenfolge, indem zwei ForAll-Funktionen verschachtelt werden:

Concat( 
    ForAll( Sequence(8) As Rank,
        Concat( 
            ForAll( Sequence(8) As File, 
                    If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " ) 
            ),
            Value 
        ) & Char(10) 
    ), 
    Value 
)

Das Festlegen der Text-Eigenschaft eines Label-Steuerelements für diese Formel zeigt Folgendes an:

In einem Beschriftungssteuerelement angezeigter Schachbretttext

Nehmen wir auseinander, was hier passiert:

  • Wir beginnen mit der Iteration einer unbenannten Tabelle mit 8 nummerierten Datensätzen aus der Sequence-Funktion. Diese Schleife gilt für jede Reihe des Boards, die üblicherweise als Rank bezeichnet wird. Also geben wir ihr diesen Namen.
  • Für jede Zeile iterieren wir eine weitere unbenannte Tabelle mit 8 Spalten und geben den allgemeinen Namen File an.
  • Wenn Rank.Value + File.Value eine ungerade Zahl ist, erhält das Quadrat ein X., sonst einen Punkt. Dieser Teil der Formel verweist auf beide ForAll-Schleifen, ermöglicht durch die Verwendung des As-Operators.
  • Kontakt wird zweimal verwendet. Zuerst um die Spalten und dann die Zeilen mit einem Char(10) zusammenzusetzen, das genutzt wird, um eine neue Zeile zu erstellen.

Ein ähnliches Beispiel ist mit verschachtelten Gallery-Steuerelementen statt ForAll Funktionen möglich. Beginnen wir mit der vertikalen Galerie für Rank. Dieses gallery-Steuerelement hat eine Items-Formel von:

Sequence(8) as Rank

Abbildung der äußeren Galerie, die die Rank-Iteration bereitstellt

Innerhalb dieser Galerie platzieren wir eine horizontale Galerie für File, die für jedes Rank-Element mit der folgenden Items-Eigenschaft repliziert wird:

Sequence(8) as File

Abbildung der inneren Galerie, die die File-Iteration bereitstellt

Und schließlich fügen wir in dieser Galerie ein Label-Steuerelement hinzu, das für jedes File- und Rank-Element repliziert wird. Wir werden die Größe so anpassen, das es den gesamten Platz ausfüllt und wir verwenden die Fill-Eigenschaft, um die Farbe mit dieser Formel bereitzustellen:

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Label-Steuerelement in den beiden Galerien, die die abwechselnden Farben für das Schachbrett bereitstellt

Selbst- und übergeordnete Betreiber

Es gibt drei Möglichkeiten, auf ein Steuerelement und seine Eigenschaften innerhalb einer Formel zu verweisen:

Methode Beschreibung
Über den Namen des Steuerelements Jedes Steuerelement kann von überall innerhalb der App namentlich referenziert werden.

Beispielsweise bezieht sich Label1.Fill auf die Fill-Eigenschaft des Steuerelements, dessen Name Label1 lautet.
Self Operator Es ist oft praktisch, beim Schreiben einer Formel auf eine andere Eigenschaft desselben Steuerelements zu verweisen. Anstatt eine absolute Referenz nach Namen zu verwenden, ist es einfacher und portabler, eine relative Referenz zu einer Eigenschaft Self zu verwenden. Der Operator Self bietet diesen einfachen Zugriff auf das aktuelle Steuerelement.

Zum Beispiel: bezieht sich Self.Fill auf die Füllfarbe des aktuellen Steuerelements.
Übergeordnet Operator Einige Steuerelemente enthalten andere Steuerelemente, wie z. B. die Steuerelemente Screen und Gallery. Das Steuerelement, das die darin enthaltenen Steuerelemente beherbergt, wird als übergeordnetes Steuerelement bezeichnet. Wie der Operator Self bietet der Operator Parent eine einfache relative Referenz zum Steuerelement des Containers.

Beispielsweise bezieht sich Parent.Fill auf die Fill-Eigenschaft des Steuerelements, das der Container für das aktuelle Steuerelement ist.

Self und Parent sind Operatoren und keine Eigenschaften auf den Steuerelementen selbst. Verweise auf Parent.Parent, Self.Parent oder Parent.Self werden nicht unterstützt.

Bezeichnernamen

Die Namen von Variablen, Datenquellen, Spalten und anderen Objekten können einen beliebigen Unicode enthalten.

Verwenden Sie einfache Anführungszeichen um einen Namen, der ein Leerzeichen oder ein anderes Sonderzeichen enthält.
Verwenden Sie zwei einfache Anführungszeichen zusammen, um ein einfaches Anführungszeichen im Namen darzustellen. Namen, die keine Sonderzeichen enthalten, erfordern keine einfachen Anführungszeichen.

Hier sind einige Beispielspaltennamen, die in einer Tabelle auftreten können, und wie sie in einer Formel dargestellt werden:

Spaltenname in einer Datenbank Spaltenreferenz in einer Formel
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Name mit Leerzeichen 'Name with spaces'
Name mit "doppelten" Anführungszeichen 'Name with "double" quotes'
Name mit 'einfachen' Anführungszeichen 'Name with ''single'' quotes'
Name mit einem @ at-Zeichen 'Name with an @ at sign'

Doppelte Anführungszeichen werden zum Festlegen von Textzeichenfolgen verwendet.

Anzeigenamen und logische Namen

Einige Datenquellen wie SharePoint und Microsoft Dataverse haben zwei verschiedene Namen, um auf dieselbe Tabelle oder Datenspalte zu verweisen:

  • Logischer Name – Ein Name, der garantiert eindeutig ist, sich nach seiner Erstellung nicht ändert, normalerweise keine Leerzeichen oder andere Sonderzeichen zulässt und nicht in verschiedenen Sprachen lokalisiert ist. Dadurch kann der Name kryptisch sein. Diese Namen werden von professionellen Entwicklern verwendet. Zum Beispiel: cra3a_customfield. Dieser Name kann auch als Schemaname oder nur Name bezeichnet werden.

  • Anzeigename – Ein Name, der benutzerfreundlich ist und von Endbenutzern gesehen werden soll. Dieser Name ist möglicherweise nicht eindeutig, kann sich im Laufe der Zeit ändern, Leerzeichen und Unicode-Zeichen enthalten und in verschiedenen Sprachen lokalisiert sein. Entsprechend dem obigen Beispiel kann der Anzeigename Custom Field mit Leerzeichen zwischen den Wörtern sein.

Da Anzeigenamen leichter zu verstehen sind, schlägt Power Fx sie als Auswahl vor und schlägt keine logischen Namen vor. Obwohl logische Namen nicht vorgeschlagen werden, können sie dennoch verwendet werden, wenn sie indirekt eingegeben werden.

Stellen Sie sich zum Beispiel vor, Sie haben Custom Field zu einer Entität in Dataverse hinzugefügt. Das System weist Ihnen einen logischen Namen zu, den Sie nur beim Erstellen des Feldes ändern können. Das Ergebnis würde ähnlich aussehen wie:

Entität „Konten“ mit hinzugefügtem Custom Field mit Anzeige eines Anzeigenamens von „Custom Field“ und eines logischen Namens von „cr5e3_customfield“

Wenn Sie einen Verweis auf ein Feld von „Konten“ erstellen, wird der Vorschlag gemacht, 'Custom Field' zu verwenden, da dies der Anzeigename ist. Die einfachen Anführungszeichen müssen verwendet werden, da dieser Name ein Leerzeichen enthält:

Studio-Formelleiste mit Vorschlägen für Feldnamen von „Konten“ mit hervorgehobenem Anzeigename 'Custom Field'

Nach Auswahl des Vorschlags wird in der Formelleiste 'Custom Field' angezeigt und die Daten werden abgerufen:

Studio-Formelleiste mit Verwendung des Anzeigenamens 'Custom Field' für das Feld

Obwohl dies nicht empfohlen wird, können wir auch den logischen Namen für dieses Feld verwenden. Dies führt dazu, dass dieselben Daten abgerufen werden. Es sind keine einfachen Anführungszeichen erforderlich, da dieser Name keine Leerzeichen oder Sonderzeichen enthält:

Studio-Formelleiste mit Verwendung des logischen Namens cr5e3_customfield für das Feld

Im Hintergrund wird eine Zuordnung zwischen den in Formeln angezeigten Anzeigenamen und den zugrunde liegenden logischen Namen beibehalten. Da für die Interaktion mit der Datenquelle logische Namen verwendet werden müssen, wird diese Zuordnung verwendet, um automatisch vom aktuellen Anzeigename in den logischen Namen zu konvertieren. Dies wird im Netzwerkdatenverkehr angezeigt. Diese Zuordnung wird auch verwendet, um in logische Namen zurück zu konvertieren und zu neuen Anzeigenamen zu wechseln, z. B. wenn sich ein Anzeigename ändert oder ein Hersteller die App in einer anderen Sprache bearbeitet.

Notiz

Logische Namen werden beim Verschieben einer App zwischen Umgebungen nicht übersetzt. Für Dataverse-Systementitäts- und Feldnamen sollte dies kein Problem sein, da logische Namen in allen Umgebungen konsistent sind. Aber alle benutzerdefinierten Felder, wie z. B. cra3a_customfield in diesem Beispiel oben, können ein anderes Umgebungspräfix haben (cra3a in diesem Fall). Anzeigenamen werden bevorzugt, da sie mit Anzeigenamen in der neuen Umgebung abgeglichen werden können.

Mehrdeutigkeitsvermeidung für Namen

Da Anzeigenamen nicht eindeutig sind, kann derselbe Anzeigename in derselben Entität mehrmals vorkommen. In diesem Fall wird der logische Name am Ende des Anzeigenamens in Klammern für einen oder mehrere der widersprüchlichen Namen hinzugefügt. Aufbauend auf dem obigen Beispiel, wenn es ein zweites Feld mit dem gleichen Anzeigenamen von Custom Field mit einem logischen Namen von cra3a_customfieldalt gäbe, dann würden die Vorschläge Folgendes zeigen:

Studio-Formelleiste mit der Verwendung des logischen Namens cr5e3_customfieldalt zur Unterscheidung der beiden Versionen von „Custom Field“

Zeichenfolgen zur Mehrdeutigkeitsvermeidung für Namen werden in anderen Situationen hinzugefügt, in denen Namenskonflikte auftreten, z. B. bei Namen von Entitäten, Optionssätzen und anderen Dataverse-Elementen.

Operator zur Mehrdeutigkeitsvermeidung

Für einige Funktionen werden Datensatzbereiche zum Zugreifen auf die Felder der Tabelle erstellt, während die einzelnen Datensätze verarbeitet werden, z. B. Filter, AddColumns und Sum. Feldnamen, die mit dem Datensatzbereich hinzugefügt werden, setzen die gleichen Namen von anderen Orten der App außer Kraft. Wenn dies passiert, können Sie mit dem @-Operator zur Mehrdeutigkeitsvermeidung trotzdem auf Werte außerhalb des Datensatzbereichs 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[@FieldName]
  • Verwenden Sie zum Zugreifen auf globale Werte, z.B. Datenquellen, Sammlungen und Kontextvariablen, das Muster [@Objektname] (ohne Tabellenbezeichnung).

Weitere Informationen und Beispiele finden Sie unter Datensatzbereiche.