POWERQUERY :: Evaluation par tranche dans une liste de sous-listes

oguruma

XLDnaute Occasionnel
Bonjour
pour faire suite à ce post https://excel-downloads.com/threads...un-element-dans-une-sous-liste-v2-0.20083542/
il est possible de faire une évaluation par tranche selon un barème.
Exemple de barème :
ListRank =
{
{(x)=>x=0, "Robuste"},
{(x)=> x<=5, "Fiable"},
{(x)=> x<=10, "Fragile"},
{(x)=> x<=15, "Peu fiable"},
{(x)=> x<=20, "Non fiable"},
{(x)=> x>20, "Inqualifiable"}
},

On imagine que l'on doive qualifier des applications dans une certification de données selon le nombre d'incidents enregistrés sur une période.
La liste présentée ci-dessus parle d'elle-même.
Cette liste est facilement transposable dans un barème tarifaire avec l'application d'une remise selon un volume d'achats et de renvoyer un pourcentage ou un coefficient qui sera appliqué sur un montant.
Ces données peuvent être issues d'un fichier texte, le but étant de l'importer dans la foulée de l'évaluer pour appliquer ce barème. Certes on peut faire cela sous Excel de multiples manières mais l'intérêt de cette solution c'est qu'elle présente ZERO formule Excel. Donc par exemple un gain de performances Excel si on importe un très gros fichier. Tout se passe dans PowerQuery avec en résultat un fichier Excel plus light dépourvu de formules.

La fonction fnEvaluateByRankInterval
PowerQuery:
let fnEvaluateByRankInterval =
    (
      pValue as any,
      pList as list
    ) as any =>
   
      let
        Result = List.First(List.Select(pList, (v) => v{0}(pValue))){1}
      in
        Result
in
  fnEvaluateByRankInterval

Exemple de requête :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="TB_INCIDENTS"]}[Content],  
    TypeModif = Table.TransformColumnTypes(Source,{{"NBR_INCIDENTS", Int64.Type}, {"APPLI", type text}}),
    ListRank =
          {
             {(x)=>x=0, "Robuste"}, 
              {(x)=> x<=5, "Fiable"}, 
              {(x)=> x<=10, "Fragile"}, 
              {(x)=> x<=15, "Peu fiable"}, 
              {(x)=> x<=20, "Non fiable"},
              {(x)=> x>20, "Inqualifiable"} 
          },
    EvalIncidents = Table.AddColumn(TypeModif, "EVALUATION", each fnEvaluateByRankInterval([NBR_INCIDENTS],ListRank))
in
    EvalIncidents

1720107291198.png


L'évaluation s'effectue ici :
PowerQuery:
EvalIncidents = Table.AddColumn(TypeModif, "EVALUATION", each fnEvaluateByRankInterval([NBR_INCIDENTS],ListRank))
 

Pièces jointes

  • EvaluateByTranche_V0.008.xlsx
    19.1 KB · Affichages: 4
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD