Ciao a tutti -
Sto cercando una formula di colonna che restituisca la seguente colonna desiderata di seguito.Per semplicità in questo post ogni gruppo ha 3 righe, ma il set di dati che ho attualmente ha gruppi con un numero variabile di righe.
Qualsiasi aiuto apprezzato!
| Gruppo | Tempo | Punto | Prima volta non riuscita (colonna desiderata) |
| UN | 1 | Passaggio | 8 |
| UN | 3 | Passaggio | 8 |
| UN | 8 | Fallire | 8 |
| B | 1 | Passaggio | Passaggio |
| B | 2 | Passaggio | Passaggio |
| B | 6 | Passaggio | Passaggio |
| C | 1 | Passaggio | 3 |
| C | 3 | Fallire | 3 |
| C | 7 | Fallire | 3 |
@utente8421 ,
Questa è solo un'alternativa divertente che utilizza le formule della tabella dati. Funzionerà per gruppi di dimensioni diverse e se la tabella non è ordinata.
La logica è trovare il numero minimo di righe per gli errori in ciascun gruppo. Col Minimo(... , Di) è la chiave. Le funzioni statistiche di colonna che utilizzano l'opzione Per sono funzioni molto utili, ma spesso trascurate.

Formula per la colonna "Prima riga non riuscita"

Formula per la colonna "Time First Failed". Nota se la sintassi sembra strana, la formula a destra è Tempo, quindi seleziona Pedice dal Riga funzioni e trascina la colonna 4, "Prima riga non riuscita"

Ecco una formula che funziona con la tua tabella di dati di esempio.Non è stato testato oltre, quindi potrebbe essere necessario apportare alcune modifiche
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 9 ),
New Column( "Group", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C"} ) ),
New Column( "Time", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 3, 8, 1, 2, 6, 1, 3, 7] ) ),
New Column( "Score",
Character,
"Nominal",
Set Values( {"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Fail"} )
)
);
dt << New Column( "First Time Failed",
character,
formula(
If( Row() == 1,
dt = Current Data Table();
check = :Score;
If( :Group == :Group[2],
Failed = Char( Col Max( :Time, :Group ), Failed = :Score )
);
,
If( :Group == Lag( :Group ),
If( :Score == "Fail",
check = "Fail"
);
Failed = Char( Col Max( :Time, :Group ) );
,
If( check == "Pass",
lagGroup = Lag( :Group );
:First Time Failed[dt << get rows where( :Group == lagGroup )] = "Pass";
Failed = Char( Col Max( :Time, :Group ) );
);
check = :Score;
)
);
failed;
)
);