Zwei der am häufigsten verwendeten Funktionen zur Implementierung von Entscheidungslogik sind die If- und Switch-Funktionen. In diesem Blog-Artikel erklären wir, wie diese Funktionen verwendet werden, und zeigen, wann welche am besten geeignet ist.
Die If-Funktion: Flexible Bedingungsprüfung
If(
Bedingung,
DannErgebnis
[, Standardergebnis ]
)
If(
Bedingung1,
DannErgebnis1
[, Bedingung2, DannErgebnis2, ...
[, Standardergebnis ]
]
)
- Bedingung: Die zu prüfende Formel, die einen booleschen Wert (wahr oder falsch) zurückgibt.
- DannErgebnis: Der Wert, der zurückgegeben wird, wenn die Bedingung wahr ist.
- Standardergebnis (optional): Der Wert, der zurückgegeben wird, wenn keine der Bedingungen wahr ist.
Beispiele
Score bewerten
In Power Fx ermöglicht die folgende Formel eine einfache Bewertung von numerischen Werten, wie sie beispielsweise in Power Apps zur Notenvergabe oder Leistungsanalyse eingesetzt werden kann. Zunächst wird mit der With
-Funktion eine temporäre Variable namens Score
erstellt, die den numerischen Wert aus einem Texteingabefeld (tiNumber.Text
) übernimmt. Die Funktion Value()
sorgt dabei für die Konvertierung des Texteingabeformats in eine Zahl. Anschließend prüft die If
-Anweisung den Score anhand definierter Schwellenwerte und gibt eine entsprechende Bewertung zurück. Ist der Score größer als 80, lautet das Ergebnis „Sehr gut“, bei einem Wert über 60 wird „Gut“ ausgegeben, über 40 erscheint „Ausreichend“ und bei allen niedrigeren Werten wird „Nicht bestanden“ angezeigt. Diese kompakte Logik verdeutlicht, wie effizient Power Fx genutzt werden kann, um benutzerabhängige Ausgaben zu erzeugen und dynamische Entscheidungen in Apps zu treffen.
Power Apps |
With(
{
Score: Value(tiNumber.Text)
},
If(
Score > 80,
"Sehr gut",
Score > 60,
"Gut",
Score > 40,
"Ausreichend",
"Nicht bestanden"
)
)
Prüfen einer Booleschen Variablen
In Power Apps begegnet dir oft die Herausforderung, mit verschiedenen Zuständen von Variablen umzugehen: wahr, falsch und leer. Besonders spannend wird es, wenn du Bedingungen mit dem If()
-Befehl abbilden willst. Der folgende Ausdruck ist ein geniales Beispiel für den Umgang mit genau diesen Zuständen:
Variante 1: Die klassische Reihenfolge
If(
bool,
"Wahr",
IsBlank(bool),
"Leer",
!bool,
"Falsch"
)
Hier arbeitest du mit verschachtelten Bedingungen direkt im If()
. Wenn bool
wahr ist, kommt „Wahr“ raus. Wenn bool
leer ist, greift IsBlank(bool)
und du bekommst „Leer“. Wenn !bool
wahr ist, also bool = false
, dann kommt „Falsch“.
Diese Struktur ist extrem robust, weil sie jeden Fall abdeckt, ohne dass du unnötig verschachtelst. Sie wirkt auf den ersten Blick etwas unübersichtlich, ist aber performant und gut lesbar, wenn man sich daran gewöhnt hat.
Variante 2: Klarere Struktur mit Vergleich
If(
bool,
"Wahr",
bool = false,
"Falsch",
"Leer"
)
In dieser Variante gehst du direkter ran. Du fragst explizit: Ist bool = true
? Dann „Wahr“. Ist bool = false
? Dann „Falsch“. Alles andere ist dann „Leer“.
Diese Schreibweise ist lesbarer, aber sie birgt die Gefahr, dass Blank()
als „Leer“ durchgeht, obwohl du das nicht explizit abfragst. Das kann in komplexeren Szenarien zu Fehlern führen.
Was solltest du daraus mitnehmen?
Wenn du in Power Fx mit booleschen Werten und Blank()
arbeitest, dann achte immer darauf, dass du alle drei Zustände klar voneinander trennst. Am elegantesten lässt sich das mit Variante 1 umsetzen. Sie wirkt auf den ersten Blick komplexer, aber sie ist explizit, stabil und gut wartbar.
Gerade wenn du Formulare baust oder Logik für Steuerungen entwickelst, willst du sichergehen, dass du auf leere Werte korrekt reagierst. Power Fx behandelt Blank()
nämlich nicht wie false
, sondern als dritten, eigenständigen Zustand.
Fazit: Wenn du solche Logik einmal sauber modelliert hast, kannst du dir viele seltsame Fehler und stundenlanges Debuggen sparen. Und das ist doch genau das, was wir wollen, oder?
Power Apps |
With(
{bool: true},
Concatenate(
"Das Ergebnis ist " & If(
bool,
"Wahr",
IsBlank(bool),
"Leer",
!bool,
"Falsch"
) & Char(10),//-> Funktioniert
"Das Ergebnis ist " & If(
bool,
"Wahr",
bool = false,
"Falsch",
"Leer"
) & Char(10),//-> Funktioniert
"Das Ergebnis ist " & If(
bool,
"Wahr",
If(
bool = Blank(),
"Leer",
"Falsch"
)
)// -> Funktioniert aber naja..
)
)
Kleine Abweichungen in der Reihenfolge von Bedingungen können in Power Fx zu falschen Ergebnissen führen, da die If
-Funktion Bedingungen von oben nach unten prüft und beim ersten zutreffenden Fall stoppt. Im gezeigten Beispiel wird zuerst varIfStatement
und anschließend !varIfStatement
überprüft. Ist die Variable jedoch leer (Blank()
), wird diese oft als „falsch“ interpretiert, wodurch fälschlicherweise „Falsch“ statt „Leer“ ausgegeben wird. Die korrekte Erkennung von Blank()
scheitert, da die Bedingung nie erreicht wird. Eine präzise Reihenfolge der Bedingungen ist daher entscheidend, um logische Fehler zu vermeiden.
With(
{bool: true},
Concatenate(
"Das Ergebnis ist " & If(
bool,
"Wahr",
!bool,
"Falsch",
IsBlank(bool),
"Leer"
),// -> Falsche Reihenfolge
"Das Ergebnis ist " & If(
bool,
"Wahr",
!bool,
"Falsch",
"Leer"
)//-> Funktioniert nicht bei Blank()
)
)
Vorteile der If-Funktion
-
Ideal für komplexe Bedingungen mit mehreren Prüfungen.
-
Flexibel, da beliebig viele Bedingungen hinzugefügt werden können.
-
Gut geeignet für einfache bis mittelkomplexe Entscheidungslogik.
Die Switch-Funktion: Elegante Mehrfachvergleiche
Switch(
Formel,
Übereinstimmung1,
Ergebnis1
[, Übereinstimmung2, Ergebnis2, ...
[, Standardergebnis ]
]
)
-
Formel: Der Ausdruck, dessen Ergebnis mit den angegebenen Werten verglichen wird.
-
Übereinstimmung: Die Werte, die mit dem Ergebnis der Formel verglichen werden.
-
Ergebnis: Der Wert, der zurückgegeben wird, wenn eine Übereinstimmung gefunden wird.
-
Standardergebnis (optional): Der Wert, der zurückgegeben wird, wenn keine Übereinstimmung gefunden wird.
Beispiel
Score bewerten
In Power Fx wird mit der folgenden Formel eine Bewertung von numerischen Werten vorgenommen, wobei diesmal die Switch
-Funktion anstelle von If
verwendet wird. Zunächst wird mit With
eine temporäre Variable Score
definiert, die den numerischen Wert aus dem Texteingabefeld (tiNumber.Text
) speichert. Die Value()
-Funktion konvertiert den Text in eine Zahl. Die zentrale Logik basiert auf Switch(true, ...)
, was bedeutet, dass die nachfolgenden Bedingungen so lange geprüft werden, bis die erste als „wahr“ bewertet wird. Dabei wird der Score
in vordefinierte Bereiche eingeordnet: Ist der Wert größer als 80, wird „Sehr gut“ ausgegeben. Liegt der Score zwischen 61 und 80, erscheint „Gut“, für Werte von 41 bis 60 „Ausreichend“ und bei allen niedrigeren Scores „Nicht bestanden“. Diese Struktur mit Switch
ist besonders nützlich, wenn mehrere Bedingungen geprüft werden müssen, da sie den Code lesbarer macht und eine klare Trennung der Bereiche ermöglicht. So lässt sich die Logik effizient abbilden und leicht anpassen, etwa wenn weitere Bewertungsstufen hinzugefügt werden sollen.
Power Apps |
With(
{
Score: Value(tiNumber.Text)
},
Switch(
true,
Score > 80,
"Sehr gut",
Score > 60 && Score <= 80,
"Gut",
Score > 40 && Score <= 60,
"Ausreichend",
"Nicht bestanden"
)
)
Vorteile der Switch-Funktion
-
Sauberere Syntax bei Vergleichen mit mehreren festen Werten.
-
Einfach zu lesen und zu warten, besonders bei langen Listen von Bedingungen.
-
Effizienter für einfache Vergleiche mit vielen Optionen.
Fazit
Sowohl If
als auch Switch
sind unverzichtbare Werkzeuge in Power Fx. Sie ermöglichen es, Entscheidungslogik klar und effizient zu gestalten. Während If
durch seine Flexibilität bei komplexen Bedingungen glänzt, überzeugt Switch
durch einfache Syntax bei Mehrfachvergleichen. Die Wahl zwischen beiden hängt letztlich von Ihrem spezifischen Anwendungsfall ab.
Nutzen Sie diese Funktionen, um Ihre Power Apps noch intelligenter und benutzerfreundlicher zu gestalten!