Vocero | Transcripción |
| wendymurphrey | Hola y gracias por unirte a nuestra presentación de hoy. Nos complace hablar con usted sobre escenarios comunes que encuentran los autores de guiones con distintos niveles de experiencia. |
| Nuestra intención es explicar lo que está sucediendo para que usted tenga las herramientas y el conocimiento para evitar estos errores. Entonces empecemos. |
| Quizás porque no está abierto de forma predeterminada, es fácil olvidarse de revisar el registro en busca de mensajes. Pero el registro contiene información útil sobre ejecuciones de scripts recientes. Entonces, echemos un vistazo más de cerca a este ejemplo en JMP. |
| Aquí podemos ver que el script simplemente abre una tabla de datos e intenta realizar una selección de fila. Cuando ejecutamos este script, |
| obtenemos un mensaje de error interactivo para el error fatal, es decir, aquellas situaciones en las que el script se detiene debido al error. La ventana emergente es un comportamiento nuevo para JMP 15 y se puede desactivar en las preferencias. |
| Cuando descartamos ese mensaje, podemos verificar el registro y vemos el mismo mensaje en la ventana, pero también vemos el número de línea. |
| Busque el nombre del archivo de script para ayudarnos a llegar al área del problema. Ahora, no confíe únicamente en estas ventanas emergentes porque también aparecerán otros mensajes importantes en el registro. |
| y no necesariamente provocan una ventana emergente. Así que echemos un vistazo a otro ejemplo. |
| En este script, el autor intenta abrir una tabla, crear un análisis e imprimir un mensaje en el registro. |
| Y cuando ejecutamos este script, notamos de inmediato que nuestro análisis no se generó. |
| De nuevo, revisamos el registro. |
| y vemos que había una columna que no se encontraba en la tabla de datos, pero el script continuó e imprimió nuestro mensaje en el log. |
| Entonces, lo importante aquí es siempre revisar el registro, especialmente cuando lo que sucede no cumple con sus expectativas. Podría ser tan simple como un nombre de columna mal escrito. |
| El concepto de tabla de datos actual a menudo se describe como tabla activa. Pero, ¿qué hace que la tabla sea la tabla de datos activa o actual y por qué es importante para su secuencia de comandos? |
| Cuando se abre, crea o se actúa sobre una tabla, se convierte en la tabla de datos actual. Pero hay otras formas en que una tabla puede actualizarse en tiempo de ejecución que usted, como autor del script, quizás no haya previsto. |
| Sus tareas que JMP procesa en segundo plano. Por ejemplo, es posible que JMP necesite evaluar una fórmula o realizar una actualización en una ventana. |
| Son estos procesos en segundo plano los que pueden hacer que una tabla diferente a la que pretendía se active en tiempo de ejecución. Y esto puede hacer que su script falle o, peor aún, que ni siquiera se dé cuenta de que JMP usó la tabla incorrecta. |
| Así que aquí hemos proporcionado algunos |
| mejores prácticas para elaborar sus scripts utilizando referencias específicas de tablas de datos. Esta es la forma de garantizar que se utilice la tabla correcta, independientemente de qué tabla esté activa en tiempo de ejecución. |
| En este ejemplo, demostramos cómo puede enviar una llamada bivariada a una tabla de datos específica para garantizar que los datos de esa tabla se utilicen para su análisis. |
| También puede usar la nueva columna como un mensaje a una tabla de datos específica, y esto asegurará que su nueva columna se cree en la tabla deseada y no vaya a la actual. |
| También puede utilizar referencias de tablas de datos opcionales. Aquí, solo estamos demostrando cómo puede usarlo para hacer referencia a columnas y hablaremos con más detalle sobre cómo hacer referencia a columnas en un momento. |
| También puede utilizar referencias de tablas de datos opcionales en funciones; para cada fila y resumir hay dos cuando esté disponible. |
| También nos gustaría sugerirle que evite el uso de una tabla de datos... asignando una referencia a la tabla de datos usando la función de tabla de datos actual en sus scripts de producción. En este ejemplo, unimos dos tablas de datos y nos gustaría asignar una referencia a esa tabla. |
| que se crea a partir de la unión. Ahora, unirse devuelve una referencia a la tabla recién creada. Entonces, en lugar de asignar a la tabla de datos actual, queremos asignar la referencia cuando se crea la combinación. |
| Así que aquí simplemente hacemos nuestra asignación cuando llamamos a la unión y cuando ejecutamos esto |
| podemos ver que, de hecho, nuestra nueva variable DT hace referencia a la tabla de deseos y no se ve afectada por la tabla actual. |
| Ser capaz de identificar una columna utilizando una variable JSL es una tarea común y el método que utilice depende del uso previsto. |
| La función de columna devuelve una referencia a la columna como una unidad completa. Acepta una variedad de argumentos, como que el nombre de la columna es una cadena o una variable de cadena, |
| un índice o una variable numérica que representa un índice. Puede tener un subíndice para hacer referencia al valor de la columna en una fila específica. |
| Algunos lugares donde puede usar la función de columna son llamadas a plataformas, enviar mensajes a una columna o asignar una referencia de variable a una columna. |
| La función como columna devuelve una referencia al valor en la fila actual |
| de la columna especificada. Acepta los mismos argumentos que la función de columna, pero es importante comprender que en JMP, la fila actual siempre es cero a menos que se administre lo contrario. |
| Entonces, algunos lugares excelentes para usar la función como columna son las fórmulas, para cada fila, y seleccionar dónde, porque controlan la fila a medida que evalúan cada fila según su diseño. Así que echemos un vistazo a un ejemplo de lo que queremos decir. |
| Aquí estamos abriendo una tabla de datos de muestra. Hemos asignado una variable JSL al nombre de una columna y estamos intentando usar la función de columna en nuestro seleccionar dónde. |
| Ahora, cuando ejecutamos este script, encontramos que no se seleccionaron filas. ¿Porqué es eso? Porque seleccione dónde se evalúa en cada fila, |
| el uso de la función de columna sin ningún subíndice no seleccionará ninguna fila. Y recordamos que la función de columna devuelve una referencia a la columna como una unidad completa, por lo que una columna completa de datos nunca será igual a 14. |
| Entonces, las soluciones son usar la función de columna con un subíndice de fila (y este subíndice de fila simplemente significa la fila actual, sea lo que sea mientras se selecciona dónde se evalúa), o puede usar la función como columna para seleccionar sus filas. |
| El uso de una variable JSL en fórmulas puede resultar problemático por varios motivos. La vida útil de una variable JSL está limitada a la sesión JMP actual y, a medida que cambia el valor de la variable, también puede cambiar el resultado de la fórmula. |
| Y a menos que mires la fórmula en el editor de fórmulas, es posible que no te des cuenta de que tienes un problema. |
| Así que echemos un vistazo a nuestro ejemplo. Aquí, simplemente abro una tabla de datos y establezco una lista de columnas que me gustaría sumar. |
| Estoy creando mi nueva columna de fórmula y estoy usando mi variable JSL en mi función de suma. Así que ejecutemos esto. Y podemos ver que nuestra nueva columna fue creada y completada con datos. Pero echemos un vistazo al editor de fórmulas. Nunca dijimos que nuestra variable JSL se usara en la función de suma. |
| Y cuando descartamos eso y hacemos un cambio en una de las columnas dependientes, también notamos que nuestra fórmula de columna no se actualizó automáticamente. |
| Así que guardemos y cerremos JMP, guardemos esta tabla y cerremos JMP. |
| Y empezaremos de nuevo. |
| Ahora recuerde que la vida útil de esa variable JSL se limitó a la sesión JMP anterior. Así que abramos la tabla y echemos un vistazo a lo que sucede. |
| Notamos que nuestras fórmulas de columna variable... aún no se evaluaron nuevamente. Cuando miramos eso, todavía vemos nuestra variable JSL allí, pero ahora tenemos una línea roja debajo. Y pasamos el cursor sobre él, vemos el nombre de error no resuelto. |
| Si intentamos reevaluar la fórmula, obtenemos el mensaje de error e ignorar los errores hará que todos nuestros datos desaparezcan. Entonces, ¿cómo solucionamos esto? |
| Cuando utiliza una variable en una fórmula, deberá hacer algo para indicarle a JMP que reemplace la variable con su valor antes de evaluar la fórmula. Puedes usar un sustituto para esto, pero hoy vamos a demostrar funciones de expresión. Así que cerremos esta tabla. |
| Abriremos una copia nueva de la tabla y restableceremos nuestra lista de columnas. |
| Y ahora echemos un vistazo a cómo solucionamos esto. |
| Entonces, la función de expresión de evaluación le dice a JMP que evalúe y reemplace cualquier variable allí... en su argumento que esté incluida en una función EXPR. |
| Y luego devolverá la expresión no evaluada. Entonces, en este código, JMP reemplazará la expresión puntajes del SAT y la reemplazará con nuestra lista de columnas. |
| Así que ejecutemos sólo esta sección y veamos qué sucede. Y vemos que la función de suma ahora tiene nuestra lista de columnas que queremos sumar en lugar de la variable. |
| Pero en realidad no creó la columna para nosotros. Simplemente devolvió esta expresión. Entonces, para evaluar eso, agregamos una función de evaluación alrededor de nuestra función de expresión de evaluación. |
| Y esto hará que JMP evalúe toda la expresión de la nueva columna después de que se haya producido el reemplazo. Básicamente, el correo electrónico dice: ejecute... ejecute lo que devuelve la expresión eval, que es esta. |
| Ejecutémoslo y podremos ver que nuestra columna ahora se creó y tenemos los datos como esperábamos. |
| Y nuestra fórmula ya no tiene nuestra variable, tiene nuestra lista de columnas. |
| Y cuando realizamos un cambio en los datos de una columna dependiente, nuestra fórmula ahora se actualiza automáticamente. |
| Así que ahora le pasaré esto a Justin para hablar sobre algunos errores más que se deben evitar. |
| Justin Chilton | Muy bien, otro error que vemos que comete la gente es cuando van a establecer propiedades de columna y la sintaxis puede ser un poco complicada. Entonces, antes de entrar en detalles, |
| hablemos de qué es una columna en términos de propiedades de columna. Básicamente, una columna es solo una |
| repositorio de información de esta propiedad. No realiza ninguna verificación de sintaxis para asegurarse de que |
| lo que le das es correcto y esto le permite almacenar todo lo que quieras. Y esto significa que esto se debe a que el consumidor de la propiedad espera que algo esté en un formato específico, ya sea una plataforma JMP, usando una propiedad de columna o incluso una aplicación JSL. |
| Así que echemos un vistazo a un ejemplo rápido. |
| Y aquí vamos a abrir una tabla a la que hemos llamado propiedades de columna, solo para probar. Tenemos una columna llamada NPN1 y una columna llamada prueba. Y esta columna tiene límites de especificación y una propiedad de acceso, pero queremos |
| agregue las propiedades de límite de especificación para probar. Entonces tenemos aquí lo que pensamos. |
| es la sintaxis correcta para establecer las propiedades de la columna de límites de especificaciones. Ejecutamos esto y no nos da error pero cuando |
| Mire la columna, hay límites de especificaciones en esa columna. |
| Y puedes, pero puedes darte cuenta de que no es correcto. Cuando solicitamos un análisis de la capacidad del proceso con nuestros límites de especificaciones, |
| cuando ejecutamos eso, obtenemos uno para NPN1 pero no obtenemos uno para la columna de prueba. Esto se debe a que lo que se almacena en la propiedad de límites de especificaciones para la columna de prueba no es correcto. |
| Entonces, una forma de hacer esto si ya sabe cómo usar los límites de especificaciones de propiedades establecidas, |
| puede simplemente enviar el mensaje de propiedad a la columna NPN1, que es la columna que sabemos que es correcta. Entonces, si ejecutamos solo esa línea, obtenemos la sintaxis correcta. |
| Y esto en realidad nos muestra que esto debería estar en forma de lista en lugar de argumentos separados. De otra manera, si no está familiarizado con la propiedad get, puede ir a la columna que sabe que es correcta y copiar las propiedades de la columna. |
| Y luego puede pegar eso en su secuencia de comandos y verá que ha agregado propiedades de columna, así como un par de propiedades establecidas. Entonces, agregar propiedades de columna es solo una forma de agrupar múltiples propiedades establecidas. Podemos eliminar eso y podemos eliminar el acceso adicional. |
| propiedad. Entonces, una vez que hayamos terminado de eliminar eso, podemos usar esta propiedad establecida para enviarla a nuestra columna de prueba con el operador de envío. Ahora, cuando ejecutamos esto, |
| nosotros... es... ha sobrescrito nuestros límites de especificaciones, pero podemos confirmarlo ejecutando nuestra misma distribución usando nuestros límites de especificaciones. |
| Entonces, pueden ver aquí que tenemos nuestro análisis de capacidad de proceso para nuestras dos columnas. Este es solo un ejemplo de cómo obtener límites de especificaciones, pero lo mismo se puede aplicar a cualquier propiedad de columna que necesite aplicar y obtener la sintaxis en JSL. |
| Entonces, el siguiente error del que vamos a hablar es la manipulación de los comandos de despacho. Entonces, ¿qué es un comando de despacho? |
| Es lo que aparece en su script guardado cuando guarda el menú del triángulo rojo en la ventana de script o lo guarda en el portapapeles. |
| Y aparece cuando agregas algo como una línea de referencia o cambias algo más como cerrar un cuadro de esquema. Y este comando fue desarrollado como una forma interna para que JMP pueda recrear gráficos. |
| con la personalización que hiciste. Y no estaba previsto que los usuarios |
| personalice esto con variables dinámicas. Eso significa que algunos de los argumentos en el comando de envío no aceptan variables JSL. Entonces, echemos un vistazo a un ejemplo de dónde podría suceder eso. Así que aquí tienes un guión. Tenemos una |
| table y una variable de cadena que usaremos un poco más adelante. Y luego esto es esencialmente lo que devolvería la ventana de guardar en script. Entonces, cuando ejecutamos esto, |
| podemos ver que nuestro comando de despacho que establece el mínimo máximo y el incremento para el eje de medición |
| aquí se establece de cero a 1,4. Ahora podemos ver que el comando de despacho se basa en el |
| título del cuadro de esquema aquí, pero ese título del cuadro de esquema en realidad se basa en nuestra entrada y. Digamos que queremos que esto sea una entrada dinámica de un usuario y todo lo que tenemos es esta variable. Podríamos usar la variable para la Y. |
| Pero entonces también necesitaríamos usar el nombre de esa columna aquí. Entonces, cuando ejecutamos esto, verán que no obtenemos la configuración correcta de los ejes, de 0,4 a 1,2, lo cual no es... entonces eso significa que lo que enviamos no fue procesado. |
| Así que hay un par de maneras de abordar esto. Y el primero será utilizar la solución de expresión de evaluación de la que Wendy habló hace unos minutos. Entonces aquí ves que tenemos la misma expresión de evaluación. De hecho, queremos ajustar la concatenación que probamos en el ejemplo anterior. |
| aquí. |
| Y entonces la expresión de evaluación dirá evaluar todo esto. Entonces, cuando ejecutamos eval EXPR, |
| simplemente reemplaza todo eso con nuestra cadena concatenada y luego, recuerda cuando hacemos la evaluación, |
| ejecuta esa expresión. Entonces aquí tenemos de 0 a 1,4. Entonces esa es una manera. |
| Pero a veces todavía puede resultar un poco complicado. ¿Y cómo deberías manipular realmente esos comandos de envío? Porque todavía estás usando los comandos de envío y tienes que saber cómo funcionan. Entonces, la forma más común de hacer esto es eliminar este comando de envío por completo. |
| Entonces, use lo que llamamos subíndices de cuadros de visualización. Así que aquí voy a ejecutar esto con el comando de envío eliminado y tendremos nuestra configuración de eje original. |
| Y luego lo que vamos a hacer es, antes de que realmente sepamos cómo escribir esto, con solo mirarlo. Entonces vamos a ir a este ícono, este cuadro de esquema, haga clic derecho |
| editar y mostrar la estructura de árbol. Entonces, esto nos muestra la estructura de árbol del cuadro de visualización dentro de este cuadro de esquema y dentro de este cuadro de esquema, pueden ver que este cuadro de axix es el que queremos cambiar. Entonces, dentro de este cuadro de esquema está el cuadro del eje uno. |
| Entonces podemos ir y escribir nuestro guión. Usamos esta función de informe para obtener la capa de informe de la plataforma, OBJ1. |
| Luego creamos un subíndice para obtener el título del cuadro de esquema que sabemos que debería ser, según el nombre de nuestra columna. |
| Y luego, dentro de eso queremos... y queremos ser lo más específicos posible, de modo que si las cosas cambian en una versión futura de JMP, sea menos probable que tengamos problemas. |
| Entonces, dentro de eso, queremos el cuadro de eje 1 y así es como obtenemos ese cuadro de eje, y luego podemos tomar la misma información del comando de envío y simplemente convertirlos en los mensajes que enviamos al cuadro de eje. |
| Y luego pueden ver aquí que ahora la configuración de nuestros ejes es de cero a 1,4. |
| Entonces, otra forma más poderosa de hacer esto es usar XPath. Hace lo mismo, pero puede ser un poco más complicado, pero también permite una mayor flexibilidad para las cosas en versiones futuras de JMP porque puede usar datos subyacentes sobre un cuadro. |
| Entonces, el último error que vamos a discutir es usar solo el espacio de nombres global. Entonces |
| Puede que no lo sepas, pero cuando creas un símbolo sin especificar dónde va, entra en el espacio de nombres global. Así que esto es genial para scripts rápidos cuando simplemente estás simulando algo para tu uso personal. |
| pero puede que no sea una buena idea para los scripts que envía a sus colegas o los scripts que publica o los complementos que publica en la comunidad. |
| Un poco más de detalles sobre cómo funciona el alcance y la búsqueda de nombres en JMP. Comienza desde abajo aquí en este diagrama. El ámbito local puede ser cualquier número de ámbitos, con funciones y cuadro local. |
| Por encima de eso, si no encuentra el símbolo o no lo especificaste para ir en local dependiendo de si estás escribiendo o leyendo, |
| luego está el alcance aquí, y existe esencialmente uno por archivo. Y está el alcance global, que esencialmente es un alcance para su sesión de JMP. Y luego, a la derecha, tenemos el alcance del espacio de nombres, que es algo que realmente debes buscar explícitamente para poder |
| acceso. Echemos un vistazo a un ejemplo. Esto simplemente eliminará todos mis símbolos y, como no especificé dónde deberían ir, irá a los globales. Entonces x es 5. Pero, ¿qué pasa si alguien más tiene un guión que dice, bueno, yo también |
| tener un |
| variable x que quiero usar. Y no voy a especificar dónde ponerlo. Así que lo pondré en 10. |
| Pero luego, cuando regresas a tu script y tal vez sea alguna variable que hayas configurado y luego tienes alguna devolución de llamada en un botón... botón |
| acción que depende de esa variable, luego vas a usarla y la variable ha cambiado en ti y eso probablemente no es lo que deseas. |
| Entonces, ¿cuáles son algunas formas en que podemos abordar esto? Bueno, la forma más sencilla de hacerlo es utilizar los nombres predeterminados aquí (1). Esto significa que nada terminará en el ámbito global, a menos que usted le indique explícitamente que vaya allí. Así que echemos un vistazo |
| en esto |
| ejemplo. Entonces, todo lo que hemos hecho es agregar este nombre predeterminado aquí (1). Puede ir con... generalmente va en la parte superior del script, pero realmente puede ir a cualquier parte. |
| Voy a limpiar mis símbolos y a establecer esta variable x igual a 5. Entonces tenemos otra escritura aquí que es |
| dice que dice quiero acceder a tu, tu x. Pero realmente esta x nunca puede acceder a esta x en este espacio de nombres. Entonces |
| copiemos parte del script y hagamos que X sea igual a 50. |
| Y entonces la X en la escritura de la derecha es 50, pero eso no tuvo ningún efecto en la X en nuestra escritura de la izquierda. Eso es lo que es, es una excelente manera de separar fácilmente sus símbolos de otros scripts y aplicaciones. |
| La otra opción es utilizar un espacio de nombres personalizado. Esto es un poco más avanzado, pero puede ser muy poderoso. Así que aquí estoy de nuevo... limpia mi |
| símbolos y luego crear un nuevo espacio de nombres, configurar una variable x dentro del espacio de nombres y mostrarla. Entonces tiene un valor de cinco. |
| Y tienes otro guión aquí. Quizás este sea uno de tus guiones y lo sabes. |
| myNS existe. Entonces puedes intentar acceder a eso, y puedes hacerlo muy bien, porque sabes el nombre de esto. Pero es mucho menos probable que alguien malvado cambie tu símbolo sin tu conocimiento. Entonces |
| Puedo cambiar este símbolo y seguirá siendo 10, pero si solo hago X, realmente no tendrá ningún efecto en el resultado de la X del espacio de nombres. |
| Se lo devolveré a Wendy, quien nos informará sobre algunos recursos que se pasaron por alto. |
| wendymurphrey | Gracias Justin. Hay muchos recursos disponibles para aprender más sobre JSL y muchos de ellos son gratuitos. Aquí hemos vinculado algunos de los lugares más comunes para buscar y aprender más sobre JSL. |
| También ofrecemos soporte técnico al que puede comunicarse y también hay un par de libros sobre el tema. Por supuesto, siempre te animamos a que eches un vistazo a nuestros recursos formativos y a los planes que tienen para ti. |
| Asegúrese de echar un vistazo al documento asociado con esta presentación sobre la comunidad JMP, ya que hay algunos errores más que cubrimos allí para usted y que no tuvimos tiempo de discutir hoy. Gracias por ver. |