Re: Columna() vs. As Columna() vs. datable:column vs. dt:As name("column")Bonito videotutorial sobre las diferencias entre column() y as column():
Errores más comunes de JSL y cómo evitarlos (2020-US-30MP-571)
(a partir del minuto 5:18)
con el ejemplo
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Sobre
¿Cómo se podrían utilizar todos estos métodos para hacer que un script JSL sea robusto ante los cambios de nombre de columna?
¿Qué tal una función de manejo de errores que detecte eventos de columnas faltantes después de cambios en el nombre de las columnas, con una opción para corregir el código automáticamente?
La idea:
En caso de que falte una columna, en lugar de mostrar un mensaje de error, JMP podría abrir una ventana con una lista de columnas para seleccionar la correcta.
Luego la ejecución del código podría seguir ejecutándose y el código fuente podría repararse automáticamente.
editar: enlace directo al vídeo
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
[El enlace de arriba no se muestra en todos los navegadores]
Re: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")La mejor referencia (fuera de mi propia experiencia y muchas, muchas pruebas y errores) es del índice de secuencias de comandos:


Las páginas de ayuda son otro lugar Columna(- , "nombre", "formateado") y
Como columna (nombre) . Esto también tiene algo de información. Guía de secuencias de comandos > Bloques de creación de JSL > Reglas para la resolución de nombres > Preguntas frecuentes sobre la resolución de nombres y Guía de secuencias de comandos > Tablas de datos > Columnas > Enviar mensajes a objetos de columna de datos también Iterar en filas en una tabla , así que básicamente la documentación (especialmente la Guía de secuencias de comandos).
Re: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")¿Podría incluir en su respuesta una referencia que explique este bit?
"As Column() "accede" a una columna ( lo que esto significa depende del caso... )."
Re: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Normalmente no me gustan las publicaciones +1, pero @jthi esta es exactamente la misma metodología que utilizo para los guiones de producción.Normalmente lo pienso como
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: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Esta es una publicación un poco larga y salta aquí y allá, lo siento..
Como Column(), Column(), :colname, ... no es simple en JSL y cuál usar depende del caso. Mi método preferido es siempre usar (excepto cuando no puedo o si quiero un aspecto un poco más limpio en el script) Column(datatable_reference, "cadena del nombre de la columna"). :colname tiene sus beneficios que a veces se pueden usar para beneficio de los scripters (algunos se mencionan aquí Guía de secuencias de comandos > Bloques de creación de JSL > Reglas para la resolución de nombres > Reglas para la resolución de nombres en la sección Excepciones).
También me gusta usar cadenas de nombres de columnas en lugar de la sintaxis :colname para evitar algunos problemas que pueden ocurrir aquí y allá. Por ejemplo << Get Column Names("String") en lugar de solo << Get Column Names() y luego obtengo la referencia con Column(string) si es necesario.
Columna(- , "nombre", "formateado") y
Como columna (nombre) no son iguales Column() le devuelve una referencia a la columna y As Column "accede" a una columna (lo que esto significa depende del caso...). Cuando ejecute este script por primera vez, dt:timestamp devolverá el valor faltante, ya que Row() no se ha definido correctamente para la indexación de JMP (se inicializa como 0).
Ver más...
@ih tiene algunas buenas sugerencias sobre cómo administrar los cambios de nombre en las columnas. Además, al insertar columnas en, por ejemplo, Graph Builder, puede usar Inserte una expresión en otra usando Eval Insert, Eval Expr, Parse y Substitute ya veces Eval(). << Obtener nombre también puede ser útil de vez en cuando o crear una interfaz de usuario con Filter Col Selector / Col List Box, por ejemplo (como @pauldeen sugirió).
Re: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Cómo podría tú ¿Sabe a qué columna debe hacer referencia el script?Si realmente necesita monitorear los cambios de nombre de columna, puede hacerlo suscribiéndose a los cambios en la tabla y registrando esos nombres de columna en algún lugar, pero creo que sería bastante complejo.¿Podría definir una propiedad de columna y buscarla?
Ejemplo de suscripción de la Guía de secuencias de comandos:
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 );
Usar propiedad de columna
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: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Indexe la columna por columna numérica (dt, 1) o solicite al usuario que seleccione una columna o ingrese un nombre de columna. Mire en New Window() en los archivos de ayuda.
Columna () vs Como Columna () vs datable: columna vs dt: Como nombre ("columna")JSL tiene varias formas de referirse a las columnas. Primero abramos una tabla de datos.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
Ahora creamos un script de tabla que tiene algo como esto.
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
En scripts automatizados (por ejemplo, un gráfico), cuando un usuario cambia el nombre de una columna, parece adaptar el script al nuevo nombre de columna. Esto falló en JSL personalizado, y apareció algo como Index().
¿Cómo se utilizarían todos estos métodos para hacer que un script JSL sea resistente a los cambios de nombre de columna?
Saludos,
Automatización y secuencias de comandosLa personalización en masaRe: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Aquí está el deseo 
detectar el error de "columna faltante" y proporcionar un menú de selección
Debería ser fácil de implementar ahora para JSL Editor, ya que se acaba de presentar una funcionalidad similar con el nuevo generador de flujo de trabajo de Jmp 17:
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
Re: Columna() vs. As Columna() vs. datable:column vs. dt:As name("column")@brady_brady analiza este tema en detalle en Better JSL Smoother Migration: How To Fix Your Own Code (Migración más fluida de JSL: cómo arreglar su propio código) @10 min
editar:
Lamentablemente el vídeo fue archivado.
https://community.jmp.com/t5/contentarchivals/contentarchivedpage/message-uid/537424#U537424
Re: Columna() vs Como columna() vs datable:columna vs dt:Como nombre("columna")Es sorprendente que un Panel todavía funciona después de cambiar el nombre de las columnas
- si está almacenado como un script de tabla
editar:
Ah, no... incluso funciona si el Panel/Aplicación NO está almacenado como un Script de tabla.
Interesante .
editar2 - limitación:
Los "Scripts" JSL de la aplicación no se actualizan automáticamente, solo el código en segundo plano de la aplicación.

Re: Columna() vs Como columna() vs datable:columna vs dt:Como nombre("columna")¿te refieres a algo como esto?
Después de ejecutar el código, las dos primeras entradas en TABLE SCRIPT se cambiaron automáticamente al nuevo nombre *)
El mismo comportamiento para cualquier gráfico, etc.: todo se ajusta automáticamente al nuevo nombre de la columna.
¡Muy guay!
Pero para As column() y Column() no funcionó.
Tampoco lo hizo con ningún nombre de columna en un script que NO esté almacenado como un script de tabla...
Re: Columna() vs Como columna() vs datable:columna vs dt:Como nombre("columna")Debido a que los nombres de sus columnas son números, esto no sucederá si usa letras puramente inglesas.