Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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



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:

oguruma

XLDnaute Occasionnel
il y avait une petite erreur dans la 1ère version chargée, la dernière V0.008 est la bonne
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…