Caractérisation d'un array (PowerQuery)

Bonjour,

Mon problème semble simple mais fastidieux à ce stade.

De fait, je souhaiterais savoir s'il existe un moyen disons plus automatisé (via Power Query) pour caractériser ma feuille exemple ci-jointe.

Mon objectif est de caractériser le mélange de couleurs d'une peinture (qui peut être faite d'une couleur unique).

A l'heure actuelle, j'ai deux possibilités pour traiter mes libellés. Dans les deux cas il s'agit d'un array.

Première méthode : un array avec des propriétés (colonnes) qui donnent la composition (présent ou absent dans le mélange). Pour cela, j'ai imaginé deux possibilités. Je ne pense pas que ma première méthode soit la meilleure parce que je vais avoir un tableau démesurément grand (beaucoup de colonnes).

La deuxième méthode (tableau) a 6 propriétés maxi. La première propriété donne le nom de la première couleur, la deuxième la seconde, etc. A mon avis, cette méthode nécessiterait probablement de faire un TCD par la suite. Mais - sauf erreur de ma part - un TCD n'a pas les mêmes qualités qu'une liste (je souhaite pouvoir utiliser des fonctions XLOOKUP ou CALCULATE pour faire des tableaux de bord).

Si vous voyez une troisième possibilité je suis tout ouvert. Par ailleurs, si quelque chose n'était pas clair, n'hésitez pas à me le demander.

