top of page

Power Apps Hacks - Row Number mit Power Apps generieren

  • Autorenbild: kim
    kim
  • 24. Jan. 2022
  • 5 Min. Lesezeit

Aktualisiert: 31. Mai 2025

💡 Hinweis in eigener Sache

Du willst Power Apps & Power Automate von Grund auf lernen? In meinem Onlinekurs „Lisa’s Challenge – Zeiterfassung mit Power Apps & Automate“ begleite ich dich Schritt fĂŒr Schritt beim Aufbau deiner ersten Business-App.

 👉 Jetzt Kurs ansehen

 🎁 Tipp: Trag dich hier ein und erhalte den Kurs kostenlos! Gilt nur bis 31.08.25!



Herzlich willkommen und Moin Moin zu diesem Beitrag in der Videoserie "Power Apps Hacks".


In dieser Serie behandeln wir einen bunten Blumenstrauß an Power Platform Tipps, Tricks und Funktionen.

In diesem Beitrag zeigen wir Euch, wie Ihr mit Power Apps eine Zeilennummerierung innerhalb von Power Apps erzeugen könnt.


Wenn Ihr Ideen fĂŒr diese Videoreihe habt, hinterlasst uns einfach einen Kommentar unter dem Video!


Im Video stellen wir einen Use Case vor. In diesem Blogbeitrag geben wir dazu nochmal eine Schritt-fĂŒr-Schritt-Anleitung, wie Ihr alle drei Use Cases nachbauen könnt.




Use Case: Row Number mit Power Apps generieren

Oftmals möchten wir innerhalb unserer Power App eine Art "lokale" Nummerierung fĂŒr Elemente generieren. In unserem Beispiel haben wir folgenden Anwendungsfall: Wir haben einen Katalog mit 20-25 Fragen. Diese Fragen sind alle verschiedenen Themen zugeordnet. Die einzelnen Themen kommen im Fragenkatalog mehrfach vor. Es gibt insgesamt 13 verschiedene Themen. Innerhalb unserer Power App Anwendung wollen wir den Fragenkatalog nach Themenblöcken "abarbeiten" können. Dabei sollen immer nur die Fragen angezeigt werden, die zum aktuellen Themenblock gehören.


Galerie fĂŒr die Fragen erstellen

Im ersten Schritt erstellen wir eine Galerie "galFragen", in der wir unsere spÀteren Fragen ausgeben wollen.

In diese Galerie fĂŒgen wir unsere Datenquelle fĂŒr den Fragenkatalog ein und formatieren die Ausgabe nach Belieben z.B. in folgender Art:


Header und Navigation fĂŒr Themen einfĂŒgen

Nachdem wir unseren Fragenkatalog sehen können, wollen wir durch die einzelnen Themen navigieren können. DafĂŒr bauen wir eine kleine Navigationsleiste unterhalb unseres Fragenkataloges und fĂŒgen oberhalb der Galerie einen Lable ein, der dem Nutzer spĂ€ter das aktuell angewĂ€hlte Thema ausgibt.



Collection erstellen zur Sammlung der Themen

Nachdem wir unsere UI soweit fertiggestellt haben, benötigen wir die Collection / Sammlung unserer Themen. Wir mĂŒssen also aus unserem Fragenkatalog alle Themen, allerdings nur einmal, heraussammeln.

DafĂŒr nutzen wir die Funktion Distinct() von Power Apps. Distinct gibt uns die "einzigartigen" Werte aus einer Tabelle zurĂŒck. Ein Beispiel wĂ€re:


Tabelle "Fahrzeugbestand"

Hersteller

Modell

Kilometerstand

Audi

80

348298

Mercedes-Benz

W201

928375

Mercedes-Benz

W124

345678

Mercedes-Benz

W202

​876564

BMW

i3

34565

Tabelle Distinct(Fahrzeugbestand)

Result

Audi

Mercedes-Benz

BMW

Um die Sammlung der Themen ausfĂŒhren zu können, fĂŒgen wir zunĂ€chst einen Button "btnDatenAbrufen" ein.

Die OnSelect-Eigenschaft fĂŒllen wir mit folgendem Code:


1. Alle Themen sammeln

In unserem konkreten Beispiel sieht der Code zur Erstellung der Sammlung mit allen Themen wie folgt aus:

