Transformation de données

Bonjour à tous,

Mes compétences sur Power Query et Excel ont été mises à mal par le problème suivant :

Voici mes données d'entrée :

Date de péremptionTypeNom
01/08/2002 22:17Fruitpêche
01/08/2002 22:17LégumeBrocolis
10/07/1980 17:36Fruitfraise
10/07/1980 17:36PlanteOrchidée

Et voici mes données de sortie :

DateAncienne ValeurNouvelle Valeur
10/07/1980 17:36Fraise Orchidée
01/08/2002 22:17Fraise SecoyaPêche Orchidée Brocolis

Et voici les règles de transformation associées que j'aimerais appliquer de manière automatique :

  • Regrouper tous les "nom" d'une même "date" dans la colonne "Nouvelle Valeur",
    • Les données devront être séparées par des espaces.
    • Les dates doivent être classées par ordre chronologique.
  • A chaque nouvelle occurrence de date, si un "type" de "nom" change pour une des valeur, celle-ci devra être remplacée par la valeur la plus récente.
    • Dans l'exemple ci-dessus, dans la deuxième ligne,
      • la valeur du type "Fruit" est passée de fraise à Pêche.
      • la valeur du type "Plante" reste inchangée car aucune valeur de ce type n'est présente à la date suivante.
      • la valeur de type "Légume" est ajoutée car aucune valeur de ce type n'était présente à la date précédente.
  • Une autre colonne appelée "Ancienne valeur" devra reprendre la valeur de la date précédente (comme affiché sur l'exemple).

En espérant avoir été suffisamment clair. Le besoin n'étant pas simple à expliquer, n'hésitez pas à me poser des questions.

Je vous joint le fichier associé.

En vous remerciant par avance,

Dams

Hey,

Une proposition pour les nouvelles valeurs par contre pour les anciennes valeurs je ne comprends pas d'où ça vient. En tout cas avec les données actuelles je ne peux rien faire.

@+

Hello Baroute78 !

Ah c'est top merci pour cette requête, elle fonctionne à merveille.

Pour la colonne "Ancienne Valeur", il y a avait une coquille dans mes données, désolé.

En G5 ce n'est pas censé être "Fraise Secoya", mais "Fraise Orchidée", cette cellule doit reprendre la valeur en H4.

Je te rejoins le fichier MàJ.

Dams

Et je n'avais pas fait attention, mais les données de sortie que tu obtiens avec ta requête ne sont pas totalement exactes.

Dans la colonnes "nouvelles valeur", les données de sortie attendu sont les suivantes :

Nouvelle Valeur
Fraise Orchidée
Pêche Orchidée Brocolis

Sur ton fichier , il manque la valeur "orchidée" dans la deuxième ligne.

La valeur du type "plante", n'existant pas pour la 1ere date, elle doit etre reprise dans la deuxième ligne.

Hey,

Une proposition

@JFL si tu passes par là, je suis fier de cette requête, je commence à mettre en pratique ;)

@+

EDIT : le code pour ceux qui ne peuvent pas ouvrir le fichier

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],

    Type = Table.TransformColumnTypes(Source,{{"Date de péremption ", type date}}),

    GroupBy = Table.Group(Type, {"Date de péremption "}, {
                                                            {"New", each Text.Combine(_[Nom]," ") },
                                                            {"tbl2", each _}}),

    Sort = Table.Sort(GroupBy,{{"Date de péremption ", Order.Ascending}}),

    Index0 = Table.AddIndexColumn(Sort, "Index", 0, 1, Int64.Type),

    AddAncienneValeur = Table.AddColumn(Index0, "Ancienne valeur", each  try Sort{[Index]-1}[New] otherwise null),

    AddNouvelleValeur = Table.AddColumn(AddAncienneValeur, "Nouvelle valeur", each 
    try 
        let 
            a = AddAncienneValeur{[Index]-1}[tbl2], 
            b = List.Difference(a[Type],[tbl2][Type]),
            d = Table.RowCount(a) 

        in [New] & " "& Text.Combine(
                                        Table.Skip(
                                                    List.Accumulate(b,a,(s,c) => Table.Combine({s,Table.SelectRows(a, each [Type] = c)})),
                                                    d)[Nom]
                                    ," ") 
    otherwise [New]),

    ColSupp = Table.RemoveColumns(AddNouvelleValeur,{"Index", "New", "tbl2"})
in
    ColSupp

Bonsoir à tous !

..... je suis fier de cette requête, je commence à mettre en pratique ;)

Le plaisir légitime lié à la maîtrise grandissante de l'outil....!

Une approche différente :

Hello à vous deux !

Nous y sommes presque ! :)

La colonne "Ancienne valeur" semble ne pas reprendre correctement l'ancienne valeur.

Je vous joint le fichier avec les données de sortie attendues ainsi que deux lignes supplémentaires pour mieux illustrer mon propos.

Merci pour votre super travail !

Dams

Hello,

En effet, de mon côté j'ai ajouté l'ancienne valeur avant la nouvelle donc intrinsèquement il manquait une valeur

C'est corrigé dans cette version

@+

Bonjour à tous !

Version amendée :

Hello ! Merci à vous deux ! Cela fonctionne parfaitement

J'ai un autre cas à vous soumettre ahah ! J'ouvre une autre requête, je l'appellerais Transformation de données V2 si vous souhaitez y jeter un coup d'oeil.

Encore merci pour votre temps,

Dams

Rechercher des sujets similaires à "transformation donnees"