Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahieren<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich versuche, Spaltenspezifikationsgrenzen zu extrahieren, damit ich sie in einem benutzerdefinierten Bericht verwenden kann, aber es kommt zu einem merkwürdigen Verhalten. Unten finden Sie einen Ausschnitt dessen, was ich tue:
Clear Globals();
dt = Datentabelle( "blah" );
cols1 = dt << Spaltennamen abrufen (numerisch, kontinuierlich);
For( jj = 1, jj <= N Items( cols1 ), jj++,
spec_x = cols1[jj] << Get Property( "Spec limits" );
Drucken(
Char( jj ) || ": Col ist " || Char( cols1[jj] << get name ) ||
", LSL ist " || Char( spec_x["lsl"] ) ||
", USL ist " || Char( spec_x["usl"] )
);
);
Die print-Anweisung ist nicht die eigentliche Endverwendung, dient aber dazu, zu zeigen, ob ich die Grenzwerte auf sinnvolle Weise extrahiert habe!
Nun funktioniert dieser Code gut für eine kleine Testtabelle mit 2 Spalten:
„1: Col ist X, LSL ist 1, USL ist 2“
„2: Col ist Y, LSL ist 3, USL ist 7“
Was mit dem übereinstimmt, was in meiner Tabelle steht. Aber für eine größere Tabelle mit 73 (numerischen, fortlaufenden) Spalten kann aus irgendeinem Grund nichts in spec_x eingefügt werden, ich erhalte nur Folgendes:
„1: Col ist Rc_N+PO (N/.09/280), LSL ist ., USL ist .“
„2: Col ist Rc_V1 (N/.1/1260), LSL ist ., USL ist .“
„3: Col ist Rc_V2 (N/.1/1188), LSL ist ., USL ist .“
„4: Col ist Rc_V3 (N/.1/1188), LSL ist ., USL ist .“
„5: Col ist Rc_V4 (N/.1/1188), LSL ist ., USL ist .“
... usw
Die Tabelle enthält definitiv Grenzwertdaten, ich habe es noch einmal überprüft! Gibt es also einen Grund, warum es möglicherweise nicht funktioniert? Die Tabelle ist geöffnet, das Skript bekommt die Spaltennamen eindeutig in Ordnung, ich schaffe es einfach nicht, die Grenzwerte einzuhalten.
Wenn ich durch das Skript gehe und zu spec_x = cols1[jj] << Get Property( "Spec limits" ); Das Protokoll zeigt:
Spezifikationsgrenzen (LSL (10), USL (50), Ziel (30))
aber wenn ich dann die print-Anweisung ausführe, heißt es nur:
„1: Col ist Rc_N+PO (N/.09/280), LSL ist ., USL ist .“
Jede Hilfe wird geschätzt!
Danke,
Matthew.
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenDas funktioniert jetzt, danke für deine Hilfe 
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenOk, es scheint, dass <
dt = Neuer Tisch ( "Beispiel" ) ;
dt << Neue Spalte ( „NoSpecLimits“ , Numerisch , Kontinuierlich ) ;
dt << Neue Spalte ( „Rc_N+PO (N/.09/280)“ ,
Numerisch ,
Kontinuierlich ,
Eigenschaft festlegen ( „Spezifikationsgrenzen“ , Spezifikationsgrenzen ( LSL ( 10 ) , USL ( 50 ) , Ziel ( 30 ) ) ) ,
Werte festlegen ( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt << Neue Spalte ( "Prüfen" ,
Numerisch ,
Kontinuierlich ,
Eigenschaft festlegen ( „Spezifikationsgrenzen“ , { LSL ( 1 ) , USL ( 5 ) , Ziel ( 3 ) , Grenzen aufzeigen ( 0 )} ) ,
Werte festlegen ( [ 2 , 3 , 4 ] )
) ;
cols1 = dt << Spaltennamen abrufen ( numerisch , kontinuierlich ) ;
Für ( jj = 1 , jj <= N Artikel ( cols1 ) , jj ++,
Q = cols1 [ jj ] << Holen Sie sich Eigentum ( „Spezifikationsgrenzen“ ) ;
spec_x = Bewertungsliste ( { Arg ( Q , 1 ) , Arg ( Q , 2 ) , Arg ( Q , 3 )} ) ;
Wenn ( N-Reihe ( Ort ( spec_x , Leer () ) ) ,
Drucken (
Verkohlen ( jj ) || ": Col " || Verkohlen ( cols1 [ jj ] << Namen bekommen ) ||
„, hat keine Spezifikationsbeschränkungen“
) ,
Drucken (
Verkohlen ( jj ) || „: Col ist“ || Verkohlen ( cols1 [ jj ] << Namen bekommen ) || ", LSL ist"
|| Verkohlen ( spec_x [ „LSL“ ] ) || ", USL ist" || Verkohlen ( spec_x [ „USL“ ] )
)
) ;
) ;
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenVielen Dank euch beiden für eure Antworten, aber noch kein Glück. Übrigens verwende ich JMP 11.2 64-Bit unter Win7.
MS: Ihr Code hat bei mir beim Erstellen einer neuen Testtabelle einwandfrei funktioniert, bei der Verwendung meiner Tabelle jedoch nicht.
dkeshock: Deine Bearbeitung hat nicht geholfen, aber sie hat mir einen nützlichen Hinweis gegeben, wie ich Spaltennamen einfach extrahieren kann, danke 
Ich glaube, ich habe jetzt vielleicht eine Grundursache, bin mir aber immer noch nicht sicher, wie ich sie lösen kann. Ich habe eine meiner Spalten in eine neue Tabelle kopiert und dann eine neue Testspalte mit manuell eingegebenen Grenzwerten erstellt. Das Skript funktioniert für die neue Testspalte:
„1: Col ist Rc_N+PO (N/.09/280), LSL ist ., USL ist .“
„2: Col ist Test, LSL ist 1, USL ist 5“
Also habe ich mir die Skripte für die beiden Spalten angeschaut (bewusst auf ein paar Zeilen beschränkt):
Neue Spalte( "Rc_N+PO (N/.09/280)",
Numerisch, Fortlaufend, Format („Best“, 10),
Set Property( „Spec Limits“, Spec Limits( LSL( 10 ), USL( 50 ), Target( 30 ) ) ),
Werte festlegen ([18.306, 18.937, 17.979])
)
Neue Spalte( „Test“,
Numerisch, Kontinuierlich, Format („Best“, 12),
Set Property( „Spec Limits“, {LSL( 1 ), USL( 5 ), Target( 3 ), Show Limits( 0 )} ),
Werte festlegen( [2, 3, 4] )
)
Es sieht so aus, als ob der Code für die Eigenschaft „Spezifikationsgrenzen“ anders ist. Der einzige Grund, der mir einfällt, ist, dass ich für meine realen Daten die Spezifikationsgrenzen mithilfe der Capability-Plattform aus einer Datentabelle importiert habe, während ich sie für die Testspalte manuell eingegeben habe.
Könnte dies die Ursache meines Problems sein? Gibt es eine Möglichkeit, dies zu umgehen, oder muss ich die Spezifikationsgrenzen manuell eingeben (oder mit einem Skript wie dem von MS)?
Danke schön,
Matthew.
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenAls ich es zum ersten Mal getestet habe, funktionierte es Nr. 58 von 81 Spalten, die ich in einer vorhandenen Tabelle hatte.Ich habe festgestellt, dass die Konventionen für die Spaltennamen in der Variablen Cols1 an derselben Stelle geändert wurden (die ersten 58 waren „:ColumnName“ und der Rest ohne „:“), also habe ich auf die Verwendung der Zeichenfolgennamen umgestellt und es hat bei mir gut funktioniert.
In Ihrem Beispiel oben läuft es bei mir erst, wenn ich die beiden „Cols1[jj]“ in „Column(cols1[jj])“ ändere.Gibt es dafür einen Grund?
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenEs sollte funktionieren, und das tut es auch (JMP 11) im folgenden Beispiel, das auf Ihrem Code basiert. Versuchen Sie, Wait(0)-Befehle einzufügen, um zu testen, ob es sich um ein Leistungsproblem handelt.
//Beispieltabelle erstellen
dt = neuer Tisch ( "Beispiel" ) ;
Für ( ich = 1 , ich <= 100 , ich ++,
Kol = dt << neue Kolumne ( "prüfen" , numerisch , kontinuierlich ) ;
evalu ( evalexpr ( Kol << Eigenschaft festlegen ( „Spezifikationsgrenzen“ , { LSL ( Ausdruck ( ich ) ) , USL ( Ausdruck ( ich + 2 ) ) , Ziel ( Ausdruck ( ich + 1 ) ) , Grenzen aufzeigen ( 0 )})))
) ;
//Spezifikationsgrenzen drucken
cols1 = dt << Spaltennamen abrufen ( numerisch , kontinuierlich ) ;
Für ( jj = 1 , jj <= N Artikel ( cols1 ) , jj ++,
spec_x = cols1 [ jj ] << Holen Sie sich Eigentum ( „Spezifikationsgrenzen“ ) ;
Drucken (
Verkohlen ( jj ) || „: Col ist“ || Verkohlen ( cols1 [ jj ] << Namen bekommen ) || ", LSL ist" || Verkohlen ( spec_x [ „lsl“ ] ) || ", USL ist"
|| Verkohlen ( spec_x [ „usl“ ] )
) ;
) ;
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenFunktioniert dieser?
Globale löschen () ;
dt = Datentabelle („bla“) ;
cols1 = dt << Spaltennamen abrufen ( numerisch , kontinuierlich , „Zeichenfolge“ ) ;
Artikel = N Artikel ( cols1 ) ;
Für ( jj = 1 , jj <= Artikel , jj ++,
spec_x = Spalte ( cols1 [ jj ]) << Holen Sie sich Eigentum ( „Spezifikationsgrenzen“ ) ;
Drucken (
Verkohlen ( jj ) || „: Col ist“ || Verkohlen ( cols1 [ jj ] ) ||
", LSL ist" || Verkohlen ( spec_x [ „lsl“ ] ) ||
", USL ist" || Verkohlen ( spec_x [ „usl“ ] )
) ;
) ;
Betreff: Ich versuche, Spezifikationsgrenzen aus Spalten zu extrahierenIm Zusammenhang mit dieser Diskussion – hier ist eine nette kleine Funktion, die ich geschrieben habe, um Pull-Spezifikationen zu handhaben. Es verwendet Ausdrucksverarbeitung und ein assoziatives Array, um ein nettes kleines Wörterbuch zu erstellen, das später verwendet werden kann:
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
Die Verwendung würde etwa so aussehen:
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);