Applicazione con più tabelle di dati e non creerà correttamente i filtri di dati localiCiao a tutti, sto cercando di creare un'applicazione che faccia riferimento a più tabelle di dati e all'interno di tale applicazione sono presenti filtri di dati che si applicano ai grafici di ciascuna tabella di dati. Quando inserisco il filtro dati locale, le opzioni della colonna sono corrette. Tuttavia, quando eseguo l'applicazione, tutti i filtri di dati locali faranno riferimento a qualsiasi tabella di dati che ho aperto per ultima. Entrambi affermano di fare riferimento alla tabella di dati corretta nel generatore di applicazioni, ma questo in qualche modo viene modificato durante l'avvio dell'applicazione.
Ad esempio, utilizzando due set di dati di esempio:
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "Full Path" ),
Set Invisible( 0 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "Full Path" ),
Set Invisible( 0 )
)
),
Script(JSL Quote(// This script is executed when the application is run.
// Named objects have been created for the application modules
// (for example, "Module1") and the pre-defined object
// "thisApplication" refers to the application object itself.
// Variables and functions declared here are scoped to the
// Application namespace.
) ),
Allocate(
Module1 = Plan(
PreAllocate,
Script(JSL Quote(// This script is executed when a new module instance is
// created. The pre-defined object "thisModuleInstance" refers
// to the instance object, but other objects such as boxes and
// scripts have not yet been created. Variables declared here are
// scoped to the ModuleInstance namespace.
// This special function will receive parameters passed to CreateInstance()
OnModuleLoad({},
);
thisModuleInstance << Create Objects;
// After this point your module instance objects have been created
// and can be referred to by name (for example, "Button1").
) ),
Allocate(
List1 = V List Box();
Splitter1 = H Splitter Box();
DataFilter1 = DataTable1 << Data Filter( Local );
Report3 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) )
)
);
Splitter2 = H Splitter Box();
DataFilter2 = DataTable2 << Data Filter( Local );
Report2 = Platform(
DataTable2,
Bivariate( Y( :Head ), X( :Mass ) )
);
),
Organize(
Reparent( Splitter2( Report2 ) );
Reparent( Splitter2( DataFilter2 ) );
Reparent( List1( Splitter2 ) );
Reparent( Splitter1( Report3 ) );
Reparent( Splitter1( DataFilter1 ) );
Reparent( List1( Splitter1 ) );
Relocate( List1( 160, 160 ) );
),
Initialize(
List1 << Background Color( 2147483647 );
List1 << Border( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Enabled( 1 );
List1 << Horizontal Alignment( "Default" );
List1 << Margin( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Padding( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Text Color( 2147483647 );
List1 << Vertical Alignment( "Default" );
List1 << Visibility( "Visible" );
List1 << set horizontal( 0 );
Splitter1 << Background Color( 2147483647 );
Splitter1 << Border(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Enabled( 1 );
Splitter1 << Horizontal Alignment( "Default" );
Splitter1 << Margin(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Padding(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Text Color( 2147483647 );
Splitter1 << Vertical Alignment( "Default" );
Splitter1 << Visibility( "Visible" );
Splitter1 << Dockable( 0 );
Splitter1 << Set Width( 835 );
Splitter1 << Set Height( 497 );
Splitter1 << Set Sizes( {0.5, 0.5} );
Splitter1 << set horizontal( 1 );
Splitter1 << Set Min Size( 835, 497 );
Splitter1 << Set Max Size( 835, 497 );
Splitter1 << Set Auto Stretching( 1, 1 );
Splitter2 << Background Color( 2147483647 );
Splitter2 << Border(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Enabled( 1 );
Splitter2 << Horizontal Alignment( "Default" );
Splitter2 << Margin(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Padding(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Text Color( 2147483647 );
Splitter2 << Vertical Alignment( "Default" );
Splitter2 << Visibility( "Visible" );
Splitter2 << Dockable( 0 );
Splitter2 << Set Width( 648 );
Splitter2 << Set Height( 338 );
Splitter2 << Set Sizes( {0.5, 0.5} );
Splitter2 << set horizontal( 1 );
Splitter2 << Set Min Size( 648, 338 );
Splitter2 << Set Max Size( 648, 338 );
Splitter2 << Set Auto Stretching( 1, 1 );
)
)
),
Initialize(
Module1 << Auto Launch( 1 );
Module1 << Set Module Type( "Report" );
Module1 << Set Window Title( "^TABLENAME - ^APPNAME" );
Module1 << Set Min Size( 0, 0 );
Module1 << Set Max Size( 30000, 30000 );
Module1 << Set Auto Stretching( ., . );
)
) << EditRi: Applicazione con tabella di dati multipli e non creerà correttamente i filtri di dati localiPosso confermare che questo problema verrà risolto con JMP 15.2 e versioni successive. Più filtri di dati locali in un'applicazione manterranno la loro connessione alla tabella di dati appropriata.
Ri: Applicazione con tabella di dati multipli e non creerà correttamente i filtri di dati localiQuesto ha funzionato!! Grazie mille! Ero in un vicolo cieco nel trovare una soluzione alternativa, soprattutto perché pensavo di non poter più vedere lo script che stava creando l'applicazione. Quando la mia applicazione è diventata abbastanza grande (oltre 60 piattaforme con oltre 28 filtri di dati locali e gli elementi di visualizzazione per contenerli tutti) l'opzione "salva script" sembrava fornirmi solo la parte di script personalizzata della mia applicazione. Si scopre che stava solo mettendo tutta la funzione Allocate su una riga. Quando ho premuto lo script di riformattazione ha rivelato le centinaia di righe aggiuntive. Questo non è necessariamente un bug, immagino, ma ho pensato che potresti volerne essere consapevole.
Quando ho seguito i passaggi che hai suggerito, tutto funziona correttamente. Spero che questo venga risolto nelle iterazioni future, poiché dovrò creare l'intera applicazione prima di tornare allo script per modificare i filtri in modo che siano corretti.
Ri: Applicazione con tabella di dati multipli e non creerà correttamente i filtri di dati localiCiao Cameron, grazie per la tua risposta. In realtà è così che l'avevo originariamente, ma questo crea una serie di problemi. Altrove nell'applicazione ho un'impostazione con script da applicare a questi filtri (di cui ce ne sono più di una dozzina nella mia applicazione attuale). Non sono riuscito a capire come accedere al filtro con lo scripting quando è stato incluso come parte della piattaforma. Fondamentalmente non riuscivo a capire come scrivere i comandi sulle mie piattaforme, solo gli elementi di visualizzazione per loro. Questo è un problema separato, ma se ti capita di sapere come risolverlo sarebbe utile anche questo!
Ri: Applicazione con tabella di dati multipli e non creerà correttamente i filtri di dati localiCiao,
Potrei replicare quello che stavi vedendo. Anche se questa è solo una soluzione, prova questo:
1. Dal copione che hai fornito. Cambia l'ultima riga per dire Esegui piuttosto che Modifica e prova a eseguire lo script. Nelle mie mani, la tua sceneggiatura fa quello che mi aspetto che faccia.
2. Quando si crea l'applicazione, modificare la posizione della tabella dati in Nome, anziché nella tabella dati corrente.
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "name" ),
Set Invisible( 0 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "name" ),
Set Invisible( 0 )
)
),
L'opzione Posizione è in basso.
A volte il puntatore "allocazione" non è come previsto. Quindi, nello script, ricontrolla che il filtro 1 punti alla tabella 1 e il filtro 2 punti alla tabella 2.
Allocate(
List1 = V List Box();
Splitter1 = H Splitter Box();
DataFilter1 = DataTable1 << Data Filter( Local );
Report3 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) )
)
);Ri: Applicazione con tabella di dati multipli e non creerà correttamente i filtri di dati localiCIAO @DopeAgonist ,
Questo è un comportamento piuttosto strano e probabilmente merita l'attenzione di uno sviluppatore.Ho verificato ciò che hai descritto costruendo l'applicazione da zero e anche modificando l'associazione del filtro dati locale nello script alla tabella corretta.Sono stato in grado di visualizzare i filtri di dati appropriati aggiungendoli manualmente nello script using
Splitter1 << Prepend(DataTable1 << Data Filter("Local"));
Splitter2 << Prepend(DataTable2 << Data Filter("Local"));Ma questo continua a non funzionare.Indipendentemente dal modo in cui lo fai, i filtri di dati locali non sono collegati correttamente alla tabella per qualche motivo.La modifica dei valori di qualsiasi filtro non ha alcun effetto sulla selezione delle righe nelle tabelle.
Se crei i filtri di dati dalle piattaforme di analisi che stai inserendo nella tua applicazione, allora i filtri funzionano.Per esempio:
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "Full Path" ),
Set Invisible( 1 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "Full Path" ),
Set Invisible( 1 )
)
),
Script(JSL Quote(// This script is executed when the application is run.
// Named objects have been created for the application modules
// (for example, "Module1") and the pre-defined object
// "thisApplication" refers to the application object itself.
// Variables and functions declared here are scoped to the
// Application namespace.
) ),
Allocate(
Module1 = Plan(
PreAllocate,
Script(JSL Quote(// This script is executed when a new module instance is
// created. The pre-defined object "thisModuleInstance" refers
// to the instance object, but other objects such as boxes and
// scripts have not yet been created. Variables declared here are
// scoped to the ModuleInstance namespace.
// This special function will receive parameters passed to CreateInstance()
OnModuleLoad({},
);
thisModuleInstance << Create Objects;
// After this point your module instance objects have been created
// and can be referred to by name (for example, "Button1").
) ),
Allocate(
Report2 = Platform(
DataTable2,
Bivariate(
Y( :Head ),
X( :Mass ),
Automatic Recalc( 1 ),
Local Data Filter
)
);
Report1 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) ),
Automatic Recalc( 1 ),
Local Data Filter
)
);
),
Organize(
Relocate( Report1( 0, 0 ) );
Relocate( Report2( 10, 680 ) );
),
Initialize( Glue() )
)
),
Initialize(
Module1 << Auto Launch( 1 );
Module1 << Set Module Type( "Report" );
Module1 << Set Window Title( "^TABLENAME - ^APPNAME" );
Module1 << Set Min Size( 0, 0 );
Module1 << Set Max Size( 30000, 30000 );
Module1 << Set Auto Stretching( ., . );
)
) << EditCerto, questo non sembra esattamente come lo avevi, ma forse funzionerà abbastanza bene per te.