Merci Jim et MS. Cela fonctionne avec brio !
Si vous voulez une formule de colonne, cela devrait fonctionner. Indépendant du tri.
Local( {L = Associative Array( :Label ) << get keys}, Loc( L, :Label ) )
La même approche pourrait être utilisée dans JSL sans formule de colonne.
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;
Il y a plusieurs façons de le faire .... (à laquelle je peux penser, si tôt le matin)
- Utiliser un tableau récapitulatif pour créer les rangs
- Tableaux d'exécution==>Résumé
- Grouper par votre colonne Libellé
- En supposant que le tableau de données de sortie est trié de bas en haut, créez une nouvelle colonne appelée "Rank" et donnez-lui la formule ........ Row ()
- Exécuter les tables ==> Mettre à jour pour joindre la table récapitulative à la table d'origine, correspondant à la colonne Libellé
- Créer une nouvelle colonne de formule de classement
- Trier les données par étiquette
- Créez une nouvelle colonne appelée Rang avec la formule
If( Row() == 1,
count = 1,
If( :Label != Lag( :Label ),
count
++)
);
count;
- Assurez-vous d'aller dans les informations sur la colonne et de supprimer le après la création de la colonne.La raison en est que puisque la formule est basée sur l'ordre des données et l'exhaustivité des données, toute modification des données (tri, etc.) réexécutera la formule et modifiera éventuellement le classement.
Je souhaite calculer une nouvelle colonne pour classer une colonne de manière unique. Vous trouverez ci-dessous l'exemple de sortie que je souhaite obtenir. Mais utiliser la formule de classement JSL ne m'aide pas à réaliser ce que je veux. Quelqu'un peut-il me conseiller s'il vous plaît ?
La formule que j'utilise est Col Rank(:Label)
| Étiquette | Rang | Ce que je veux |
| 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 |
Ce problème est résolu depuis longtemps, mais j'ai trouvé une solution hier, que je partage si elle peut être utile. Créez une nouvelle colonne de formules avec cette formule :
Col Maximum(
Col Rank(
If( Row() == Col Minimum( Row(), :Label ),
:Label,
.
)
),
:Label
)
En résumé, cela crée d'abord un nouveau tableau avec le libellé de la ligne correspondant à sa première occurrence dans la colonne d'origine, et des « . » partout ailleurs. Ensuite, nous demandons le classement de chaque libellé, ce qui génère un autre tableau avec le classement du libellé au lieu du libellé lui-même. Enfin, nous générons un tableau avec le classement de toutes les lignes portant ce libellé, qui se retrouve dans la colonne de formules.
Dans mon cas, j'essayais de classer des groupes d'ensembles de données en fonction de leur valeur la plus élevée dans une autre colonne (par exemple, avec les colonnes Groupe, Ensemble, Temps, Valeur). Je voulais trouver le rang de l'ensemble au sein du groupe en fonction de la valeur la plus élevée observée au fil du temps. Voici une formule qui a fonctionné :
Col Maximum(
Col Rank(
If ( Row() == Col Minimum( Row(), :Group, :Set),
Col Maximum( :Value, :Group, :Set ),
.
),
:Group,<BR /> <
<TIE></TIE> ),
:Group, :Set
)
Je ne sais pas si c'est la meilleure façon, mais cela fonctionne, et ChatGPT n'a pas pu proposer de solution du tout, donc peut-être que cela aidera quelqu'un.