So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenHallo zusammen,
Ich suche nach einer Formelspalte, deren Elemente davon abhängen, dass mindestens 10 aufeinanderfolgende Zeilen einer anderen Spalte einen Schwellenwert vollständig ausfüllen. Bitte beachten Sie das beigefügte Bild und die Daten. Dazu gehört auch die erforderliche Spalte „Correct failer region“.
Bitte um Hilfe.
Danke HSS

SkripterstellungBetreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenIch würde den Algorithmus vielleicht in drei Teile aufteilen:
- Erhöhen Sie den Zähler, wenn genügend Werte über 750 vorhanden sind (setzen Sie möglicherweise einige Support-Variable(n))
- Zähler erhöhen, wenn auch nur ein Wert unter 750 NACHHER liegt und dies nur EINMAL für jeden Schritt 1. Erhöhen (evtl. Unterstützungsvariable(n) setzen)
- Zähler nicht erhöhen (möglicherweise Unterstützungsvariable(n) setzen)
Dies könnte am einfachsten (vielleicht nicht einfach, aber am deutlichsten) mit einigen zusätzlichen Unterstützungsvariablen geschehen.
Vielleicht so etwas:
If(Row() == 1,
counter = 1;
allow_over_limit_change = 1;
allow_below_limit_change = 0;
);
current_vals_to_check = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit_count = Sum(current_vals_to_check >= 750);
If(allow_over_limit_change & over_limit_count >= 10,
counter++;
allow_below_limit_change = 1;
allow_over_limit_change = 0;
, allow_below_limit_change & :Current < 750,
counter++;
allow_below_limit_change = 0;
allow_over_limit_change = 1;
);
counter;
Row() == 1 if-Anweisung kann höchstwahrscheinlich durch diese ersetzt werden (meiner Meinung nach nicht so klar wie die Verwendung von If-Anweisung)
As Constant(counter = 1);
As Constant(allow_over_limit_change = 1);
As Constant(allow_below_limit_change = 0);
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenHallo @jthi ,
Ich habe etwas an meiner neuen Anforderung ausprobiert. Es ist vielleicht nicht die beste Lösung, aber es ist eine Umgehung. Und es kommt der Lösung, die Sie für das ursprüngliche Problem vorgeschlagen haben, sehr nahe. Bis jetzt funktioniert es gut.
If( Row() == 1, val = 1 );
Next_10_values = Sum( :Current[Index( Row(), Min( Dim()[1], Row() + 9 ) )] >= 750 );
Previous_10_values = Sum( :Current[Index( Row(), Min( Dim()[1], Row() - 9 ) )] >= 750 );
If(
Next_10_values == 10 & Lag( :Current ) < 750 | Previous_10_values == 9 & :Current < 750 &
Lag( :Current ) >= 750,
val = val + 1
);
val;
Vielen Dank für deine Unterstützung.
Gruß HSS
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenChange wird verwendet, um val bei Bedarf zu erhöhen. Für Problem drei müsste der Algorithmus umgeschrieben werden, da sich die Bedingungen geändert haben
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende Zeilen@jthi Danke für die Erklärung.
Ich führe es Reihe für Reihe durch und habe ziemlich viel bekommen.
Ich habe immer noch keine Ahnung, warum wir die Variable 'change' im Skript haben und was ihr Zweck ist? Es werden nur zwei Werte angenommen, entweder 1 (als eingestellter Wert) und 0, wenn wir mehr als 10 Einträge hintereinander mit einem zufriedenstellenden aktuellen Wert erhalten. Aber es erscheint nirgendwo in der neuen Spaltenindizierung. Aber wenn ich es ohne Variable 'Change' starte, bekomme ich keine korrekten Einträge. Aber ich kann nicht herausfinden, wie und wo sich das auf unsere Berechnung/Indexierung auswirkt.
und 3. Teil des Problems - wie kann ich den laufenden Index erhöhen, wenn die gewünschte Region von :current>=750 endet?
Danke HSS
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenIch würde vorschlagen, das Skript so zu ändern, dass Sie es "Zeile für Zeile" ausführen können:
// Names Default To Here(1);
// Clear Log();
dt = Current Data Table();
run_script = Expr(
If(Row() == 1,
val = 1; // this is breaking rule of > 750, so we define it separately
change = 1;
);
next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit = Sum(next_vals >= 750);
If(change & over_limit >= 10,
val++;
change = 0;
, over_limit < 10,
change = 1;
);
val;
show(row(), val, change, next_vals, over_limit);
Write("\!N");
);
Row() = 1;
run_script;
Row() = 2;
run_script;
Row() = 5;
run_script;
Dann können Sie das Skript ziemlich einfach in Teilen ausführen und im Protokoll nachsehen, was passiert (Sie können auch eine Zeile nach der anderen ausführen, wenn Sie möchten).
Skriptfenster und eingebettetes Protokoll:

Scripting Index ist auch hilfreich bei der Erklärung der Funktionen, wie z. B. Dim().
Wenn dies nicht ausreicht, kommentieren Sie bitte diesen Beitrag und markieren Sie mich, ich kann versuchen, es ausführlicher zu erklären.
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenDas angehängte Bild in der vorherigen Nachricht enthält einen Fehler. Bitte ignorieren Sie das letzte rote Rechteck, da ich versehentlich auch den Zähler für die alte Anforderung geändert habe. Das sollte nicht der Fall sein.
Danke HSS
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenHallo Jarmo und alle,
Dieser Code funktioniert einwandfrei und ich bin in der Lage, ihn in Skript einwandfrei zu implementieren.
Aber andererseits kann ich es nicht nachvollziehen. Ich möchte es ein wenig modifizieren, aber ich kann das nicht. Würden Sie mir bitte dabei helfen -
1. Was macht diese Aussage -
next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
2. Ich kann nicht verstehen, wo das Inkrement auf „Änderung“ stattfindet und wie diese Bedingung erfüllt werden kann?
If(change & over_limit >= 10,
Ich glaube, es ist dasselbe wie - "If( change >=10 & over_limit >=10
3. In meinem aktuellen Problem möchte ich den Zähler um eins erhöhen, sobald die gewünschte Region fertig ist (mit mindestens 10 Einträgen) - etwa so -

Irgendeine Hilfe ?
Danke HSS
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenDanke Jarmo,
Es funktioniert perfekt. Jetzt muss ich das in mein Script einbauen. Ich hoffe, ich kann das.
Danke HSS
Betreff: So definieren Sie eine neue Spalte basierend auf der Bedingung für n aufeinanderfolgende ZeilenSubskription von Datentabellen ist eine Möglichkeit.
Ich habe den aktuellen Spaltennamen geändert:
Names Default To Here(1);
dt = Current Data Table();
dt << New Column("a", Numeric, Ordinal,
<< Set Each Value(
If(Row() == 1,
val = 1; // this is breaking rule of > 750, so we define it separately
change = 1;
);
next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit = Sum(next_vals >= 750);
If(change & over_limit >= 10,
val++;
change = 0;
, over_limit < 10,
change = 1;
);
val;
)
);