Re: Formule colonneUna domanda: perché ENT4 contiene la durata dal 2500 ma ENT2 non contiene la durata dal 1749?
Ri: formula colonnaUn errore nel database, ho aggiornato il database!
Grazie per l'osservazione.
Re: Formule colonnePuoi farlo con una formula, ma lo farei con lo scripting. Di seguito è riportato un esempio che funziona almeno con i dati di esempio
Names Default To Here(1);
dt = Open("$DOWNLOADS/Test(1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Output("Matrix"), Num(Word(-1, col_name)));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(num_colnr > :T); // indices of num colums larger than :T value
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));Ri: formula colonnaGrazie per la risposta.
Ho un'osservazione, mi sembra che nel tuo codice tu stia confrontando con gli elementi della colonna T, tuttavia ho dimenticato di specificare che i valori di T possono essere in qualsiasi ordine (non necessariamente crescente), in modo che i valori delle operazioni sono disposte in ordine crescente di avanzamento.
Per esempio :
T = 690 / op = 47
T = 550 / op = 55
E il progresso segue l'ordine delle operazioni!
Seconda osservazione, nel mio database ho valori numerici in formato durata per durate T, con il formato "h:m:s".
Re: Formule colonneSe ho capito bene, la mia soluzione dovrebbe ancora funzionare. Dipende solo dal fatto che :1500, :1749,... colonne sono nello stesso ordine di :duree 1500, :duree 1749,... colonne. Inoltre, anche se JMP ti mostra valori di durata formattati in modo pulito in realtà (credo) sono ancora secondi (puoi verificarlo cambiando Formato in Migliore, ad esempio dalle impostazioni della colonna).
Ri: formula colonnaImmagino ci sia un problema nel codice.
Il problema qui sarebbe nell'assegnazione della variabile "colidx": non confrontiamo i numeri della variabile T ma le operazioni corrispondenti a questi numeri (qui le colonne gialle).
Nell'esempio sopra per la prima riga sarebbe:
if prima riga ":1500" > prima riga ":op" -> aggiungi durata 1500
if prima riga ":1749" > prima riga ":op" -> aggiungi durata 1749if prima riga ":2100" > prima riga ":op" -> aggiungi durata 2100
if prima riga ":2500" > prima riga ":op" -> aggiungi durata 2500
e fallo per ogni riga...
Re: Formule colonneQuindi cambia
colidx = Loc(num_colnr > :T);
A
colidx = Loc(num_colnr > :"opé"n);
e apporta le modifiche corrispondenti a Loc (usa una riga specifica invece dei nomi di colonna) e num_colnr (non è necessario che siano numeri)
Ri: formula colonna
Grazie per la tua risposta, ho già cambiato l'assegnazione di "colidx" come da te indicato.
Tuttavia, non vedo quali modifiche dovrei apportare a: "e apportare le modifiche corrispondenti a Loc (usa nomi di riga specifici anziché nomi di colonna) e num_colnr (non sono necessari numeri)."
Puoi dirmi in modo più dettagliato per favore?
Ri: formula colonnaHo modificato il valore di num_colnr con questo codice per selezionare le colonne necessarie per quanto segue:
SNames = dt << Get Column Names(String, "Nominal");
For(i=1, i <= N Elementi(Snomi), i++,
sclmn = Colonna(Snomi[i]);
mostra(sclmn);
);
Questo codice mi permette di ottenere tutte le colonne corrispondenti alla parte gialla del database.
Tuttavia, non riesco ad apportare le modifiche corrispondenti per "Loc".
Re: Formule colonneNames Default To Here(1);
dt = Open("$DOWNLOADS/Test (1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Word(-1, col_name));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(dt[Row(), num_colnr] > :"opé"n);
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));
Abbonamento tabella dati
Ri: formula colonnaSul mio database ho 900 colonne diverse (colonne gialle), questo significa che il numero "num_colnr" è una lista con molti numeri:

Eseguendo lo script JSL che hai condiviso con me, ottengo questo tipo di errore:

Mentre num_colnr come nella foto sopra è un elenco di numeri
Ri: formula colonnaE aggiungendo "Num" per convertire in numerico:
num_colnr = Transform Each({col_name}, dur_cols, Num(Word(-1, col_name)));
show(num_colnr);ottengo questo tipo di errore:

Re: Formule colonneHai una colonna denominata "711" nella tabella dei dati? Non capisco quel messaggio di errore così com'è in francese e la mia ipotesi migliore è che sia uguale a questo
Expecting a number or list of numbers at row 1 in access or evaluation of 'dt[ /*###*/Row(),num_colnr]', <BR />Bad Argument("1500"), dt[/*###*/Row(), num_colnr]
at line 14 in C:\Users\jarmo\Documents\Script.jsl
il che potrebbe significare che manca la colonna denominata "711".
Ri: formula colonna
Sì, questa è la mia prima colonna (tra tutte le colonne di colore giallo):
Re: Formule colonneOk, forse sta quindi indicando che una (o più) di quelle colonne mancano e non dice davvero quale. Quindi forse la mia logica su come ottengo quelli dalle colonne duree non è corretta
Ri: formula colonnaSì, probabilmente hai ragione, guarderò dalla mia parte.
Grazie per il tuo prezioso aiuto!
Formula di colonnaBuongiorno a tutti,
Sto cercando di creare una formula su diverse colonne nel mio database. Non è così facile da capire, spiegherò il mio obiettivo usando un esempio:

Parte grigia:
Ecco, ecco 4 diversi tipi di oggetto (ENT1,..,ENT4). Ad ognuno degli oggetti è associato un numero di avanzamento (colonna T), questi numeri sono legati ad operazioni ben definite.
Parte gialla:
Queste celle mostrano a quali “numeri” sarà sottoposto ciascun oggetto e associano questo numero alle operazioni. Quando le celle sono vuote significa che l'oggetto non subirà questa operazione.
L'obiettivo è:
- Sommare le durate, sapendo che l'oggetto ha fatto progressi (Es: l'oggetto ENT2 si trova al numero 1749, quindi quello che faceva prima nel 1500 non ci interessa)
- Prendiamo l'oggetto ENT2, dovremmo aggiungere la durata 2100 e la durata 2500 perché questi sono i numeri a cui deve subire questo oggetto.
Grazie per l'aiuto,
Cordiali saluti
Automazione e scripting