folgendes Thema: Ich möchte, dass die ersten X Ergebnisse eines Mappers eine bestimmte Flag in einer Spalte in Form von „isTopseller = true“ bekommen.
Die Idee ist, das Spreadsheet erst bspw. absteigend nach Umsatz zu sortieren und dann irgendwie die ersten X Zeilen entsprechend zu markieren. Der erste Gedanke war, hier mit einer Art Index zu arbeiten und alle Einträge „kleiner X“ entsprechend als Topseller zu markieren. Aber wenn ich mich richtig erinnere, ist das mit dem Index und hochzählen nicht ganz so trivial?
In einem anderen Flow arbeiten wir mit einem Hochzählen von Zeilen auf Basis von Bedingungen („ist letzte Bestellnummer=aktuelle Bestellnummer?“), käme hier sowas auch in Frage?
<#-- Zähler als Freemarker Variable initialisieren -->
<#assign counter = 0>
<#if getVariable("counter")??>
<#-- Wenn Varible 'counter' vorhanden, dann Wert übernehmen -->
<#assign counter = getVariable("counter")>
</#if>
<#-- Letzte order id als Freemarker Variable initialisieren -->
<#assign last_Bestellnr = "">
<#if getVariable("last_Bestellnr")??>
<#-- Wenn Varible 'last_Bestellnr' vorhanden, dann Wert übernehmen -->
<#assign last_Bestellnr = getVariable("last_Bestellnr")>
</#if>
<#if last_Bestellnr != Bestellnr>
<#-- Wenn bestellnr in Zeile ungleich letzte gepseicherte order id (voherige Zeile) -->
<#assign counter = 0>
<#else>
<#-- sonst: hochzählen -->
<#assign counter += 1>
</#if>
<#-- Wert des Counters ausgeben -->
${counter!}
<#-- aktuelle Werte speichern -->
${setVariable("last_Bestellnr",Bestellnr!)}
${setVariable("counter",counter)}
Gruß
Marc
also wenn ich jetzt nicht auf dem Schlauch stehe, könnte es so funktionieren
Spreadsheet entsprechend nach der Spalte sortieren.
Hinter dem Spreadsheet ein weiteres Spreadsheet hängen (wichtig, direkt in einem funktioniert es nicht)
Im zweiten Spreadsheet in einer Spalte folgendes ins Wert-Feld packen: <#if (_rowNumber! <= 10)>Topseller</#if> (Als Beispiel für die ersten 10 Spalten. ${_rowNumber} gibt dir dir für jede Zeile die aktuelle Zeilennummer zurück)
Danke @synesty-Benjamin , das bringt mich der Lösung ein Stück weiter. Habe nun die weitere Herausforderung, dass die Betrachtung der Topseller kategoriespezifisch erfolgen muss. Ich müsste daher erst nach Kategorie und dann nach Umsatz sortieren und bei Kategoriewechsel müsste die Zählung „Topseller <= 10“ wieder bei 0 anfangen.
Also anstatt der row_position bräuchte ich eigentlich doch einen Counter, der die Häufigkeit von Einträgen zählt und wenn die Einträge sich ändern, wieder resettet wird. So etwa:
ah ok alles klar, dass macht es tatsächlich um einiges komplexer ^^
Hier ein Vorschlag mit dem Hinweis: Prüfe bitte am Ende nochmal genauer ob es auch wirklich das tut was es tuen soll. Das mit dem Sortieren ist (unter der Haube) ein wenig tricky.
Ein Mapper zum Sortieren einrichten, dort eine Hilfsspalte hinzufügen und in diese dann ins Wert-Feld ${Kategorie!}_${Umsatz!} und nach dieser Spalte Absteigend sortieren. (Bitte auch zuerst Kategorie und dann Umsatz, sonst hatte in deinem Beispiel die Sortierung nicht funktioniert … siehe obigen Hinweis).
Danach ein Mapper klemmen und dort eine neue Spalte „Position“ mit dem Wert-Feld <#assign count = getVariable(Kategorie!, 0) + 1>${count}${setVariable(Kategorie!, count)}
Das ganze geht allerdings „nur“ bis zu maximal 1000 unterschiedlichen Kategorien.
Probier das gerne mal aus und wie geschrieben schau dir bitte auch ein paar Zeilen mehr an, ob das so passt, da ohne Gewähr.
Auf den ersten Blick sieht das TOP aus, danke @synesty-Benjamin ! Ich mach’ nochmal ein paar Abgleiche, die ersten Tests sind aber genau wie ich es gebraucht habe.