Re: Automatización de siguiente nivel usando secuencias de comandos JSLagregando @Jordan_Hiller y @ChristianBille a este comentario.
Gracias a todos por armar esto. Tengo una pregunta de seguimiento sobre "generalizar", y tiene más que ver con mi falta de habilidad para escribir scripts. Normalmente, en mi flujo de trabajo, necesito "seleccionar todas las columnas" y luego hacer algo, ya sea resumir, agrupar, explorar valores faltantes, etc. Sin embargo, tengo miles de columnas y tendrán nombres diferentes en cada nueva tabla de datos. , por lo que no puedo simplemente reemplazar 5000 columnas cuando me indica que no puede encontrar una columna en particular (llevaría horas). Me pregunto si puedo agrupar las columnas PRIMERO y luego llevar a cabo los pasos restantes del flujo de trabajo en el grupo. Podría darle al grupo un nombre genérico.
La alternativa sería intentar seleccionar columnas por una propiedad en su nombre, como en el siguiente script. Si hay forma de escribirlo donde el siguiente paso en el flujo de trabajo presenta las columnas SELECCIONADAS generadas por este script. Por ejemplo, si quisiera transponer todas las columnas con "el" en el nombre, ¿podría este script incrustarse en un flujo de trabajo? Estoy tratando de pensar en cómo evitar tener que recodificar los nombres de las columnas en cada archivo, ¡aunque esa es otra opción!
Me doy cuenta de que Workflow Builder probablemente funciona mejor cuando tiene docenas de tablas con formato idéntico para procesar, pero estoy tratando de averiguar si podría hacer que coopere cuando cada tabla difiere ligeramente.
names default to here(1);
dt=current data table();
colNames = dt << get column names(string);
for each({Name}, colNames,
if(contains(Name,"nox"),
for each row(
column(name)[row()] = ???????????; // your formula here
)
);
);
Re: Automatización de siguiente nivel usando secuencias de comandos JSLSi entiendo tu pregunta, @abmayfield , está preguntando si un flujo de trabajo JMP17 puede acomodar una gran cantidad de nombres de columnas cambiantes. Diré que sí, es posible, pero no sin insertar algún JSL personalizado en el flujo de trabajo.
Un buen enfoque es hacer que su flujo de trabajo/secuencia de comandos actúe en las columnas que el usuario seleccionó antes ejecutando el flujo de trabajo.
Aquí hay un ejemplo usando el conjunto de datos de muestra de presión arterial.
Names Default To Here( 1 );
//Custom JSL: Get the user-selected columns, save them into list CNames
CNames = Current Data Table() << Get Selected Columns;
//Slightly modified workflow step: replace hard-coded columns with list CNames
Data Table( "Blood Pressure" ) << Transpose(
columns( CNames ),
By( :Dose ),
Label( :Subject ),
Output Table( "tdata" )
);
Independientemente de cómo ataque esto, la solución probablemente involucrará a JSL liza . ¡Aprender un poco sobre las listas puede darte nuevos superpoderes de codificación!
Automatización de nivel superior mediante scripts JSLEl vídeo se actualizó en agosto de 2024.
Los flujos de trabajo son una forma sin código de automatizar los análisis e informes que utiliza con frecuencia o a diario. Además, puede convertir los flujos de trabajo en scripts JSL para ofrecer una experiencia de usuario fluida y una presentación más pulida, y crear un complemento para compartir con otros. Esta demostración muestra los conceptos básicos sobre cómo comprender y modificar los scripts de flujo de trabajo y hacerlos más flexibles para nuevos datos y nuevos usuarios. Se supone que tiene algunos conocimientos sobre la creación de un flujo de trabajo JMP.
El caso de estudio utiliza tres fuentes que utilizamos para construir el flujo de trabajo utilizando datos de los años 2015-2017 y luego hacer un script que pueda funcionar con datos de los años posteriores.
El archivo .zip adjunto incluye todos los archivos que necesita para practicar, incluidas dos versiones de los datos de Excel de cuidado infantil y el complemento JMP de análisis de cuidado infantil.
Este vídeo se está procesando actualmente. Inténtalo de nuevo en unos minutos.
(ver en Mis Videos)
Vea cómo:
- Comprenda algunos de los componentes básicos de JSL
- Comentarios
- Hacer referencia a columnas en tablas de datos
- Expresiones y objetos a los que se refieren
- Variables de ruta
- Crear flujo de trabajo
- Guardar el script de flujo de trabajo
- Edite el script para generalizarlo para nuevos datos y nuevos usuarios
- Cambiar los nombres de las tablas y las rutas de los archivos
- Crear variables de nombre de tabla de datos
- Agregue mecanismos de entrada de usuario según sea necesario (Seleccionar archivo, Cuadro de diálogo de columna, etc.)
- Elija un archivo
- Crear JSL para seleccionar un archivo según criterios específicos
- Valor predeterminado de la tabla de datos abierta actual
- Seleccione una columna y luego descargue la columna seleccionada del cuadro de diálogo para actuar sobre ella más adelante en el script.
- Utilice el selector de columnas del informe integrado en lugar de elegir una columna
- Opcionalmente, guarde el script como un complemento JMP para su distribución
- Cree el complemento mediante Archivo > Nuevo > Complemento
- Crea un elemento de menú y/o un elemento de la barra de herramientas para iniciar el script
- Incluir archivos de datos, PDF, etc.
- Instale el complemento y compártalo con otros usuarios que puedan instalarlo haciendo doble clic en el archivo *.jmpaddin
Preguntas respondidas por Jordan Hiller @Jordan_Hiller en el seminario web en vivo:
P: Si mi flujo de trabajo genera una NUEVA tabla en el proceso y luego esa nueva tabla es invocada por pasos sucesivos, tengo problemas con esto porque la tabla recién formada recibirá un nombre difícil de predecir, como “sin título 5”. ¿Se puede “generalizar” este paso de manera similar?
R: El lugar donde se encontrará con este problema especialmente es cuando esté usando elementos del menú Tablas como apilar, dividir y transponer, y las cosas que crea con apilar, dividir y transponer. A menos que les dé un nombre explícito, se llamarán u=Untitled 17 o Untitled 32. Por lo tanto, asigne un nombre a la nueva Tabla de salida durante las operaciones del menú Tablas.

