Conecte los filtros de datos locales entre las ventanas de Graph Builder desde diferentes tablas de datosSupongamos que tengo dos ventanas de Graph Builder de diferentes tablas de datos, cada una con un Filtro de datos local que filtra en "número de ejecución" y "tiempo".
¿Es posible conectar los dos filtros de datos locales para que permanezcan sincronizados?
¿O tal vez con JSL para extraer la configuración actual del Filtro de datos locales n.° 1 y aplicarla al Filtro de datos locales n.° 2?
(Supongo que el paso 1 es obtener una referencia a los filtros de datos locales, aún no he descubierto cómo hacerlo; esto es lo que tengo hasta ahora:
// get the last Graph Builder
win = Get Window List();
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
localDataFilter = last_gb << XPath("//OutlineBox[text()='Local Data Filter']");)
Automatización y secuencias de comandosRe: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datos¿Podría concatenar las tablas juntas y luego usar algún tipo de columna de agrupación para separarlas en diferentes gráficos? Puede ser más fácil que jugar con los controladores de cambio de filtro.
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosEn realidad, no: una tabla es un resumen de alto nivel de los resultados de la ejecución, e identificamos los problemas de ese resumen, luego cambiamos a la gráfica de ejecución detallada y seleccionamos la ejecución específica en el filtro de datos.No es obvio para mí cómo la fusión de esas dos tablas permitiría ese tipo de comportamiento.
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datos¿Qué hay de las uniones virtuales?
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datospublicación similar:
https://community.jmp.com/t5/Discussions/Virtual-linking-two-tables-via-JSL-scripting/mp/657682/highlight/true#M84705
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosSupongo que uno necesita filtros de datos no locales, de modo que la funcionalidad Enviar/Recibir de los enlaces virtuales transmita la configuración del filtro.
Para mi caso, esto fue demasiado lento.
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosY si desea copiar todo el filtro, puede usar copiar/pegar:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :sex ), X( :age, Position( 1 ) ), Y( :weight ), Overlay( :sex ) ),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 3 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :age ),
Where( :age == 15 ),
Display( :age, N Items( 6 ) )
)
);
df1 << copy local data filter();
gb2 << paste local data filter();
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosMe gusta la idea, pero obviamente hay algo que no entiendo en su solución, ya que falla cuando intento ejecutarla.
Esto es lo que tengo hasta ahora:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
gb2 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "M" ),
Display( :sex, N Items( 2 ) )
)
);
df2 = gb2 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "F" ),
Display( :sex, N Items( 2 ) )
)
);
broadcastFilter = Function( {},
//get the script
filterScript = df1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval(
Substitute(
Expr(
df2 << Start Over << _filter_
),
Expr( _filter_ ), Name Expr( filterExpression )
)
);
);
// activate the Filter Change Handler
rs = df1 << Make Filter Change Handler( broadcastFilter );Aquí está el error: "broadcastFilter tiene 0 parámetros () pero se proporcionaron 1 argumentos (18)".¿Alguna idea de lo que está hablando?No creo que esté proporcionando ningún argumento en esa última línea...
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosOh. Lo siento.
broadcastFilter = Function( {x}, Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosAl final, volví a cambiar a los filtros de datos locales y agregué un controlador de cambio de filtro al primer filtro de datos.
Funciona bastante bien - Si no olvida el
rs=
Controlador de cambio de filtro
broadcastFilter=Function({x}, // Make Filter Change Handler need a function with 1 Argument
//get the script
filterScript = DataFilter1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval( Substitute( Expr( Datafilter2 << Start Over << _filter_ ), Expr( _filter_ ),
Name Expr( filterExpression ) ) );
// activate the Filter Change Handler
rs = DataFilter1 << Make Filter Change Handler( broadcastFilter); // will call broadcastFilter() with 1 Argument: # of selected rows
editar:argumento x añadido y comentado. Una función
broadcastFilter=Function({},-sin argumentos - no funciona.
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datos¡Vaya, funciona!Ojalá entendiera qué estaba haciendo ese código...
Última pregunta: suponiendo que ya tengo una ventana de Graph Builder abierta con un filtro de datos local, sé cómo puedo obtener la variable de objeto gb .jsl:
win = Get Window List();
graphs = Filter Each({w}, win, If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0) );
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;... pero ¿cómo puedo obtener la variable de objeto df1 de la variable de objeto gb?(Se siente como si hubiera probado 100 cosas diferentes...)
Re: Conectar filtros de datos locales entre ventanas de Graph Builder desde diferentes tablas de datosUna opción es usar una idea similar a la que usa para el generador de gráficos
df = (gb << top parent)[Outline Box("Local Data Filter")] << Get Scriptable Object;
El filtro de datos locales no está dentro del generador de gráficos, por lo que primero debe viajar a un nivel superior (en este caso, uso << padre superior). Usar XPath con el atributo helpKey y el valor Data Filter podría ser una solución un poco más robusta y sería algo como esto
(gb << top parent) << XPath("//OutlineBox[@helpKey='Data Filter']")
Editar: si tiene la posibilidad de múltiples filtros de datos en la misma ventana, es posible que deba hacer que la definición del punto de partida sea un poco más específica que simplemente usar << top parent.