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,
secuencias de comandosRe: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Realmente asombroso que un Panel todavía funciona después de cambiar el nombre de las columnas
- si está almacenado como un script de tabla;)
Gracias por implementar un algoritmo de autocorrección tan bueno.
Re: Columna() vs Como Columna() vs datable:columna vs dt:Como nombre("columna")Aquí está el deseo 
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idi-p/556596
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 Como Columna() vs datable:columna vs dt:Como nombre("columna")Buen video tutorial sobre las diferencias entre column() y as column():
Errores de JSL más comunes y cómo evitarlos (2020-US-30MP-571)
(a partir de las 5:18 min)
con el ejemplo
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Sobre
¿Cómo se utilizarían todos estos métodos para hacer que un script JSL sea resistente a los cambios de nombre de columna?
¿Qué tal una función de manejo de errores que detecta eventos de columnas faltantes después de cambios en el nombre de la columna, con una opción para corregir automáticamente el código?
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 elegir la correcta.
Luego, la ejecución del código podría continuar ejecutándose, y el código fuente podría corregirse automáticamente.
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...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//Row() = 0;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"));
Row() = 1;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"), Column(dt, "name")[], Column(dt, "name")[Row()]);
Print(dt:name == Column(dt, "name"));
// 0
Print(Column(dt, "name") == As Column(dt, "name"));
//0
Print(dt:name == As Column(dt, "name"));
//1
stop();
//
Show(Column("name") << get values);
Show(As Column("name") << get values);
Show(:name << get values);
stop();
col1 = "name";
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(col1), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Eval(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(As Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(dt, col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
@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")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.
Incluso funcionó para el :"nombre"n
Mismo comportamiento para cualquier gráfico, etc.: ajustado automáticamente al nuevo nombre de columna.
Pero para As column() y Column() no funcionó.
Tampoco lo hizo para ningún nombre de columna en el script original 
antes:

después:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Script(
"script",
:name;
:"name"n;<BR /> As Column( "name" );
Column("name");
);
dt:name << Set Name( "name_2" );
dt:name[1]
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.