La unión virtual a través de JSL no funcionaEstimada comunidad JMP,
Estoy vinculando dos tablas de datos a través de JSL para una unión virtual:
dt1:Link_Column<< Set Property( "Link ID", 1 );
dt2:Link_Column << Set Property( "Link Reference", Reference table(dt1 ));
Veo los símbolos clave en ambas tablas y en la información de la columna, por lo que la vinculación parece funcionar, pero las columnas virtualmente unidas no aparecen en mi tabla de datos unidos.
Si hago exactamente lo mismo a mano y haciendo clic en JMP, funciona y aparecen las columnas unidas.
¿Hay alguna forma de forzar una actualización después de unirse virtualmente?
secuencias de comandosRe: Virtual Join a través de JSL no funcionaParece estar arreglado con Jmp 17.
Re: Virtual Join a través de JSL no funcionaGracias @Feli y @hogi por investigar sobre esto.
La pregunta clave aquí es:
¿Cómo crear un enlace de trabajo entre dos tablas de datos no guardadas a través de un solo script?
En realidad, es posible con dos scripts diferentes, pero no con un solo script: https://community.jmp.com/t5/Discussions/Setting-link-ID-in-jsl-seems-not-to-work-what-is-wrong/mp/598505
La conclusión principal de este hilo es "deben ser salvados".
Siguiente pregunta:
¿Por qué es posible vincular tablas no guardadas haciendo clic, pero no mediante un único script?
¿Se ha abordado este problema (creo que es un error) y está sobre la mesa en alguna parte? Para mí la pregunta inicial de @Feli no se resuelve
Re: Virtual Join a través de JSL no funcionaInteresante pregunta.
¿Se necesita guardar la tabla "solo" para obtener un nombre de archivo único para el enlace?
¿Sería posible usar el nombre de la tabla de datos en su lugar (sin la ruta completa)?
En este ejemplo, para vincular la tabla de referencia (dt2) correctamente a dt1, primero debe guardarse
- para dt3 está bien sin guardar.
Sin guardar ninguna de las tablas, a veces me ayudó simplemente eliminar el ID de enlace (generado por el script JSL) de la tabla de referencia y agregarlo nuevamente manualmente.
Si el comportamiento de jmp se mantiene así, ¿sería posible mostrar un mensaje de advertencia como "la vinculación a tablas de datos no guardadas no funciona"?
// 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 )
);
Re: Virtual Join a través de JSL no funcionaAhora estoy un poco confundido, entonces el gran problema por el cual la unión virtual no funciona en JSL es que no se guarda.
¿Hay alguna razón técnica para esto? - ¿La vinculación virtual funciona para tablas de datos no guardadas cuando lo hago a mano, pero no en JSL? ¿Ambos están haciendo cosas diferentes?
Mi dt1 se creó importando datos y manipulándolos. ¿Por qué la variable dt1 es diferente si uso, por ejemplo, el asistente de importación json para crearlo, que usando Open() en una tabla de datos existente cuando ambos apuntan a una tabla de datos abierta? en JMP?
Re: Virtual Join a través de JSL no funcionadt1 = 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 ) ) ) ) ) )
);
aquí hay un ejemplo que funcionará: estas son tablas de datos de muestra, utilizando el concepto de secuencias de comandos dt1, dt2. Una buena práctica para asegurarse de que siempre funcione es hacer lo que se sugiere anteriormente y siempre guardar las tablas antes de crear los enlaces. En este ejemplo, dado que se trata de muestras, no hay un guardado aquí.
Re: Virtual Join a través de JSL no funciona¡Excelente!
en Geocodificación inversa Lat-Lon a Zip Tuve que guardar los archivos también; puede usar el identificador en lugar del nombre del archivo del disco, pero el archivo del disco debe existir.
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 ) );
La línea 3 está abriendo un archivo que no es JMP como una tabla.
La línea 4 guarda la tabla como un archivo JMP, o la línea 7 vuelve a abrir desde el disco.
La línea 10 crea la referencia del enlace desde el identificador dtdbf sin usar explícitamente el nombre de $desktop.
El archivo dtshp podría volver a guardarse con el enlace en su lugar, pero no lo hice. Eso sería útil si el archivo se usara fuera de este script.
Re: Virtual Join a través de JSL no funcionaEl secreto fue a) guardar ambas tablas de datos yb) Establecer propiedad ("Referencia de enlace", la tabla de referencia() tiene que ser una referencia de nombre de archivo, como se menciona en las respuestas.
No estoy seguro de por qué, pero lo tomaré...
Re: Virtual Join a través de JSL no funcionaAquí hay un ejemplo, eso debería funcionar.
Consulta dos tablas de tablas de muestra de JMP y las une después.
Como mencionaron otros, puede haber algunos problemas para la solución de problemas, probablemente pueda encontrar algo en el registro
- la tabla a la que se hace referencia debe guardarse
- la tabla a la que se hace referencia no debe tener duplicados
- ¿Son correctas las referencias (nombre de la tabla, nombre de la columna)?
- ...
Las teclas de ambos lados deben estar saturadas de color y no pálidas. Pálido significa que no funciona.
También tuve algunos problemas con él, pero funciona.
// 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"));
Re: Virtual Join a través de JSL no funcionaAdemás, puede ser útil guardar las tablas antes de unirse.
Re: Virtual Join a través de JSL no funcionaSolo estoy suponiendo una respuesta rápida, pero ¿comparó la definición resultante de la propiedad de la columna para dt2: LinkColumn cuando la definió de manera interactiva con éxito cuando la escribió sin éxito?
Me preocupa que el argumento de la tabla de referencia espere un argumento literal, no una variable. Consulte esta entrada de ayuda sobre scripting de una unión virtual .