Problem mit einer Spaltenformel zur Zuordnung von ProduktionsphasenHallo zusammen,
Ich versuche, eine Spaltenformel zu schreiben, die den Datumsunterschied zwischen zwei Zeilen berücksichtigt. Wenn >= ein bestimmter Wert (in diesem Fall 4 Tage) ist, sollte die Spalte den Phasenwert verringern. Wenn die Datumsdifferenz <4 ist, sollte der vorherige Phasenwert beibehalten werden. Ich habe in der Formel zwei lokale Variablen definiert: Phase und MinDaysbreak, also die Mindesttage zwischen den Phasen (4). Die Spalte „Datum/Uhrzeit:“n ist die Datumsspalte, die die For()-Schleife durchläuft.

Meine Formel sieht wie folgt aus:

Und der JSL-Code für die Formel lautet wie folgt:
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
Ich erhalte keine Fehlermeldungen für die Formel, die Formel wird nicht unterdrückt, aber die Spalte ist noch leer. Für die letzte Zeile erhalte ich immer noch nichts, selbst wenn ich die erste else-Anweisung im ersten If() entferne, und der letzte Eintrag für die Spalte sollte 9 sein, da dies die lokale Variablenphase ist. Ich weiß, dass es 9 Phasen gibt.
Ich bin mir nicht sicher, was ich falsch mache, aber es würde mich nicht wundern, wenn es ein einfacher Fehler wäre, den ich übersehe.
Danke für jede Hilfe!,
DS
Erweiterte statistische ModellierungAutomatisierung und SkripterstellungDatenexploration und -visualisierungErgebnisse teilen und kommunizierenBetreff: Problem mit einer Spaltenformel zur Zuweisung von ProduktionsphasenDie Spalte ist leer, da die Funktion For() keinen Wert zurückgibt. Versuchen Sie, diesen Code in den Formeleditor einzufügen:
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)Ich denke, es wird wie beabsichtigt funktionieren. Beachten Sie diese Änderungen:
– Die zusätzliche Phase , die den Wert der aktuellen Zeile festlegt (nachdem er in der For-Schleife berechnet wurde). Ohne dies erhalten Sie eine leere Spalte.
– Um korrekt zu funktionieren, sollten Sie nicht über alle Zeilen iterieren, sondern nur bis zur aktuellen Zeile mit Row() . Andernfalls erhalten Sie für jede Zeile den gleichen Wert.
– Sie benötigen einen Index für beide Datumsangaben, um sicherzustellen, dass Sie immer mit der nächsten Zeile vergleichen können. Ohne ist es schwierig, das Ergebnis vorherzusagen (hängt von den Daten ab).
Ich habe auch initial i als lokalen Parameter definiert, aber das ist meiner Meinung nach nicht notwendig.
Allerdings ist die Verwendung einer for-Schleife in Spaltenformeln recht ungewöhnlich. Wenn Sie einen großen Datensatz haben, kann es sehr ineffizient sein, die Tabelle zu durchlaufen, um den Wert für jede Zeile festzulegen. Es gibt andere Möglichkeiten, dieses Problem zu lösen, mit der Spaltenformel oder JSL.
/MS