Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

Highlighted
jleraille
New Contributor II

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

Tags (1)
5 Replies
jleraille
New Contributor II

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

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
New Contributor III

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

Bonjour,

peut-être la fonction Firstsortedvalue ?

@+

sfatoux72
Valued Contributor

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

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
Valued Contributor

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

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
New Contributor II

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

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....