filtro dati per loopCIAO,
Sono abbastanza nuovo nello scripting. Capisco il ciclo for ma ho bisogno di un po' di aiuto qui.
Non riesco a trovare l'esempio del ciclo for per un filtro dati nella guida allo scripting. Se qualcuno potesse aiutarmi con la sintassi, sarebbe fantastico.
Quello che sto cercando di fare è che ho una mappa ad albero e devo costruire un ciclo "for" con la tabella dei filtri dati per salvare automaticamente gli output del grafico come file .png.
Ho allegato una figura. Ad esempio, condizione 1: wafer 11, scegliendo tutti i trimset Vpp per 25C e Formula NO (1 grafico)
condizione 2: wafer 12, scegliendo tutti i trimset Vpp per 85C (0,11111) e Formula NO (1 grafico)
condizione 3: tracciare ciascun valore di trimset per tutto per il wafer 11 (9 grafici) e il wafer 12 con SÌ (2 grafici)
Sono in grado di farlo se lo faccio uno per uno in un codice, ma non insieme.
Grazie
Re: filtro dati per loopGrazie @David_Burnham , @Craige_Hales Craige e @txnelson
Ragazzi, spaccate!
Re: filtro dati per loopCarino!Re: filtro dati per loopL'esempio che fornisco di seguito contiene codice che salterà le combinazioni per le quali non sono presenti righe
http://www.pega-analytics.co.uk/blog/scripting-data-filters/
Re: filtro dati per loopCapisco cosa sta succedendo. Grazie per l'ottima spiegazione Craige.
Credo che se la condizione non trova alcuna riga associata alla condizione, si interrompe e si ferma.
"Questa clausola Where per la tabella dati 'Tabella finale' non ha prodotto righe: Wafer == "12" e Formula == Vuoto()"
Può invece procedere in modo da poter continuare a tracciare il ciclo?
Re: filtro dati per loope nel codice di esempio, gb è a piattaforma oggetto. IL rapporto () chiede all'oggetto piattaforma il DisplayBox che contiene il report visibile della piattaforma. La piattaforma non è a conoscenza del fatto che ci siano più DisplayBox attorno ad essa. Devi utilizzare il metodo <Re: filtro dati per loop
Giusto. oppure GB non è mai stato impostato oppure GB è già chiuso.
Puoi usare
show(type(gb));
showproperties(gb);
nello script per ottenere alcune informazioni sull'oggetto. Dovresti vedere qualcosa di simile nel registro:
Type(gb) = "Scriptable";
Show Control Panel [Boolean] [Default On] (Displays or hides the control panel.)
Show Legend [Boolean] [Default On] (Displays or hides the legend to the right of the graph.)
Legend Position [Enum] {Right, Bottom, Inside Left, Inside Right}
Legend Settings [Action](Opens a dialog to modify the properties of the legend.)
Continuous Color Theme [Action](Se .... < a lot more follows>
In JMP, un oggetto "scriptable" è un oggetto come a Casella di visualizzazione o a piattaforma (o molte altre possibilità) che ha metodi. Un DisplayBox ha un metodo denominato genitore che viene utilizzato con l'operatore << per ottenere la casella padre di DisplayBox. La funzione ShowProperties elenca tutti i metodi conosciuti da DisplayBox. Puoi vederli nell'indice degli script (nel menu Aiuto) in un formato più facile da leggere.
Quando lo script dice "aspettarsi uno scriptable..." significa che la variabile gb non contiene un oggetto scriptable.
Re: filtro dati per loopDal tuo commento credo che tu abbia un malinteso sulla sceneggiatura di Craig che ha pubblicato.Nel suo codice, non è mai aperta più di 1 istanza del generatore di grafici alla volta.Il puntatore al costruttore di grafici, "gb", punta all'esecuzione corrente del costruttore di grafici.Crea un oggetto immagine dell'output del Costruttore di grafici e lo salva in un file.Quindi CHIUDE l'oggetto del generatore di grafici (gb<
Se il tuo codice genera più generatori di grafici e ognuno di essi utilizza "gb" come handle che punta all'istanza del generatore di grafici, "gb" punta solo all'ultima istanza del generatore di grafici.
Re: filtro dati per loopCiao Craige,
L'ho implementato e ho iniziato ad espandere i cicli for.
Ho ricevuto questo errore, Send Expects Scriptable Object{630} nell'accesso o nella valutazione di 'Send' , Report( gb ) << /*###*/parent/*###*/... È perché ci sono troppe finestre aperte e JSL non si rende conto a quale GB mi riferisco?Re: filtro dati per loopGrazie CraigeRe: filtro dati per loopdt = Open( "$sample_data/big class.jmp" );
ages = Data Table( "big class" ) << Summary( Group( :age ), Freq( "None" ), Weight( "None" ) );
sexes = Data Table( "big class" ) << Summary( Group( :sex ), Freq( "None" ), Weight( "None" ) );
Delete Directory( "$temp/myPics" );
Create Directory( "$temp/myPics" );
For( iage = 1, iage <= N Rows( ages ), iage++,
thisAge = ages:age[iage];
For( isex = 1, isex <= N Rows( sexes ), isex++,
thisSex = sexes:sex[isex];
Eval(
Eval Expr(
gb = dt << Graph Builder(
Size( 508, 438 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
where( age == Expr( thisAge ) & sex == Expr( thisSex ) )
)
)
);
parentBox = (Report( gb ) << parent)< picture = parentBox << getpicture;
picture << saveImage( "$temp/myPics/age" || Char( thisAge ) || "sex" || Char( thisSex ) || ".png", "png" );
// optional: Open( "$temp/myPics/age" || Char( thisAge ) || "sex" || Char( thisSex ) || ".png" );
gb << closewindow;
);
);
Close( ages, "nosave" );
Close( sexes, "nosave" );
Show( Files In Directory( "$temp/myPics" ) );
Sembra che potresti dover prendere la casella di visualizzazione "nonno" per il generatore di grafici; the parent)<
screen capture of large icons of graphs saved by scriptscreen capture of large icons of graphs saved by scriptcattura dello schermo di grandi icone di grafici salvati dallo script
Re: filtro dati per loopLo è, ma il costruttore di grafici accetta anche clausole where.
Migliore,
M
Re: filtro dati per loopCredo che l'esempio riguardasse una distribuzione y x x. Sto cercando di farlo per una mappa ad albero nel generatore di grafici. Ci proverò. Grazie M_Anderson
Re: filtro dati per loopPotresti provarci @Craige_Hales risposta a questa domanda- collegamento . Piuttosto che provare a lavorare con il filtro dei dati locali, aggiungere una clausola where nella chiamata alla piattaforma è probabilmente un modo più elegante per fare ciò che stai cercando.