Renamed split tableTabla dividida renombrada
P: Si se ejecutó un script JSL sin Workflow Builder, ¿cómo se puede convertir en un Workflow?
R: Sí, puede crear una nueva acción personalizada de flujo de trabajo, luego copiar y pegar el script en una ventana o dividir el script en acciones personalizadas independientes.
P: ¿Podrías hacer clic en Grabar en Workflow Builder y luego ejecutar el script? ¿WFB capturaría los pasos del script?
R: En JMP 17 y versiones anteriores, no se capturan los pasos. Sin embargo, los flujos de trabajo de JMP 18 sí capturan los scripts que se ejecutan mientras se graba el flujo de trabajo.
P: ¿Tiene alguna sugerencia para cuando se ejecuta Fit Model con la variable "by"? ¿El flujo de trabajo guarda una instancia que tiene un desglose de cada categoría? Pero, ¿cómo hacerlo más general cuando la columna tiene una nueva categoría?
R: Agrupar scripts en JSL es un poco complicado. Tienes que saber cómo manejar listas JSL. Te sugiero que consultes a la comunidad de usuarios de JMP o envíes una pregunta a la comunidad de usuarios, donde obtendrás buenos consejos.
P: ¿Existe una variable de ruta que haga referencia al directorio donde se encuentra el script que se está ejecutando actualmente?
R: No, no existe una variable de ruta para el script. Puedes evitarlo. Muchas veces, cuando especificas un archivo en un script JMP, si el archivo se encuentra en la misma ruta/directorio/carpeta en el mismo script que estás ejecutando, puedes eliminar la ruta/directorio del nombre del archivo y usar una ruta relativa. Consulta a continuación.
Recursos

Automatización y scriptingRe: Automatización de siguiente nivel mediante secuencias de comandos JSL¿Podrías presionar Grabar en Workflow Builder y luego ejecutar tu script? ¿WFB capturaría los pasos del guión?
Jmp18: si
Re: Automatización de siguiente nivel mediante secuencias de comandos JSL¡Gracias @hogi ! Modifiqué la respuesta a la pregunta anterior. Como indicó hogi, los flujos de trabajo de JMP 18 capturan scripts que se ejecutan mientras se graba el flujo de trabajo.