Variable wird bei jedem Reload weitergezählt

Hallo Team, ich bin schier am Verzweifeln. Ich werte SKUs aus. In einem Mapper habe ich sie zunächst sortiert. Im nächsten Mapper habe ich eine Formel, die in jeder Zeile prüft, ob die SKU dieselbe ist wie in der Zeile zuvor - wenn ja, wird ein fortlaufender Wert an die SKU angehängt. Das Ergebnis wäre - und so zeigt es der Mapper auch an:


image

Hier kann ich auch sooft ich will reloaden - es bleibt korrekterweise bei der 1.

In einem nächsten Schritt muß ich auswerten, wie hoch die höchste Iteration ist, weil die Tabelle theoretisch auch +2,+3 usw. für eine SKU aufweisen könnte. Also gruppiere ich über die SKU und laß mir bei "Iteration" die letzte Zeile anzeigen. Und das resultiert darin, daß da ständig eins addiert wird.


So sieht das aus:


image

Der Vorschauwert rechts sagt korrekt "1", aber in der Tabellenvorschau ist schon "5" zu sehen. Dreimal auf "Vorschau" geklickt, steht der Wert schon auf 8 (Anm. mittlerweile habe ich einen einfachen Mapper vor den mit der Gruppierung geschaltet, weil ich dachte, daß es daran liegen würde, daher sieht man in den Screenshots keine Gruppierung):


image


Okay, dachte ich, man kennt das ja, daß die Vorschau zuweilen von den echten Daten abweicht. Allerdings: Ein weiterer Step soll den Wert in einen Datastore schreiben, und was kommt da an? Eine 2.

image


Da muß aber eine 1 stehen - warum klappt das nicht?


Gruß Micha

Hallo Micha,


hattest du schonmal versucht die momentane Zeilennummer abzufragen und falls diese die erste Zeile ist, den Wert in der Variable auch auf 1 eins zu setzen?


Viele Grüße

Stefan

Danke für die Idee, Stefan, ich habe es aber mittlerweile gelöst bekommen. Ich hatte da ein paar Variablen definiert, die ich nun in <#else>-Fällen auf '' gesetzt habe. Damit werden sie offenbar dann auch nicht weitergezählt. In sofern erstmal "Entwarnung", scheint so zu klappen.

Hallo Micha,


ich kann leider nicht ganz genau erkennen wo die Ursache für das Problem lag. In den meisten Fällen sollte es helfen den 'cacheMode' im Mapper mit dem getVaraiable bzw. setVariable Skript zu aktivieren.

Wenn du folgende Reihenfolge verwendest solltest du das erwartete Ergebnis erhalten:


  1. Mapper (Sortierung nach SKU)
  2. Mapper (mit dem getVaraiable Skript, cacheMode aktiviert)
  3. Mapper (Gruppierung)


Hintergrund: Der "Speicher" für den die Variablen bleibt nach dem durchlaufen (Ausführung) des Mappers mit dem Skript (2.) noch erhalten. Wenn der Mapper mit nicht aktivierten cacheMode mehrfach durchlaufen wird (mehrfache Ausführung der Vorschau im Mapper mit der Gruppierung, Step 3), dann werden die Variablen immer weiter hochgezählt. Wenn der cacheMode aktiviert ist, wird das Spreadsheet nach dem ersten Durchlauf "gespeichert" und dieses Ergebnis dann auch immer von den folgenden Steps verwendet.


Viele Grüße

Torsten

Hi Torsten,


danke für diese Info - man lernt nie aus. Jetzt weiß ich endlich, wozu der cache mode dient ;-)


Ansonsten hatte ich das Problem selbst beheben können, indem ich die Zählvariable durch eine <#else>-Anweisung auf '' gesetzt hatte, aber wie auch immer: Probiere ich bei der nächsten Gelegenheit mal mit dem cache.


Gruß Micha