Hola, expertos de JSL:
Tengo un gran problema para encontrar el segundo valor máximo, el tercer máximo, etc.en 1 columna.
Para una columna a continuación, espero identificar el valor máximo de los 5 primeros y marcar el valor en una columna específica.
Parece que solo puedo encontrar el col max, pero tengo mucha dificultad para encontrar el segundo máximo, el tercer máximo, etc.
¿Existe alguna fórmula estándar para esta solución?
Gracias
(100,
232,
343,
121,
100,
132,
100,
100,
100,
100,)
Hola,
Esto depende de lo que quiera decir con "max" y de si está dispuesto a ordenar la tabla. Abordaré algunos casos comunes y espero que uno de ellos cubra su caso de uso.
Caso 1: "max" significa la posición en el conjunto de datos ordenados de los valores originales, incluidos los duplicados.
Puede usar una transformación incorporada para esto. Haga clic con el botón derecho en los datos de la columna de interés y seleccione Nueva columna de fórmula> Distribución> Clasificación (orden inverso).
Al hacer clic en la fórmula que se crea, tenemos lo siguiente, que funciona tanto si la tabla está ordenada como si no:
(Col Number( :Col1 ) - Col Rank( :Col1 )) + 1

Caso 2: "Máx" significa posición en un conjunto ordenado de valores ÚNICOS (sin duplicación). No está dispuesto a clasificar previamente los datos.
*** Nota: debido a su dependencia de matrices asociativas, este enfoque solo funciona con datos numéricos que tienen como máximo un decimal.
Podemos usar la fórmula complicada (y costosa):
Loc(
Matrix(
Reverse(
Associative Array( (:Col1 << get data table) :: col1 << getvalues ) << get keys
)
),
:Col1
)
Esta fórmula hace lo siguiente:
1) Obtiene los valores de la columna de interés y los pasa a una matriz asociativa, que elimina los duplicados.
2) Obtiene las claves de la matriz asociativa (en orden de menor a mayor de forma predeterminada) e invierte su orden.
3) Utiliza la función Loc () para informar la posición de la fila dada dentro de la matriz de claves de matriz asociativas invertidas.
Caso 3: Como en el caso 2, pero estamos dispuestos a clasificar previamente (descender) por la columna de interés.
En este caso podemos utilizar una fórmula más simple y eficiente, aunque autorreferencial:
If( Row() == 1,
1,
Lag( :Formula3 ) + (Lag( :Col1 ) != :Col1)
)
A continuación, vemos la diferencia entre la primera fórmula y las dos siguientes. Nuevamente, solo la tercera fórmula depende de la clasificación de la tabla.

Si desea probar esto, ejecute el siguiente script. Primero aparece sin clasificar, pero después de una pausa de un segundo, se clasifica por col1, momento en el que los resultados de la tercera fórmula coincidirán con los resultados de la segunda.
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Col1", <<SET values=""></SET>
Salud,
Brady