Grazie Jim e MS. Funziona brillantemente!
Se vuoi una formula di colonna, dovrebbe funzionare. Indipendente dall'ordinamento.
Local( {L = Associative Array( :Label ) << get keys}, Loc( L, :Label ) )
Lo stesso approccio potrebbe essere utilizzato in JSL senza una formula di colonna.
dt = Current Data Table();
dt << New Column( "Rank Unique", continuous );
L = Associative Array( :Label ) << get keys;
For Each Row( :Rank Unique = Loc( L, :Label ) );
dt = current data table();
dt:Rank << delete formula;
Ci sono un paio di modi per farlo... (a cui riesco a pensare, così presto la mattina)
- Utilizzare una tabella di riepilogo per creare i ranghi
- Esegui tabelle==>Riepilogo
- Raggruppa in base alla colonna Etichetta
- Supponendo che la tabella dei dati di output sia ordinata dal basso verso l'alto, crea una nuova colonna chiamata "Rank" e dagli la formula........Row()
- Esegui Tabelle==>Aggiorna per unire la tabella di riepilogo alla tabella originale, facendo corrispondere la colonna Etichetta
- Crea una nuova colonna della formula Classifica
- Ordina i dati per Etichetta
- Crea una nuova colonna chiamata Rango con la formula
If( Row() == 1,
count = 1,
If( :Label != Lag( :Label ),
count
++)
);
count;
- Assicurati di andare su Informazioni colonna e rimuovi dopo che la colonna è stata creata.La ragione di ciò è che poiché la formula si basa sull'ordine dei dati e sulla completezza dei dati, eventuali modifiche ai dati (ordinamento ecc.) eseguiranno nuovamente la formula e probabilmente modificheranno le classifiche.
Voglio calcolare una nuova colonna per classificare una colonna in modo univoco. Di seguito sono riportati gli esempi di output che voglio ottenere. Ma utilizzare la formula del ranking JSL non mi aiuta a ottenere ciò che desidero. Qualcuno può consigliarmi?
La formula che utilizzo è Col Rank(:Label)
| Etichetta | Rango | Quello che voglio |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,max | 1 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,max | 2 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,max | 3 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,max | 4 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,max | 5 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,max | 6 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,max | 7 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,max | 8 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,max | 9 | 3 |
Questo problema è stato risolto da tempo, ma ieri ho trovato una soluzione che ho pensato di condividere nel caso in cui possa essere utile a qualcuno. Crea una nuova colonna formula con questa formula:
Col Maximum(
Col Rank(
If( Row() == Col Minimum( Row(), :Label ),
:Label,
.
)
),
:Label
)
In pratica, questo crea prima un nuovo array con l'etichetta nella riga corrispondente alla sua prima istanza nella colonna originale e "." in tutti gli altri punti. Quindi chiediamo la classificazione di ciascuna etichetta, il che si traduce in un altro array con la classificazione dell'etichetta al posto dell'etichetta stessa, e infine generiamo un array con la classificazione di tutte le righe con quell'etichetta, che è ciò che finisce nella colonna formula.
Nel mio caso, stavo cercando di classificare gruppi di insiemi di dati in base al loro valore più alto in un'altra colonna, ad esempio con le colonne Gruppo, Insieme, Tempo, Valore, volevo trovare la posizione del set all'interno del gruppo in base al valore più alto osservato nel tempo. Ecco una formula che ha funzionato:
Col Maximum(
Col Rank(
If ( Row() == Col Minimum( Row(), :Group, :Set),
Col Maximum( :Value, :Group, :Set ),
.
),
:Group,<BR /> <
<TIE></TIE> ),
:Group, :Set
)
Non so se questo sia il metodo migliore, ma funziona. ChatGPT non è riuscito a offrire alcuna soluzione, quindi forse questo potrà aiutare qualcuno.