Salve comunità JMP,
Questa è la prima volta che pubblico e il mio primo grande progetto di scripting JMP, quindi per favore abbi pazienza. Questo forum è stato molto utile per arrivare dove sono finora.
Obiettivo: Avere un dashboard JMP che apre e analizza tutti i file excel situati in una directory che mostra i grafici IR per ogni numero di asset. Live nel senso che ogni volta che si apre la dashboard/script esegue e aggiorna i grafici.
Vincoli: Impossibile modificare il layout dei report Excel.
Di seguito sono riportati i miei frammenti di codice che funzionano correttamente in modo indipendente. Quando ho messo tutto insieme, JMP si è schiantato su di me.
Potrei avvicinarmi a tutto ciò in modo errato. Potrebbe essere più semplice aprire ogni file e aggiungere le colonne a una nuova tabella di dati. In base a quante colonne potrebbe generare un numero X di grafici.
Qualsiasi aiuto sarebbe molto apprezzato.
Codice per creare carta di controllo con linea di riferimento . Vorrei estrarre il valore per la linea di riferimento dal foglio di calcolo allegato requisito di forza campo e titolo da numero di attività campo.
Visualizza altro... Codice per aprire tutti i file nella directory , ma i file o i dati devono avere le intestazioni nella riga 1 e i dati che iniziano nella riga 2 per funzionare.
Visualizza altro...dirpath = Pick Directory();
TheFileList = Files In Directory( dirpath );
For( i = 1, i < 100, i++,
dt = Open( "F:\IPC\IPC PULL TEST RECORD LOGS\" || TheFileList[i], worksheet( "Sheet1" ) );
dt << Control Chart(
Sample Label( :Date ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Pull Force Reading, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Pull Force Reading"},
"2",
ScaleBox,
{Min( 5 ), Max( 18 ), Inc( 2 ), Minor Ticks( 1 ), Add Ref Line( 8, "Solid", "Black", "LSL", 4 )}
),
Dispatch(
{"Individual Measurement of Pull Force Reading"},
"1",
ScaleBox,
{Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )}
),
Dispatch( {"Individual Measurement of Pull Force Reading"}, "IR Chart of IM", FrameBox, {Frame Size( 820, 420 )} ),
Dispatch( {"Individual Measurement of Pull Force Reading"}, "IR Chart of IM", FrameBox( 2 ), {Frame Size( 65, 405 )} )
)
);
);dirpath = Seleziona directory(); TheFileList = File nella directory( dirpath ); For( i = 1, i < 100, i++, dt = Open( "F:\IPC\IPC PULL TEST RECORD LOGS\" || TheFileList[i], worksheet( "Sheet1" ) ); dt << Control Chart( Sample Label( :Date ), Group Size( 1 ), KSigma( 3 ), Chart Col( :Pull Force Reading, Individual Measurement ), SendToReport( Dispatch( {"Individual Measurement of Pull Force Reading"}, "2", ScaleBox , {Min( 5 ), Max( 18 ), Inc( 2 ), Minor Ticks( 1 ), Add Ref Line( 8, "Solid", "Black", "LSL", 4 )} ), Dispatch( {" Misurazione individuale della lettura della forza di trazione"}, "1", ScaleBox, {Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )} ), Dispatch( {"Misurazione individuale della lettura della forza di trazione" }, "IR Chart of IM", FrameBox, {Frame Size( 820, 420 )} ), Dispatch( {"Misurazione individuale della lettura della forza di trazione"}, "IR Chart of IM", FrameBox( 2 ), {Frame Size ( 65, 405 )} ) ) ); );
Codice per formattare un file riorganizzando intestazioni e dati .
Visualizza altro...dt = Open("F:\IPC\IPC PULL TEST RECORD LOGS\Asset# 3042.xlsx", worksheets("sheet1"));
dt << Delete rows (1::13);
var = dt:column 11[2];
dt:column 11[8] = var; //data
var = dt:column 11[1];
dt:column 11[7] = var; //heading
var = dt:column 3[1];
dt:column 12[7] = var; //heading
var = dt:column 3[2];
dt:column 12 [8] = var; //asset #
dt << delete rows (1::6);
dt << delete columns(1,3,5,7,9,13::25);
colNames = dt << get column names;
For( i = 1, i <= N Items( colNames ), i++,
Column( i ) << set name( Column( i )[1] )
);
dt << delete rows(1);dt = Open("F:\IPC\IPC PULL TEST RECORD LOGS\Asset# 3042.xlsx", worksheets("sheet1")); dt << Elimina righe (1::13); var = dt:colonna 11[2]; dt:colonna 11[8] = var; //dati var = dt:colonna 11[1]; dt:colonna 11[7] = var; //intestazione var = dt:colonna 3[1]; dt:colonna 12[7] = var; //intestazione var = dt:colonna 3[2]; dt:colonna 12 [8] = var; //asset # dt << cancella righe (1::6); dt << cancella colonne(1,3,5,7,9,13::25); colNames = dt << ottiene i nomi delle colonne; For( i = 1, i <= N Items( colNames ), i++, Column( i ) << set name( Column( i )[1] ) ); dt << cancella righe(1);
Jim,
Ti ho visto contribuire a molte discussioni durante la mia ricerca e risoluzione dei problemi. Sono davvero onorato di averti contribuito alla mia discussione qui.
All'inizio ho avuto dei problemi durante l'esecuzione dello script. Dopo aver esaminato il registro e il debugger, ho scoperto che si stava fermando su un determinato file. Il file successivo era un file di prova che avevo formattato in modo diverso. Ho rimosso quel file, non ho cambiato lo script e il file ha funzionato magnificamente . Successivamente ho aperto un file durante l'esecuzione dello script e ho ricevuto un altro errore, ma è stata una soluzione semplice (chiudi il file).
Intendo comprendere l'intero codice, ma ho alcune ulteriori personalizzazioni che spero tu possa aiutare anche con:
- È possibile aggiungere il valore LSL al grafico e persino spostarsi sullo stesso lato (a destra) di UCL/LCL?
- Alcuni set di dati hanno un LSL di 50+. Questo non si adatta al grafico corrente, quindi ho modificato l'intervallo su 1 - 100. C'è un modo per prendere il requisito della forza di trazione e usarlo a +/- 10 o 20 per l'intervallo?
- Alcuni fogli excel sono vuoti. C'è un modo per omettere i grafici?
Modificare : Ho impiegato un po' di tempo oggi per aggiungere le personalizzazioni di cui sopra ed ecco il codice modificato per quanto sopra. Sembra che sia abbastanza difficile cambiare l'etichetta di riferimento. L'unico suggerimento che ho trovato è stato quello di creare una nuova casella di testo e utilizzare quel codice, ma non sono sicuro di come collegare l'altezza Y della linea di riferimento.
Names Default To Here( 1 );
// Delete the old Dashboard
Try( NW << close window );
dirpath = Pick Directory();
TheFileList = Files In Directory( dirpath );
// Create the Dashboard window to place the charts into
NW = New Window( "Asset Dashboard", <<JOURNAL>col=Column( Current Data Table(), "Pull Force Reading");
tableVal = col[22];
if (tableVal == "", i++);
// Capture the Force Requirement value and add it to the graph if it is valid
dt:Pull Force Reading << data type( numeric ) << modeling type( continuous );
theForceRequirement = Num( Word( 1, dt:Force Requirement[1], " " ) );
If( Is Missing( theForceRequirement ) == 0,
<STRONG>range = theForceRequirement;</STRONG>
theForceRequirement = ",Add Ref Line(" || Char( theForceRequirement ) || ", \!"Dashed\!", \!"Black\!", \!"LSL\!", 4 )";,
theForceRequirement = " "
);
// Capture the Asset number
If( dt:Name( "Asset#" )[1] == "",
theAsset = "Unknown",
theAsset = dt:Name( "Asset#" )[1]
);
// Generate the code to produce the chart along with the LSL value
theExpr =
"cc = Control Chart(invisible,
Sample Label( :Date ),
Group Size( 2 ),
KSigma( 3 ),
Chart Col( :Pull Force Reading, Individual Measurement(Show Zones( 1 ), Shade Zones( 1 ),Test 1( 1 ), Test 3( 1 ))),
SendToReport(
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"2\!",
ScaleBox,
{Min( <STRONG>if( (range - 20) <= 0 , 0, range - 20)</STRONG> ), Max( <STRONG>range + 20</STRONG> ), Inc( 2 ), Minor Ticks( 1 )"
|| theForceRequirement ||
" }
),
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"1\!",
ScaleBox,
{Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )}
),
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"IR Chart of IM\!",
FrameBox,
{Frame Size( 820, 420 )}
),
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"IR Chart of IM\!",
FrameBox( 2 ),
{Frame Size( 65, 405 )}
)
)
);";
// Run the generated code
Eval( Parse( theExpr ) );
// Close the outline box of the output and set the title based upon the asset value
Report( cc )[Outline Box( 1 )] << Close( 1 ) << set title( "Asset# " || theAsset );
// Append the display output to the display window
VLB << Append( Report( cc ) );
// Clean up the environment by closing the display window and the data table
//cc << close window;
//Close( dt, nosave );
); // End of For Loop</JOURNAL>
Penso che questo sia vicino a quello che vuoi.Potrebbe essere necessario qualche ritocco, ma come minimo dovrebbe darti un buon inizio su come mettere tutto insieme
Names Default To Here( 1 );
// Delete the old Dashboard
Try( NW << close window );
dirpath = Pick Directory();
TheFileList = Files In Directory( dirpath );
// Create the Dashboard window to place the charts into
NW = New Window( "Asset Dashboard", <<JOURNAL></JOURNAL>