//Sammeln aller "einzigartigen" Themen aus dem Fragenkatalog
ClearCollect(
    colThemenOhneRowNumber,
    Distinct(
        CodeReviewFragenkatalog,
        Thema
    )
)


2. Nummerierung einfĂŒgen

Nachdem wir eine Sammlung aller Themen haben, hat diese Sammlung ĂŒber die Funktion "Distinct()" jedoch nur eine Spalte mit dem Namen Result. Wir wollen nun noch die Nummerierung der Themen in aufsteigender Reihenfolge vornehmen. DafĂŒr verwenden wir den folgenden Code:


Clear(colThemenMitRowNumber);
ForAll(colThemenOhneRowNumber, 
       Collect(colThemenMitRowNumber,
               Last(FirstN(AddColumns(colThemenOhneRowNumber,
                                "RowNumber",
                                CountRows(colThemenMitRowNumber)+1
                           ), 
                           CountRows(colThemenMitRowNumber)+1
                    )
               )    
       )
)

Hintergrund zum Code

Mit der AddColumns-Funktion fĂŒgen wir der Themen-Sammlung die Nummerierung an. Der Wert wird bestimmt, indem mit CountRows() die Anzahl der zu dem Zeitpunkt gesammelten Elemente gezĂ€hlt wird. Da wir das Collect() dank der ForAll-Funktion fĂŒr alle Elemente in colThemenOhneRowNumber durchfĂŒhren, erhöht sich der mit CountRows() ermittelte Wert. Mit der FirstN-Funktion verhindern wir, dass wir jedes Mal alle Themen sammeln → Dann hĂ€tten wir in unserem Fall 169 (13x13) EintrĂ€ge. Nun benötigen wir noch eine Last()-Funktion, um immer nur einen, und zwar den letzten, Wert der Sammlung hinzuzufĂŒgen. Ohne diese Funktion wĂŒrde sich das N der FirstN-Funktion entsprechend der Anzahl der bereits gesammelten Werte durch CountRows() erhöhen. Die RowNumber wĂŒrde wie folgt in die Sammlung geschrieben werden:

  1. Schleife: CountRows(colThemenMitRowNumber) = 0 + 1 = 1

  2. Schleife: CountRows(colThemenMitRowNumber) = 1 + 1 = 2 [Summiert mit den bisherigen 1 = 3]

  3. Schleife: CountRows(colThemenMitRowNumber) = 3 + 1 = 4 [Summiert mit den bisherigen 3 = 7]

  4. Schleife: CountRows(colThemenMitRowNumber) = 7 + 1 = 8 [Summiert mit den bisherigen 7 = 15]

  5. Schleife: CountRows(colThemenMitRowNumber) = 15 + 1 = 16 [Summiert mit den bisherigen 15 = 31]

Da wir das FirstN() auf unsere ursprĂŒngliche Sammlung colThemenOhneRowNumber beziehen, in welcher immer nur 13 Werte vorhanden sind, werden ab der 5. Schleife bis zur 13. Schleife jedes Mal 13 Werte hinzugefĂŒgt und die RowNumber um 13 hochgeschrieben. Entsprechend viele EintrĂ€ge werden dann auch fĂŒr colThemenMitRowNumber gesammelt (Beispiel: Nach der 3. Schleife haben wir 1 Eintrag mit RowNumber 1, 2 EintrĂ€ge mit RowNumber 2 und 4 EintrĂ€ge mit Rownumber 4). Um nur einen Wert zu sammeln, unzwar jedes Mal den neuesten Wert, wird mit der Last()-Funktion der letzte Eintrag zur Sammlung hinzugefĂŒgt. Somit wird in jeder Schleife nur 1 Eintrag hinzugefĂŒgt und die RowNumber kann sich nur um 1 erhöhen. Damit kommen wir auf unsere 13 EintrĂ€ge mit der richtigen RowNumber.

Im Ergebnis erhalten wir nun eine Tabelle mit zwei Spalten, die in unserem Fall folgendermaßen aussieht:

Der gesamte OnSelect-Code des Buttons sieht dann wie folgt aus:



Navigation durch die Themen ermöglichen

Im nĂ€chsten Schritt wollen wir unsere Navigation "mit Leben" fĂŒllen und in unserer Galerie nur die Fragen auswĂ€hlen, die der Nutzer ĂŒber die Navigation grade ausgewĂ€hlt hat.


