Betreff: Column() vs. As Column() vs. datable:column vs. dt:As name("column")Schönes Video-Tutorial über die Unterschiede zwischen column() und as column():
Die häufigsten JSL-Fehler und wie man sie vermeidet (2020-US-30MP-571)
(beginnt bei 5:18 Min.)
mit dem Beispiel
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Betreffend
Wie kann man all diese Methoden verwenden, um ein JSL-Skript robust gegenüber Spaltennamenänderungen zu machen?
Wie wäre es mit einer Fehlerbehandlungsfunktion, die fehlende Spaltenereignisse nach Spaltennamenänderungen abfängt – mit einer Option zum automatischen Korrigieren des Codes.
Die Idee:
Falls eine Spalte fehlt, könnte JMP anstelle der Anzeige einer Fehlermeldung ein Fenster mit einer Spaltenliste öffnen, um die richtige auszuwählen.
Anschließend könnte die Ausführung des Codes weiterlaufen – und der Quellcode könnte automatisch repariert werden.
edit: direkter Link zum Video
https://community.jmp.com/t5/Abstracts/Most-Common-JSL-Mistakes-and-How-to-Avoid-Them-2020-US-30MP-571/ev-p/758506/redirect_from_archived_page/true#U281519
[Der Link oben wird nicht in jedem Browser angezeigt]
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Die beste Referenz (außerhalb meiner eigenen Erfahrung und vieler, vieler Versuche und Irrtümer) ist der Skriptindex:


