Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
jleraille
Partner - Creator
Partner - Creator

2eme valeur plus grande d'une liste - equivalent de Grande.Valeur

Bonjour

Dans un script je souhaite recupérer la 2ème valeur la plus grande d'une liste de valeur

Equivalent Excel : Grande.Valeur(Val1:Val2:Val3;Val4

Load CLE, Val1, Val2, Val3, Val4,  plusgrandevaleur(Val1, Val2, Val3, Val4, 2)

Merci d'avance

Jacques

5 Replies
jleraille
Partner - Creator
Partner - Creator
Author

J'ai vu la proposition dans Max value of variables or an array

=RangeMax(If(RangeMax(vA, vB, vC) = vA, 0, vA), If(RangeMax(vA, vB, vC) = vB, 0, vB),  If(RangeMax(vA, vB, vC) = vC, 0, vC))

Mais cela ne répond pas complètement  pour les cas ou il y a 2 fois la même valeur max

Exemple :

8, 9, 9 : attendu 9   et non 8

7, 7, 6 : attendu 7 et non 6

6, 5, 6 : attendu 6 et non 5  

nicolas66
Contributor III
Contributor III

Bonjour,

peut-être la fonction Firstsortedvalue ?

@+

sfatoux72
Partner - Specialist
Partner - Specialist

En ajoutant un test pour identifier les cas ou la valeur max existe plus d'une fois :

=if(SubStringCount('|'&vA&'|'&vB&'|'&vC&'|', '|'&RangeMax(vA, vB, vC)&'|') > 1,
RangeMax(vA, vB, vC),
RangeMax(If(RangeMax(vA, vB, vC) = vA, 0, vA), If(RangeMax(vA, vB, vC) = vB, 0, vB),  If(RangeMax
(vA, vB, vC) = vC, 0, vC))
)

sfatoux72
Partner - Specialist
Partner - Specialist

Ou alors de cette manière :

J'ai essayé avec la fonction Max(Value, 2), mais ça ne retournait pas ce que tu voulais

//Chargement de tes données
Data:
Directory;
LOAD CLE,
      Val1Val2Val3Val4
FROM Data.xlsx  (ooxml, embedded labels, table is Feuil1);

//------------------------------------------------
//Traitement pour déterminer le second plus grand
//------------------------------------------------
Data_tmp:
CrossTable(ValName, Value)
LOAD CLE,
      Val1Val2Val3Val4
Resident Data;

Left Join(Data)
LOAD CLE,
      // max(Value, 2) as SecondePlusGrandeValeur
     SubField(Concat(Value, ',', Value), ',', -2) as SecondePlusGrandeValeur
Resident Data_tmp
Group by CLE;

DROP Table Data_tmp;
//------------------------------------------------

jleraille
Partner - Creator
Partner - Creator
Author

Bonjour,

J'ai réglé mon problème en cas de valeur identique en ajoutant dans la formule 0,1, 0,01 et 0,001 a VAL1, VAL2 et VAL3

RangeMax(vA +0,1, vB +0,01, vC +0,001) = vA +0,1....