Wir verwenden dafĂŒr die UpdateContext()-Funktion und schreiben mit jedem OnSelect auf einen der beiden Icons einen neuen Wert in diese Variable.


Um "VorwĂ€rts" durch die Themen zu navigieren mĂŒssen wir auf dem OnSelect des "Vor-Icons" folgenden Code verwenden:

//Zum nÀchsten Thema gehen -> Row Number +1 
UpdateContext(
    {
        locThema: LookUp(
            colThemenMitRowNumber,
            RowNumber = locThema.RowNumber + 1
        )
    }
)

Mit jedem Klick wird die Row Number also um 1 erhöht und wir springen somit durch die einzelnen Themen. Damit unser Nutzer nicht "endlos" diesen Wert erhöhen kann, fĂŒllen wir den DisplayMode unseres "Vor-Icon" mit folgendem Code:


//Wenn der Nutzer beim letzten Thema angekommen ist, ist der Icon disabled, sodass nicht endlos erhöht werden kann
If(
    
    //Wenn die aktuelle RowNumber dem maximalen Wert fĂŒr RowNumber in der collection colThemenMitRowNumber, ist der Nutzer beim letzten (max) Thema angekommen und er soll den Wert nicht mehr erhöhen können.
    
    locThema.RowNumber = Max(colThemenMitRowNumber,RowNumber),
    
    DisplayMode.Disabled,
    DisplayMode.Edit
)

Dasselbe wiederholen wir fĂŒr unseren "ZurĂŒck-Icon", nur dass wir statt auf dem OnSelect jedes Mal um 1 zu erhöhen, den Wert um 1 verringern.

//Zum vorherigen Thema gehen -> Row Number -1 
UpdateContext(
    {
        locThema: LookUp(
            colThemenMitRowNumber,
            RowNumber = locThema.RowNumber - 1
        )
    }
)

FĂŒr den DisplayMode unseres "ZurĂŒck-Icon" nehmen wir nun statt der Max()-Funktion, die Min-Funktion.

//Wenn der Nutzer beim ERSTEN Thema angekommen ist, ist der Icon disabled, sodass nicht endlos verringert werden kann
If(
    
    //Wenn die aktuelle RowNumber dem minimalen Wert fĂŒr RowNumber in der collection colThemenMitRowNumber, ist der Nutzer beim ersten (min) Thema angekommen und er soll den Wert nicht mehr verringern.
    
    locThema.RowNumber = Min(colThemenMitRowNumber,RowNumber),
    
    DisplayMode.Disabled,
    DisplayMode.Edit
)

Aktuelles Thema und Fortschritt ausgeben

Im letzten Schritt wollen wir unseren Header, in dem bis jetzt nur "Thema" steht, mit einem Wert fĂŒllen und dem Nutzer in der Navigationsleiste eine Fortschrittsanzeige "Thema X von XX" ausgeben.


FĂŒr den Header können wir die Kontextvariable "locThema" verwenden und in die Text-Eigenschaft des Lables einfach den Code einfĂŒgen:

locThema.Result

FĂŒr die Fortschrittsanzeigen verwenden wir in der Text-Eigenschaft folgenden Code:

"Thema "&locThema.RowNumber&" von "&CountRows(colThemenMitRowNumber)

In der Anwendung sieht unsere Navigation dann wie folgt aus:


Filter in der Galerie fĂŒr die Fragen setzen

Im allerletzten Schritt mĂŒssen wir nun noch den Filter in unserer Galerie anpassen, schließlich wollten wir immer nur die Fragen angezeigt bekommen, die zum aktuell gewĂ€hlten Thema gehören.


Die Items-Eigenschaft unserer "galFragen" Galerie passen wir wie folgt an:

Filter(CodeReviewFragenkatalog,Aktiv, locThema.Result = Thema)

Im Endergebnis können wir mit der Zeilennummerierung

  • eine logische Unterteilung nach Themenblöcken fĂŒr den Nutzer vornehmen, die Schritt-fĂŒr-Schritt bearbeitet werden können,

  • die Navigation (Vor- und ZurĂŒck) einfach und dynamisch ĂŒber die Zeilennummer ermöglichen &

  • dem Nutzer die Fortschrittsanzeige ausgeben, wie weit er bereits im Fragenkatalog fortgeschritten ist.







 
 
 

Kommentare


bottom of page