So erhalten Sie eine pass_fail-SpalteIch möchte eine pass_fail-Spalte erhalten, und @txnelson habe es zum Skript geschafft.
Aber, t sein Skript funktioniert nicht, wenn in einer der vielen Spalten keine Spezifikation in der Mitte vorhanden ist.
Wie kann ich es reparieren?
Names Default To Here( 1 );
dtOrig = current data table();
colNamesList = dtOrig << get column names( continuous, string );
// Create a work table of just the continuous columns
dt = dtOrig << subset( columns( colNamesList ), selected rows( 0 ) );
// Loop across all of the columns and apply a Range Check to eliminate
// all data outside of the upper and lower spec limits
For( theCol = 1, theCol <= N Items( colNamesList ), theCol++,
specs = Column( dt, colNamesList[theCol] ) << get property( "spec limits" );
Eval(
Substitute(
Expr(
Column( dt, colNamesList[theCol] ) << set property(
"Range Check",
(LELE( __LSL__, __USL__ ))
)
),
Expr( __LSL__ ), specs["LSL"],
Expr( __USL__ ), specs["USL"]
)
);
// Now convert the column to numeric
Column( dt, colNamesList[theCol] ) << data type( character );
// Now find all cells where values were eliminated
dt << select where( As Column( dt, colNamesList[theCol] ) == "" );
// If non passing rows were found, process the column to change the passing rows to
// a blank, and non passing to the name of the column
If( N Rows( dt << get selected rows ) > 0,
// Now set all eliminated cells to have the value of the name of the column
Column( dt, colNamesList[theCol] )[dt << get selected rows] = Column( dt, colNamesList[theCol] ) <<
get name;
// Invert the row selection, to select all rows where values passed and set them to a blank
dt << invert row selection;
Column( dt, colNamesList[theCol] )[dt << get selected rows] = "";
, // else set all
Column( dt, colNamesList[theCol] )[Index( 1, N Rows( dt ) )] = ""
);
);
// Now create a new column to hold the information on either that the row Passed or
// which columns failed
dt << New Column( "Pass_Fail", Character );
// Loop across all rows and set the values for the new column
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Trim( Concat Items( dt[theRow, 0, ""] ) ) == "",
:Pass_Fail[theRow] = "Pass"
,
thePass_Fail = Concat Items( dt[theRow, 0], "," );
For( i = Length( thePass_Fail ), i >= 2, i--,
If( Substr( thePass_Fail, i, 1 ) == ",",
If( Substr( thePass_Fail, i - 1, 1 ) == ",",
thePass_Fail = Substr( thePass_Fail, 1, i - 1 ) || Substr( thePass_Fail, i + 1 )
)
)
);
If( Right( thePass_Fail, 1) == ",", thePass_Fail = Left( thePass_Fail, length( thePass_Fail ) - 1 ) );
:Pass_Fail[theRow] = thePass_Fail;
)
);
// Only the new column is what is needed, so delete all other columns
dt << delete columns( eval(colNamesList) );
// Add the new column to the original data table
dtOrig << Update(
With( dt )
);
// Delete the no longer needed work table
close(dt, nosave );
Betreff: So erhalten Sie eine pass_fail-SpalteVielen Dank für Ihre Hilfe!
Dieser Code funktioniert sehr gut!!
Danke 
Betreff: So erhalten Sie eine pass_fail-SpalteIch muss mich bedanken @Byron_JMP fürs antworten.Ich hatte vorgehabt, auf diese Diskussion zu antworten, aber bevor ich das tat, wurde sie auf eine ältere Seite verschoben und fiel daher aus meinem Gedächtnis.Byrons Antwort brachte die Diskussion zurück in meinen NameSpace.
Ich glaube, dass alles, was Sie tun müssen, um Ihr Problem zu beheben, darin besteht, zu überprüfen, ob mit einer bestimmten Spalte Spezifikationsgrenzen verbunden sind.Und wenn keine Spezifikationsgrenzen gefunden werden, verarbeiten Sie diese Spalte nicht.Nachfolgend finden Sie einen etwas kryptischen Änderungsvorschlag, der möglicherweise Ihren Wünschen entspricht.Die Grundlage des Problems besteht darin, eine If()-Funktion zu verwenden, um den Code nur zu verarbeiten, wenn die Spezifikationsgrenzen gefunden werden. Dies ist ein Ersatz für Ihre aktuelle specs =-Codezeile
clear symbols(specs);
specs = Column( dt, colNamesList[theCol] ) << get property( "spec limits" );
If(isEmpty(specs)==0,
<ALL of="" the="" code="" to="" the="" end="" of="" the="" for="" loop=""></ALL>
Betreff: So erhalten Sie eine pass_fail-SpalteIch mag einfach, genau wie ich!
Also habe ich es vereinfacht (keine Verschachtelung erforderlich):
If( :Data >= 42, "Too High", :Data < 7, "Too Low", "Just Right")
Betreff: So erhalten Sie eine pass_fail-SpalteTXnelson schreibt wirklich fantastischen Code!
Vielleicht suchen Sie jedoch nach einer einfachen Lösung wie:
If( :Data >= 42,"Too High",If( :Data < 7,"Too Low","Just Right"))

Dies ist nur eine verschachtelte If-Anweisung. Wenn die Datenwerte 42 oder höher sind, gibt die Formel „Zu hoch“ zurück. Wenn die Daten kleiner als 7 sind, gibt sie „Zu niedrig“ zurück. Wenn sie weder zu hoch noch zu niedrig sind, gibt die Formel „Genau richtig“ zurück.
Sie können die Formel in den Formeleditor einfügen und dann den richtigen Spaltennamen, die richtigen Werte und Meldungen einfügen. (Klicken Sie mit der rechten Maustaste auf den Spaltennamen, klicken Sie auf „Formel“ und fügen Sie die obige JSL in den Dialog ein.)
Beifall,
B