Uso de variables en el comando SendToReport(Dispatch(...))<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Estoy escribiendo un script JMP que crea una ventana con casillas de verificación y menús desplegables. Estos menús se utilizan para seleccionar condiciones que luego se pueden utilizar para ejecutar informes y generar gráficos. Uno de los gráficos que estoy haciendo tiene un número diferente de líneas dependiendo de cuántas casillas de verificación estén seleccionadas. Pude generar con éxito el gráfico con todas las líneas sin importar qué casillas de verificación estén seleccionadas. El problema que tengo es con la leyenda. El primer conjunto de datos siempre aparece con puntos en la leyenda y en la línea. El resto de los conjuntos de datos de ese gráfico tienen en línea su línea representada en la leyenda. Para solucionar este problema, normalmente haría doble clic en la leyenda, desmarcaría manualmente los puntos de la leyenda que no quiero que se muestren y luego copiaría el script para que esto suceda automáticamente. Cuando hay 4 conjuntos de datos en el gráfico, el script se verá así después de realizar mis cambios en el cuadro de leyenda:
Enviar a informe (
Despacho(
{},
"400",
caja de leyenda,
{Posición( {-1, -3, -3, -3, 0, 1, 2, 3} )}
)
... //(otros comandos de Despacho())
)
Tengo otros comandos que van al gráfico, como cambios en el nombre de la etiqueta del eje, por lo que aparece entre otros comandos de Dispatch() dentro del comando SendToReport(). El problema que tengo es que no puedo hacer que la lista dentro del comando Postion() cambie dependiendo del número de casillas de verificación seleccionadas. Puedo codificar la lista correcta, pero el código solo funciona para esa cantidad de casillas de verificación seleccionadas. Por ejemplo, si configuro la lista como {-1, -3, -3, 0, 1, 2}, el código solo funciona correctamente cuando tengo 3 casillas de verificación seleccionadas. Creé una variable que cambia a la lista correcta dependiendo del número de casillas de verificación seleccionadas (y verifiqué que se está asignando correctamente) pero cuando coloco la variable dentro de la función Posición() el código no realiza el cambio que quiero a. El siguiente código asigna la lista correcta a la variable PL dependiendo de cuántas casillas de verificación se hacen clic (las variables dentro de la función SUMA() representan las salidas de las casillas de verificación).
PL = Si(
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 1, {-1, 0},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 2, {-1, -3, 0, 1},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 3, {-1, -3, -3, 0, 1, 2},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 4, {-1, -3, -3, -3, 0, 1, 2, 3},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 5, {-1, -3, -3, -3, -3, 0, 1, 2, 3, 4},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 6, {-1, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4 , 5},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 7, {-1, -3, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4, 5, 6},
Suma(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 8, {-1, -3, -3, -3, -3, -3, -3, -3, 0, 1 , 2, 3, 4, 5, 6, 7},
);
He verificado que este código asigna la lista correcta a la variable. Cuando conecto la variable de la siguiente manera, no se elimina la etiqueta de puntos del cuadro de leyenda como me gustaría, y cuando copio el script del gráfico que generé, falta el comando Dispatch() en el cuadro de leyenda. .
Despacho(
{},
"400",
caja de leyenda,
{Posición(PL)}
)
He usado variables de manera similar antes, pero siempre hago referencia a un número en la lista en lugar de intentar insertar una lista completa (por ejemplo, PL[1]). He probado muchas variaciones de esto pero ninguna ha funcionado hasta ahora (PL[], {PL}, {PL[]}).
Por favor ayúdenme a descubrir qué estoy haciendo mal. Avíseme si algo no está claro y puedo brindarle más detalles necesarios para ayudar a responder la pregunta. Este es un problema menor en el gran esquema de las cosas, pero me está volviendo loco y tengo problemas para superarlo sin encontrar una solución. ¡Ayuda!
Re: Usar variables en el comando SendToReport(Dispatch(...))¡Eres muy bienvenido!
Re: Usar variables en el comando SendToReport(Dispatch(...))Gracias por tu respuesta Ian. Entendí lo que estaba pasando hasta que apareció msTBD. Supongo que esta es la variable que cambiará según las casillas de verificación seleccionadas, pero no veo dónde entra en juego la cantidad de casillas de verificación.
Re: Usar variables en el comando SendToReport(Dispatch(...))Hola Felipe,
¡Esta solución funcionó para mí! ¡¡Muchas gracias por su ayuda!!
Re: Usar variables en el comando SendToReport(Dispatch(...)) jbakri21
Además de la sugerencia de Ian. Aquí hay otro enfoque.
Primero, si tiene una declaración IF como la que tiene, usaría Choose() en su lugar. Los argumentos de las condiciones son una secuencia de números enteros que comienzan en 1, por lo que las cláusulas de igualdad ( expr==1, expr==2, expr==3) están integradas. (Consulte la Referencia de sintaxis JSL para obtener más información).
Dicho esto, esta sería su nueva declaración condicional:
PL = Elegir ( Suma ( IW27, II09, II44, II08, II42, IW29, CC23, IW24 ),
{- 1 , 0 }, // 1
{- 1 , - 3 , 0 , 1 }, // 2
{- 1 , - 3 , - 3 , 0 , 1 , 2 }, // 3
{- 1 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 }, // 4
{- 1 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 }, // 5
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 }, // 6
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 }, // 7
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, // 8
) ;
Para usar PL dentro de otra declaración JSL, como está intentando hacer con Dispatch(), la variable de parámetro debe estar incluida dentro de Expr(). Entonces,
Despacho(
{},
"400",
caja de leyenda,
{Posición( Expr. ( ES) )}
)
Esto le permite evaluar (o ampliar) los contenidos de PL, antes Se evalúa todo. Para que esto funcione, debe envolver toda la función de gráficos con Eval (Eval Expr ()). Un ejemplo completo aparece a continuación:
dt = Abierto ( "$SAMPLE_DATA/Turismo australiano.JMP" );
pl = { 0 , - 1 , 1 , - 1 , 2 , - 1 };
//PL = {-1, 0, -1, 1, -1, 2};
evaluar (
Evaluación Expr (
dt << Generador de gráficos (
Mostrar panel de control( 0 ),
Variables(
X( :Fecha ),
Y( : Nombre ( "Ingresos ($'000)" ) ),
Y( : Nombre ( "Tasa de ocupación de camas (%)" ) ),
Y( : Nombre ( "Duración media de la estancia (días)" ) )
),
Elementos( Posición( 1 , 1 ), Puntos( X, Y, Leyenda( 4 ) ), Más suave( X, Y, Leyenda( 3 ) ) ),
Elementos( Posición( 1 , 2 ), Puntos( X, Y, Leyenda( 1 ) ), Más suave( X, Y, Leyenda( 2 ) ) ),
Elementos( Posición( 1 , 3 ), Puntos( X, Y, Leyenda( 6 ) ), Más suave( X, Y, Leyenda( 5 ) ) ),
Enviar a informe (
Despacho( {}, "título del gráfico" , TextEditBox, {Establecer texto( "Tendencias turísticas" )} ),
Despacho( {}, "400" , LegendBox, {Posición( Expr. (PL))})
)
)
)
);
¡Espero que esto ayude!
Re: Usar variables en el comando SendToReport(Dispatch(...))(Adaptando un ejemplo más simple del Índice de secuencias de comandos) probablemente necesite utilizar este tipo de enfoque (o tal vez una ligera variante):
Nombres predeterminados aquí ( 1 ) ;
//Este mensaje se aplica a todos los objetos del cuadro de visualización
Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
vivac = bivariado ( y ( : peso ) , X ( : altura ) ) ;
rbiv = vivac << informe ;
EM = 5 ;
agregarMarcadores = Expr. ( rbiv << Despacho ( {} , "Trama de Bivar" , Cuadro de marco , { Tamaño del marcador ( msTBD )} ) ) ;
Sustituir en ( agregarMarcadores , Expr. ( msTBD ) , EM ) ;
agregarMarcadores ;