Salut les experts JSL,
J'ai un gros problème pour trouver la 2ème valeur max, 3ème max etc dans 1 colonne.
Pour une colonne ci-dessous, j'espère identifier les 5 premières valeurs maximales et marquer la valeur dans une colonne séparée.
Il semble que je ne trouve que le col max, mais j'ai beaucoup de mal à trouver le 2ème max, 3ème max etc.
Existe-t-il une formule standard pour cette solution ?
Merci
(100,
232,
343,
121,
100,
132,
100,
100,
100,
100,)
Salut,
Cela dépend de ce que vous entendez par "max", et si vous êtes prêt à trier le tableau. Je vais aborder quelques cas courants et j'espère que l'un d'entre eux couvrira votre cas d'utilisation.
Cas 1 : « max » signifie la position dans l'ensemble de données trié des valeurs d'origine, y compris les doublons.
Vous pouvez utiliser une transformation intégrée pour cela. Cliquez avec le bouton droit sur les données dans la colonne d'intérêt et sélectionnez Nouvelle colonne de formule > Distribution > Rang (ordre inverse).
En cliquant sur la formule qui est créée, nous avons ce qui suit, qui fonctionne que le tableau soit trié ou non :
(Col Number( :Col1 ) - Col Rank( :Col1 )) + 1

Cas 2 : "Max" signifie position dans un ensemble trié de valeurs UNIQUES (pas de duplication). Ne veut pas pré-trier les données.
***Remarque : en raison de sa dépendance aux tableaux associatifs, cette approche ne fonctionne qu'avec des données numériques comportant au plus une décimale.
Nous pouvons utiliser la formule alambiquée (et coûteuse) :
Loc(
Matrix(
Reverse(
Associative Array( (:Col1 << get data table) :: col1 << getvalues ) << get keys
)
),
:Col1
)
Cette formule effectue les opérations suivantes :
1) Obtient les valeurs de la colonne d'intérêt et les transmet à un tableau associatif, qui supprime les doublons.
2) Obtient les clés du tableau associatif (dans l'ordre du plus bas au plus élevé par défaut) et inverse leur ordre.
3) Utilise la fonction Loc() pour signaler la position de la ligne donnée dans la matrice de clés de tableau associatif inversé.
Cas 3 : Comme dans le cas 2, mais nous sommes disposés à pré-trier (décroissant) par la colonne d'intérêt.
Dans ce cas, nous pouvons utiliser une formule plus simple et plus efficace, bien qu'autoréférentielle :
If( Row() == 1,
1,
Lag( :Formula3 ) + (Lag( :Col1 ) != :Col1)
)
Ci-dessous, nous voyons la différence entre la première formule et les deux suivantes. Encore une fois, seule la 3ème formule dépend du tri de la table.

Si vous voulez essayer cela, exécutez le script ci-dessous. Il apparaît d'abord non trié, mais après une pause d'une seconde, il trie par col1, auquel cas les résultats de la 3ème formule correspondront aux résultats de la seconde.
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Col1", <<SET values=""></SET>
Acclamations,
Brady