Creazione di sottoinsiemi di un datatable con un ciclo For ed esecuzione di operazioni di colonna in ogni sottoinsiemeCara comunità, ho difficoltà su questo argomento, forse qualcuno può aiutare. My Datatable comprende molte parti sotto "Serialnumber" che vengono misurate in diversi momenti "Timestamp". I risultati della Misurazione (come Isc, Pmpp, ...)
viene memorizzato in righe con l'aumentare del tempo di misurazione. Quello che devo fare è normalizzare il valore della misurazione con la primissima misurazione (la prima nel tempo) per ciascuna parte individualmente. Come Parte XY -> (Pmpp/Pmpp0; t=0)
Ho scritto uno script suddividendo il mio grande datatable in molte sottotabelle contenenti solo una parte e la sua misurazione consecutiva nel tempo. Come sotto il codice:
dt_LT = Open(big_datatable.jump);
Mod_Tab = dt_LT << Tabulate( Add Table( Row Table( Grouping Columns( :SerialNumber ) ) ) );
Mod_dt = Mod_Tab << Make Into Data Table;
Mod_dt << Set Name( "Modul-Datatable" );
Zahl_Mod = NRow (Mod_dt);
Current Data Table (Mod_dt);
Mod_List = :Name( "SerialNumber") << Get Values;
content= Text Box(Mod_List);
New Window ("Modul gefunden", content);
Current Data Table (dt_LT);
For (i = 1, i <= Zahl_Mod, i++,
dt_LT << clear row states;
dt_LT << select Where (:Name ("SerialNumber") == Mod_List[i]);
If( N Row( dt_LT << get selected rows ) < 3, Continue() );
Mod = dt_LT << Subset ((selected Rows), Output Table Name("Module_"||Mod_List[i]));
Funziona bene. Ottengo tutte le sottotabelle necessarie. Anche trovare la prima misurazione in ogni sottoinsieme funziona bene. Vedi il codice qui sotto:
Current data table(Mod);
Eval (init_Zeit = col minimum(:Timestamp);
init_flash = Mod << get rows where ((:Timestamp) == init_Zeit);
row = init_flash[1];
Ciò che fallisce è la normalizzazione. Lo script si blocca sull'ultimo sottoinsieme e normalizza tutti gli altri dati con la prima misurazione dell'ultima tabella del sottoinsieme.Vedi lo script qui sotto
Em0 = :Eff_Modul[row];
Ez0 = :Eff_Zelle[row];
FF0 = :FF[row];
Impp0 = :Impp[row];
Isc0 = :Isc[row];
Pmpp0 = :Pmpp[row];
Rs_Serial0 = :Rs_Serial[row];
Rsh_Shunt0 = :Rsh_Shunt[row];
Vmpp0 = :Vmpp[row];
Impp0 = :Impp[row];
Voc0 = :Voc[row];
New Column ("Pmpp_Norm", Numeric, continuous,
Formula ( :Pmpp / Pmpp0));
Nell'ultima tabella del sottoinsieme ottengo un 1 dopo la normalizzazione nelle colonne di misurazione In tutte le altre sottotabelle ottengo un valore inferiore a 1 per il valore normalizzato. Come posso passare da una tabella di sottoinsieme all'interno del ciclo for? Qualcuno può aiutare? Grazie in anticipo
Mickael
Oggetto: sottoimpostazione di un datatable con un ciclo For ed esecuzione di operazioni di colonna in ogni sottoinsiemefunziona bene. Grazie per il tuo aiuto!
Rgds, Mickael
Oggetto: sottoimpostazione di un datatable con un ciclo For ed esecuzione di operazioni di colonna in ogni sottoinsiemeGrazie per la tua risposta. In realtà avevo nel mio ciclo for un'espressione che ho chiamato "I" questo ha creato confusione con l'indice di incremento "i". Ho rinominato la mia espressione "I1" e ha funzionato!
Grazie, Mickael
Oggetto: sottoimpostazione di un datatable con un ciclo For ed esecuzione di operazioni di colonna in ogni sottoinsiemeIl valore L è il lato sinistro di un compito. Stai cercando di assegnare qualcosa a una non variabile. Per esempio:
Insert Into( { 5, 6, 7 }, 8 );
Questa alternativa funzionerebbe:
my list = { 5, 6, 7 };
Insert Into( my list, 8 );
Oggetto: sottoimpostazione di un datatable con un ciclo For ed esecuzione di operazioni di colonna in ogni sottoinsiemeCiao, grazie per la tua risposta super veloce!
ho riscritto lo script come proposto. Il calcolo funziona bene per il primo elemento dell'elenco rispetto alle interruzioni del ciclo for e non passa mai all'elemento successivo. Il debugger menziona qualcosa con riferimento a un oggetto che non ha valore L...
Non so davvero cosa significhi. Devo resettare qualche variabile? o eliminare la selezione su un tavolo attivo?
Grazie mille ancora!
VG, Mickael
Oggetto: sottoimpostazione di un datatable con un ciclo For ed esecuzione di operazioni di colonna in ogni sottoinsiemeSi utilizza una variabile globale pmpp0 in una formula di colonna e quando il valore di Pmpp0 continua a cambiare a ogni iterazione, i calcoli della formula cambiano di conseguenza. Se si utilizza questo approccio, è necessario utilizzare in modo esplicito il valore corrente valutato della variabile nella Formula.
Per esempio:
Pmpp0 = :Pmpp[row];
F = Eval Expr(:Pmpp / Expr(Pmpp0));// Formula expression with evaluated Pmpp0
Mod << New Column("Pmpp_Norm", Numeric, continuous, Formula(Name Expr(F)));