Suche

PowerFx – Arbeiten mit Collections

Themen

Collections: Der ultimative Überblick

Wenn du mit Power Apps arbeitest, kommst du an Collections nicht vorbei. Sie sind extrem praktisch, wenn du Daten zwischenspeichern, verarbeiten oder transformieren willst – vor allem bei komplexeren App-Logiken oder wenn du mit mehreren Datensätzen gleichzeitig hantierst. Aber so hilfreich sie auch sind: Der Umgang mit Collections kann anfangs ziemlich verwirrend sein.

In diesem Beitrag findest du eine geballte Sammlung an Funktionen, Tricks und Beispielen rund um Collections. Egal ob du gerade erst mit Power Apps startest oder schon Erfahrung hast – hier lernst du, wie du Collections effizient und gezielt einsetzt. Von der Erstellung über das Filtern bis hin zum gezielten Aktualisieren von Einträgen: Ich zeige dir, worauf es wirklich ankommt.

Tabellenindex aktualisieren

In Power Apps ist es gar nicht so einfach, eine laufende Nummerierung (Index) für Zeilen in einer Collection hinzuzufügen – zumindest nicht mit Bordmitteln. Diese Funktion zeigt dir eine clevere Methode, wie du genau das trotzdem hinbekommst.

Power Apps

Ungroup(
    ForAll(
        Sequence(CountRows(colLineItems)),
        UpdateIf(
            colLineItems,
            id = Last(
                FirstN(
                    colLineItems,
                    Value
                )
            ).id,
            {index: Value}
        )
    ),
    Value
)

Was passiert hier genau?

Zuerst erzeugt Sequence(CountRows(colLineItems)) eine Liste von Zahlen – eine Art Schleife von 1 bis zur Anzahl der Zeilen in colLineItems.

Dann wird innerhalb von ForAll(...) jede Zahl (Value) verwendet, um die entsprechende Zeile in colLineItems zu identifizieren. Das passiert durch:

  • FirstN(colLineItems, Value) nimmt die ersten Value Zeilen

  • Last(...) holt sich davon die letzte – also genau die Zeile an der Position Value

  • Über UpdateIf(...) wird dann diese Zeile aktualisiert und bekommt ein neues Feld index mit dem Wert Value

Das Ganze wird in einer strukturierten Form zurückgegeben (ForAll gibt eine Tabelle zurück), aber weil ForAll(...) hier mit einer Sequence arbeitet, kommt ein verschachteltes Ergebnis raus. Genau deshalb wird am Ende noch Ungroup(...) genutzt, um das Ganze wieder in eine flache Tabelle zu bringen.

Das Resultat: Deine Collection colLineItems hat jetzt eine neue Spalte index, die jeder Zeile eine eindeutige Reihenfolge zuweist – von 1 bis n. Perfekt für Sortierung, Anzeige in Galerien oder wenn du später Zeilen gezielt manipulieren willst.

Duplikate entfernen

Da Distinct nur ein einzelnes Kriterium – also einen Ausdruck oder eine Spalte, auf dessen Basis die Duplikate entfernt werden, ist diese Funktion ein Paradebeispiel dafür, wie man mit Power Apps gezielt Duplikate aus einer Datensammlung entfernt – und das nicht nur auf Basis eines einzelnen Werts, sondern kombiniert. Schauen wir uns die Funktion im Detail an:

Power Apps

With(
    {
        colDaten: Table(
            {
                ID: 1,
                Vorname: "Max",
                Nachname: "Muster"
            },
            {
                ID: 2,
                Vorname: "Anna",
                Nachname: "Beispiel"
            },
            {
                ID: 3,
                Vorname: "Max",
                Nachname: "Muster"
            },// Duplikat
            {
                ID: 4,
                Vorname: "Lisa",
                Nachname: "Test"
            },
            {
                ID: 5,
                Vorname: "Anna",
                Nachname: "Beispiel"
            }// Duplikat
        )
    },
    ForAll(
        Distinct(
            AddColumns(
                colDaten,
                ConcatKey,
                Concatenate(
                    Vorname,
                    Nachname
                )
            ),// Bei Bedarf Schlüssel anpassen
            ConcatKey
        ),
        First(
            Filter(
                colDaten,
                Concatenate(
                    Vorname,
                    Nachname
                ) = Value
            )
        )
    )
)

Im ersten Schritt wird mit With(...) eine lokale Variable colDaten definiert, die eine Tabelle mit mehrfach vorhandenen Kombinationen aus Vorname und Nachname enthält.

Dann passiert Folgendes:

  1. AddColumns(…): Fügt zu jeder Zeile eine neue Spalte ConcatKey hinzu, in der Vorname und Nachname zu einem String kombiniert werden, z. B. „MaxMuster“.

  2. Distinct(…, ConcatKey): Findet alle eindeutigen Kombinationen des Schlüssels ConcatKey. Damit identifizieren wir die verschiedenen Personen anhand von Vor- und Nachname.

  3. ForAll(…): Für jede dieser eindeutigen Kombinationen wird im Original-Datensatz (colDaten) mit Filter(...) nach der passenden Zeile gesucht.

  4. First(…): Gibt dann jeweils nur die erste Zeile pro Kombination zurück.

Das Endergebnis: Du bekommst eine neue Sammlung, in der jede Kombination aus Vorname und Nachname nur noch einmal vorkommt – und das ganz ohne externe Datenquelle oder SQL-Abfrage.

Besonders hilfreich ist dieser Ansatz, wenn du in einer Galerie nur eindeutige Personen anzeigen willst, obwohl in der Datenquelle doppelte Einträge vorkommen.

Berechende Spalte hinzufügen

Die Funktion AddColumns() ist eine super Möglichkeit, um deine bestehenden Daten um zusätzliche berechnete Spalten zu erweitern – ganz ohne zusätzliche Datenquelle. Du kannst dir das wie eine Art Excel-Formel vorstellen, nur eben direkt im Power Apps-Formelbereich.In diesem konkreten Beispiel, wird zuerst mit der Funktion Table(…) eine temporäre Tabelle erzeugt, die zwei Zeilen und jeweils zwei Spalten hat: Spalte1 und Spalte2. Die erste Zeile enthält die Werte 1 und 2, die zweite 3 und 4. Die Funktion AddColumns(…) nimmt diese Tabelle und fügt eine neue Spalte mit dem Namen „Produkt“ hinzu. Für jede Zeile wird dann der Wert in Spalte1 mit dem in Spalte2 multipliziert. Diese Methode ist vor allem dann praktisch, wenn du dynamisch zusätzliche Informationen berechnen willst, z. B. Zwischensummen, Statuswerte oder Formatierungen – und das direkt in deiner App, ohne zuerst etwas in der Datenquelle verändern zu müssen.

Power Apps

AddColumns(
        Table(
            { Spalte1: 1, Spalte2: 2 },
            { Spalte1: 3, Spalte2: 4 }
        ),
        "Produkt", 
        Spalte1 * Spalte2
    )

noch mehr interessante Beiträge

Nach oben scrollen