Der virtuelle Beitritt über JSL funktioniert nichtLiebe JMP-Community,
Ich verknüpfe zwei Datentabellen über JSL für einen virtuellen Join:
dt1:Link_Column<< Set Property( "Link ID", 1 );
dt2:Link_Column << Set Property( "Link Reference", Reference table(dt1 ));
Ich sehe die Schlüsselsymbole in beiden Tabellen und in den Spalteninformationen, sodass die Verknüpfung zu funktionieren scheint, aber die virtuell verbundenen Spalten werden in meiner verbundenen Datentabelle nicht angezeigt.
Wenn ich genau das Gleiche per Hand mache und in JMP klicke, funktioniert es und die verbundenen Spalten werden angezeigt.
Gibt es eine Möglichkeit, nach dem virtuellen Beitritt ein Update zu erzwingen?
Datenmischung und -bereinigungMassenanpassungQualitäts- und VerfahrenstechnikBetreff: Virtual Join über JSL funktioniert nichtScheint mit Jmp 17 behoben zu sein.
Betreff: Virtual Join über JSL funktioniert nichtDanke @Feli Und @hogi für die Untersuchung hierzu.
Die entscheidende Frage hier ist:
Wie erstelle ich mit einem einzigen Skript eine funktionierende Verknüpfung zwischen zwei nicht gespeicherten Datentabellen?
Mit zwei unterschiedlichen Skripten ist das tatsächlich möglich, mit einem einzigen Skript jedoch nicht: https://community.jmp.com/t5/Discussions/Setting-link-ID-in-jsl-seems-not-to-work-what-is-wrong/mp/598505
Die wichtigste Erkenntnis aus diesem Thread ist: „Sie müssen gerettet werden.“
Zusatzfrage:
Warum ist es möglich, per Klick auf nicht gespeicherte Tabellen zu verlinken, aber nicht über ein einziges Skript?
Ist dieses Problem (ich denke, es handelt sich um einen Fehler) behoben und liegt es irgendwo auf dem Tisch? Für mich ist die Ausgangsfrage von @Feli ist nicht gelöst.
Betreff: Virtual Join über JSL funktioniert nichtInteressante Frage.
Ist das Speichern der Tabelle „nur“ erforderlich, um einen eindeutigen Dateinamen für den Link zu erhalten?
Wäre es möglich, stattdessen den Namen der Datentabelle zu verwenden (ohne den vollständigen Pfad)?
In diesem Beispiel, Um die Referenztabelle (dt2) ordnungsgemäß mit dt1 zu verknüpfen, muss sie zunächst gespeichert werden
- Für dt3 ist es in Ordnung, ohne zu speichern.
Ohne eine der Tabellen zu speichern, hat es mir manchmal geholfen, einfach die Link-ID (generiert durch das JSL-Skript) aus der Referenztabelle zu entfernen und sie manuell erneut hinzuzufügen.
Wenn das JMP-Verhalten so beibehalten wird, wäre es möglich, eine Warnmeldung wie „Das Verknüpfen mit nicht gespeicherten Datentabellen funktioniert nicht“ anzuzeigen.
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Data table summary
// → Data Table( "Big Class By (sex)" )
dt 2 = Data Table( "Big Class" ) << Summary(
Group( :sex ),
Median( :height ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
// Change column link ID: sex
dt2:sex << Set Property( "Link ID", 1 );
// uncomment this line to make the virtual link work table d1
//dt2 << save( "$desktop/summaryTable.jmp" );
// Change column link reference: sex
dt1:sex << Set Property(
"Link Reference",
Reference Table( dt2 )
);
dt3 = Eval(dt1 << getScript);
dt3:sex << Set Property(
"Link Reference",
Reference Table( dt2 )
);
Betreff: Virtual Join über JSL funktioniert nichtJetzt bin ich etwas verwirrt – das große Problem, warum der virtuelle Join in JSL nicht funktioniert, ist also, dass er nicht gespeichert wird?
Gibt es dafür einen technischen Grund? - Die virtuelle Verknüpfung funktioniert für nicht gespeicherte Datentabellen, wenn ich sie manuell mache, aber nicht in JSL? Machen beide unterschiedliche Dinge?
Mein dt1 wurde durch das Importieren und Manipulieren von Daten erstellt. Warum unterscheidet sich die Variable dt1, wenn ich zum Erstellen beispielsweise den JSON-Importassistenten verwende, als wenn ich Open() für eine vorhandene Datentabelle verwende, wenn beide auf eine offene Datentabelle verweisen? in JMP?
Betreff: Virtual Join über JSL funktioniert nichtdt1 = Open( "$SAMPLE_DATA\Pizza Profiles.jmp" );
dt2 = Open( "$SAMPLE_DATA\Pizza Responses.jmp" );
dt1:ID << Set Property( "Link ID", 1 );
dt2:Choice << Set Property( "Link Reference", Reference Table( dt1 ) );
dt2:Choice1 << Set Property( "Link Reference", Reference Table( dt1 ) );
dt2:Choice2 << Set Property( "Link Reference", Reference Table( dt1 ) );
dist1 = dt2 << Distribution(
Nominal Distribution( Column( Referenced Column( "Cheese[Choice]", Reference( Column( :Choice ), Reference( Column( :Cheese ) ) ) ) ) ),
Nominal Distribution( Column( Referenced Column( "Cheese[Choice1]", Reference( Column( :Choice1 ), Reference( Column( :Cheese ) ) ) ) ) ),
Nominal Distribution( Column( Referenced Column( "Cheese[Choice2]", Reference( Column( :Choice2 ), Reference( Column( :Cheese ) ) ) ) ) )
);
Hier ist ein Beispiel, das funktionieren wird – dies sind Beispieldatentabellen, die das dt1-, dt2-Skriptkonzept verwenden. Eine gute Vorgehensweise, um sicherzustellen, dass es immer funktioniert, besteht darin, die oben vorgeschlagenen Schritte auszuführen und die Tabellen immer zu speichern, bevor Sie die Links erstellen. Da es sich in diesem Beispiel um Beispiele handelt, erfolgt hier keine Speicherung.
Betreff: Virtual Join über JSL funktioniert nichtGroßartig!
In Lat-Lon in Postleitzahl umkehren Ich musste die Dateien auch speichern; Sie können das Handle anstelle des Datenträgerdateinamens verwenden, die Datenträgerdatei muss jedoch vorhanden sein.
1 blobdbf = za << read( "cb_2019_us_zcta510_500k.dbf", Format( blob ) );
2 tempfile = Save Text File( "$temp/cb_2019_us_zcta510_500k.dbf", blobdbf );
3 zipcodeNS:dtdbf = Open( tempfile, Add to Recent Files( 0 ), invisible );
4 zipcodeNS:dtdbf << save( "$desktop/cb_2019_us_zcta510_500kdbf.jmp" );
5 , //
6 zipcodeNS:dtshp = Open( "$desktop/cb_2019_us_zcta510_500kshp.jmp", Add to Recent Files( 0 ), invisible );
7 zipcodeNS:dtdbf = Open( "$desktop/cb_2019_us_zcta510_500kdbf.jmp", Add to Recent Files( 0 ), invisible );
8 );
9 zipcodeNS:dtdbf:shape << Set Property( "Link ID", 1 );
10 zipcodeNS:dtshp:shape << Set Property( "Link Reference", Reference Table( zipcodeNS:dtdbf ) );
Zeile 3 öffnet eine Nicht-JMP-Datei als Tabelle.
Zeile 4 speichert die Tabelle als JMP-Datei oder Zeile 7 öffnet sie erneut von der Festplatte.
Zeile 10 erstellt die Linkreferenz aus dem dtdbf-Handle, ohne explizit den Namen $desktop zu verwenden.
Die dtshp-Datei konnte mit dem Link erneut gespeichert werden, aber ich habe das nicht getan. Das wäre hilfreich, wenn die Datei außerhalb dieses Skripts verwendet würde.
Betreff: Virtual Join über JSL funktioniert nichtDas Geheimnis bestand darin, a) beide Datentabellen zu speichern und b) Property( „Link Reference“, Reference table() festzulegen, muss eine Dateinamenreferenz sein, wie in den Antworten erwähnt.
Ich weiß nicht warum, aber ich nehme es...
Betreff: Virtual Join über JSL funktioniert nichtHier ist ein Beispiel, das sollte funktionieren.
Es fragt zwei Tabellen aus JMP-Beispieltabellen ab und verknüpft sie anschließend.
Wie bereits erwähnt, kann es zu Problemen bei der Fehlerbehebung kommen. Wahrscheinlich können Sie etwas im Protokoll finden
- Die referenzierte Tabelle muss gespeichert werden
- Die referenzierte Tabelle darf keine Duplikate enthalten
- Sind die Referenzen (Tabellenname, Spaltenname) korrekt?
- ...
Die Tasten auf beiden Seiten müssen farbgesättigt und nicht blass sein. Blass bedeutet, dass es nicht funktioniert.
Ich hatte auch einige Probleme damit, aber es funktioniert.
// User Dialog for query from datatable (database)
/***************************************************************************/
// Initialization
/***************************************************************************/
Names Default To Here( 1 );
Clear Log();
// Query 1st table with filter conditions
dt_filter = New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables( ["Big Class" => "\C:\Program Files\SAS\JMPPRO\15\Samples\Data\Big Class.jmp"] ),
QueryName( "filter" ),
CustomSQL( "SELECT distinct t1.name, t1.age, t1.sex, t1.weight, t1.height FROM \!"Big Class\!" t1 where t1.sex = 'M' and t1.age<=13;" )
) << Run;
Summarize( name_lst = by( dt_filter:name ) );
dt_filter:name << set property("Link ID", 1);
dt_filter << save("$TEMP\dt_filter.jmp");
// (2) assign custom SQL,
Assign(
custom_sql,
"\[
SELECT t1.picture, t1.name, t1."sibling ages",
t1.sports, t1."countries visited", t1."family cars", t1."reported illnesses",
t1."age vector"
FROM "Big Class Families" t1
where t1.name in __NAMELIST__
;
]\"
);
// (3) Put namelist into custom_sql
Substitute Into( custom_sql, "__NAMELIST__", Substitute( Char( name_lst ), "{", "(", "}", ")" ) );
// (4) execute Query
dt_result = New SQL Query( Version( 130 ), Connection( "JMP" ),
, JMP Tables( ["Big Class Families" => "\C:\Program Files\SAS\JMPPRO\15\Samples\Data\Big Class Families.jmp"] ),
QueryName( "dt_result" ), CustomSQL( custom_sql ) )
<< Run;
dt_result << save("$TEMP\dt_result.jmp");
// (5) Connect both tables by symbolic link
dt_result:name << set property("Link Reference", Reference Table("$TEMP\dt_filter.jmp"));
Betreff: Virtual Join über JSL funktioniert nichtAußerdem kann es hilfreich sein, die Tabellen vor dem Beitritt zu speichern.
Betreff: Virtual Join über JSL funktioniert nichtIch vermute nur eine schnelle Antwort, aber haben Sie die resultierende Definition der Spalteneigenschaft für dt2:LinkColumn verglichen, als Sie sie erfolgreich interaktiv definiert haben, mit der Definition, als Sie sie erfolglos per Skript erstellt haben?
Ich befürchte, dass das Argument „Referenztabelle“ ein Literalargument und keine Variable erwartet. Weitere Informationen finden Sie in diesem Hilfeeintrag Erstellen eines Skripts für einen virtuellen Join .