Hilfeseiten sind an anderer Stelle Spalte(- , "name", "formatiert") Und
Als Spalte (Name) . Auch hier gibt es einige Informationen Skriptleitfaden > JSL-Bausteine > Regeln für die Namensauflösung > Häufig gestellte Fragen zur Namensauflösung Und Skriptleitfaden > Datentabellen > Spalten > Nachrichten an Datenspaltenobjekte senden Auch Zeilen in einer Tabelle durchlaufen , also im Grunde die Dokumentation (insbesondere Scripting Guide).
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Könnten Sie Ihrer Antwort bitte eine Referenz hinzufügen, die dieses Bit erklärt?
"As Column() "greift" auf eine Spalte zu ( was das bedeutet, hängt vom fall ab... )."
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Normalerweise mag ich keine +1-Beiträge, aber @jthi Dies ist genau die gleiche Methode, die ich für Produktionsskripte anwende.Normalerweise denke ich darüber nach
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Dies ist ein bisschen langer Beitrag und springt hier und da, sorry dafür..
Da Column(), Column(), :colname, ... in JSL nicht einfach ist und welche zu verwenden ist, hängt vom Fall ab. Meine bevorzugte Methode ist stets Verwenden Sie (außer wenn ich nicht kann oder wenn ich ein etwas saubereres Aussehen im Skript haben möchte) Column(datatable_reference, "string of the name of the column"). :colname hat seine Vorteile, die manchmal zum Nutzen von Skriptern verwendet werden können (einige werden hier erwähnt Skriptleitfaden > JSL-Bausteine > Regeln für die Namensauflösung > Regeln für die Namensauflösung im Abschnitt Ausnahmen).
Ich verwende auch gerne Zeichenfolgen von Spaltennamen anstelle der :colname-Syntax, um einige Probleme zu vermeiden, die hier und da auftreten können. Zum Beispiel << Get Column Names("String") statt nur << Get Column Names() und dann erhalte ich bei Bedarf die Referenz mit Column(string).
Spalte(- , "name", "formatiert") Und
Als Spalte (Name) sind nicht gleich. Column() gibt Ihnen eine Referenz auf eine Spalte zurück und As Column "greift" auf eine Spalte zu (was dies bedeutet, hängt vom Fall ab...). Wenn Sie dieses Skript zum ersten Mal ausführen, gibt dt:timestamp einen fehlenden Wert zurück, da Row() für die Indizierung von JMP nicht richtig definiert wurde (es wird mit 0 initialisiert).
Mehr sehen...
@ich h enthält einige gute Vorschläge zum Verwalten von Namensänderungen in Spalten. Auch beim Einfügen von Spalten in beispielsweise Graph Builder können Sie verwenden Fügen Sie mit Eval Insert, Eval Expr, Parse und Substitute einen Ausdruck in einen anderen ein und manchmal Eval(). << Get Name kann auch von Zeit zu Zeit hilfreich sein oder zum Beispiel eine Benutzeroberfläche mit Filter Col Selector / Col List Box erstellen (wie z @pauldeen empfohlen).
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Wie würde Du wissen Sie, auf welche Spalte das Skript verweisen soll?Wenn Sie wirklich Änderungen an Spaltennamen überwachen müssen, können Sie dies tun, indem Sie Änderungen in der Tabelle abonnieren und diese Spaltennamen irgendwo aufzeichnen, aber ich denke, das wäre ziemlich komplex.Könnten Sie stattdessen eine Spalteneigenschaft definieren und danach suchen?
Abonnieren Sie ein Beispiel aus dem Scripting Guide:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
Verwenden Sie die Spalteneigenschaft
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];Re: Column() vs As Column() vs datable:column vs dt:As name("column")Indizieren Sie die Spalte entweder mit der Zahl Spalte (dt, 1) oder fordern Sie den Benutzer auf, eine Spalte auszuwählen oder einen Spaltennamen einzugeben. Schauen Sie in den Hilfedateien nach New Window().
Column() vs. As Column() vs. datable:column vs. dt:As name("column")JSL bietet mehrere Möglichkeiten, auf Spalten zu verweisen. Öffnen wir zunächst eine Datentabelle.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
Jetzt erstellen wir ein Tabellenskript, das so etwas hat.
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
Wenn ein Benutzer in automatisierten Skripten (z. B. einem Diagramm) den Namen einer Spalte ändert, scheint er das Skript an den neuen Spaltennamen anzupassen. Dies schlug in der benutzerdefinierten JSL fehl und es wurde etwas wie Index() angezeigt.
Wie würde man all diese Methoden nutzen, um ein JSL-Skript robust gegenüber Änderungen des Spaltennamens zu machen?
Grüße,
Automatisierung und SkripterstellungMassenanpassungBetreff: Column() vs As Column() vs datable:column vs dt:As name("column")Hier ist der Wunsch 
Fehler „fehlende Spalte“ abfangen und ein Auswahlmenü bereitstellen
Sollte jetzt für den JSL-Editor einfach zu implementieren sein, da eine ähnliche Funktionalität gerade mit dem neuen Workflow-Builder von Jmp 17 eingeführt wurde:
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
Betreff: Column() vs. As Column() vs. datable:column vs. dt:As name("column")@brady_brady bespricht dieses Thema ausführlich in „Bessere JSL-Migration ohne Reibungsverluste: So beheben Sie Ihren eigenen Code“ @10min
bearbeiten:
leider wurde das Video archiviert.
https://community.jmp.com/t5/contentarchivals/contentarchivedpage/message-uid/537424#U537424
Betreff: Column() vs As Column() vs datable:column vs dt:As name("column")Erstaunlich, dass a Armaturenbrett Funktioniert auch nach dem Umbenennen der Spalten noch
- wenn es als Tabellenskript gespeichert ist
bearbeiten:
Ah, nein ... es funktioniert sogar, wenn das Dashboard/die Anwendung NICHT als Tabellenskript gespeichert ist.
Interessant .
edit2 - Einschränkung:
Die JSL-„Skripte“ der Anwendung werden nicht automatisch aktualisiert, sondern nur der Code im Hintergrund der Anwendung.

Betreff: Column() vs As Column() vs datable:column vs dt:As name("column")meinst du so etwas?
Nach dem Ausführen des Codes wurden die ersten beiden Einträge im TABLE SCRIPT automatisch in den neuen Namen geändert *)
Gleiches Verhalten für alle Diagramme usw.: Alles wird automatisch an den neuen Spaltennamen angepasst.
so cool!
Aber für As Column() und Column() hat es nicht funktioniert.
Dies gilt auch nicht für Spaltennamen in einem Skript, das NICHT als Tabellenskript gespeichert ist ...
Betreff: Column() vs As Column() vs datable:column vs dt:As name("column")Da es sich bei Ihren Spaltennamen um Zahlen handelt, passiert dies nicht, wenn Sie reine englische Buchstaben verwenden.