Attention les libellés ne sont pas aussi uniforme dans la réalité donc il ne faut pas compter sur un format aussi clair (le comptage de caractères pour isoler les couleurs n'est pas possible par exemple).

Les lignes 7 et 15 sont des cas particuliers : bleu ciel, une nuance de couleur qui contient "bleu" pour voir si on peut dépasser la double correspondance.

Hello,

Une proposition PowerQuery avec les deux méthodes présentées.

Un tableau data et un tableau couleur et le reste se fait tout seul.

Sachant que ce n'est pas sensible au majuscule et minuscule car je traite tout en majuscule pour la correspondance.

Pour les cas particuliers style bleu ciel, si tu mets un tiret là ça risque de ne pas fonctionner.

Il faut juste que tu définisses tes couleurs dans le tableau dédié

@+

Edit : Si tu veux juste les couleurs dans une seule colonne, suffit d'enlever l'étape pivot pour les XLOOKUP et CALCULATE

Bonjour,
Une question :
Pourquoi ne pas séparer les couleurs par une virgule, par exemple ?
Cela permettrait de scinder les chaînes de caractères plus facilement (cas du bleu ciel associé à d'autres couleurs ?).
Cdlt.

Bonjour et merci pour vos réponses,

@Jean-Eric

C'est ce que j'ai pu envisagé mais je ne savais pas trop comment les gérer une fois séparés. Il me semble que cela aurait conduit à une variante de la méthode 2 non ? En tout cas, je suis d'accord sur le principe.

@BAROUTE78

Merci pour vos requêtes. C'est exactement ça.

J'ai compris les étapes mais je ne comprends pas le langage M que vous avez utilisé par moment.

Étaient-ce des manipulations natives ou du code M entré manuellement ?

Il va me falloir transposer ces requêtes du coup, auriez-vous quelques astuces pour mieux comprendre le code de la méthode 1 que vous avez utilisé ? Savoir sur quoi se concentrer par exemple.

A ce stade, je comprends la méthode de la manière suivante :

  • Ajout des lignes de mélanges
  • Ajout d'une colonne : jointure ou déploiement/développement de la liste couleur pour chacune de ces lignes
  • Ajout d'une colonne pour vérifier s'il y a correspondance ou pas
  • Filtrer pour ne garder que les correspondances True
  • Ajout d'une colonne avec valeur =1
  • Pivoter la colonne couleur

Maintenant je liste les fonctions suivantes :

  • Ajout d'une colonne personnalisée avec toutes les valeurs contenues dans le tableau de référence couleur
  • Développer sur de nouvelles lignes
  • Ajout d'une colonne personnalisée en utilisant :
    • la fonction text.contains qui imbrique deux fois text.upper
  • Filtrer avec Table.Selectrows(AddCorresp[.....])
  • Ajout d'une colonne avec une valeur 1 à chaque ligne
    • Table.Addcolumn(filter, "Val", each1)
  • Table.pivot
    • List.distinct

Je ne comprends pas tous les arguments passés dans les fonctions ci-dessus.

Mais globalement, je dois utiliser Google pour les comprendre une à une ou je peux les comprendre depuis le logiciel ?

En vous remerciant à nouveau pour votre précieuse aide !

Re,
J'étais parti avec un délimiteur (,) pour tester.
Baroute78, que je salue, étant intervenu, je n'avais pas posté.
Pas optimisé !
Cdlt.

Hello à tous,

Jean-Eric, bien le bonjour

Voici une version avec code indenté pour les fonctions imbriquées et j'ai commenté toutes les étapes pour les deux méthodes, n'hésite pas à me faire un retour si tu as des questions

@+

Edit : Hello Jean Eric, je pense qu'il y a une coquille dans ta requête Output, étape ExpandData, si tu rajoutes une 4ème couleur je ne pense pas que ça fonctionnera car le Table.ExpandTableColumn est codé en dur.

Je ferai ça pour rendre dynamique la chose :

Bonjour à tous !

@Lama_Del_Ray : Heureux homme que vous êtes.....les Dieux Power Query se sont déjà penchés sur votre berceau...

Je vous livre néanmoins, mon approche (sur la base du fichier de Jean-Eric) :

let
    Source = Excel.CurrentWorkbook(){[Name="t_couleurs"]}[Content],
    Couleurs = Table.AddColumn(Source, "test", each Text.AfterDelimiter([#"Libellé mélange couleur (recette)"],"- ")),
    FracttCouleurs = Table.ExpandListColumn(Table.TransformColumns(Couleurs, {{"test", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "test"),
    GroupBy = Table.Group(FracttCouleurs, {"Libellé mélange couleur (recette)"}, {{"tbl", each Table.AddIndexColumn( _,"Idx",1)}}),
    Expand = Table.Combine(GroupBy[tbl]),
    Préfixe = Table.TransformColumns(Expand, {{"Idx", each "Item." & Text.From(_, "fr-FR"), type text}}),
    Pivot = Table.Pivot(Préfixe, List.Distinct(Préfixe[Idx]), "Idx", "test")
in
    Pivot

Re,
@Baroute78,
Aïe ! J'étais parti pour traiter la virgule.
Pour l'exemple, j'ai inversé la fusion (toujours pas optimisé !).
Cdlt.

Bonjour à nouveau,

J'ai lu vos codes et si je ne comprends pas tout, les choses me paraissent plus familières déjà.

Merci pour cela !

Aussi, je me permets de relancer un peu mon problème puisque j'ai des libellés un peu fantaisistes ou avec des fautes de frappes. Je pourrais remplacer les valeurs par des "Ctrl+F remplacer" mais pour l'apprentissage de PQuery je souhaite soumettre mon cas.

Du coup, pour la couleur "jaune", je peux avoir des libellés qui indiquent "jaun" ou "Jau".

Je souhaiterais comparer le libellé avec des équivalences que je vais pouvoir recenser à la main par ailleurs.

J'ai modifié le fichier de base en rajoutant deux tableaux (seule la disposition colonnes/lignes change).

Au passage, quel disposition privilégieriez-vous (array ou l'inverse) ?

En vous remerciant pour votre aide,

Hello,

Une correction de mon fichier pour la méthode 1 avec la table de correspondance de ce que tu recherches pour les couleurs, enfin une proposition pour la table de correspondance des couleurs.

@+

Bonsoir à tous !

Une approche Power Query, légèrement différente, reposant sur un séparateur (virgule) pour distinguer les différents libellés couleurs. Avec une table de correspondance.

Rechercher des sujets similaires à "caracterisation array powerquery"