banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 24 September 2021 10:51

AME - SIG
Participant occasionnel
Lieu: Montargis
Date d'inscription: 16 Sep 2008
Messages: 12
Site web

[FME] Transformation d'un xls "Unpivot" avec FME

Bonjour à tous,

Le titre n'est pas forcément explicite mais il me semble que l'idée que je souhaite faire est un "unpivot" de mon tableau, j'espère ne pas me tromper sur le sens de cette notion !

J’ai un tableau xls formaté comme suit en entrée (comptages routiers pour un point donné tous les 1/4 d’heure, sur 7 jours avec les 1/4 heures en lignes et les jours en colonne) :

Heure|date1|date2|date3|…
00:15|v1|v2|v3|…
00:30|v4|v5|v6|…
...

Je souhaite obtenir un tableau de ce type :

Date/Heure    Valeur
date1 00:15    v1
date1 00:30    v4
date2 00:15    v2
date2 00:30    v5
date3 00:15    v3
date3 00:30    v6

Et ainsi de suite … en commençant à chercher sur le forum, j'ai bien trouvé ce fil de discussion très intéressant : https://georezo.net/forum/viewtopic.php?id=60366 et j'arrive bien à obtenir le résultat suivant :

_attr_name | _attr_value
heure | 00:15
date1 | v1
date2 | v2
date3 | v3
heure | 00:30
date1 | v4
date2 | v5
date3 | v6

mais je bute sur la combinaison de deux attributs (heure et date) pour obtenir le résultat attendu. L'idée étant de venir créer un nouveau fichier csv.

Merci à tous pour nos prochains échanges !

Hors ligne

 

#2 Sat 25 September 2021 19:39

SRapenne
Participant occasionnel
Date d'inscription: 2 Feb 2020
Messages: 28

Re: [FME] Transformation d'un xls "Unpivot" avec FME

Bonjour,

Je n'ai pas de reponse concrète à t'apporter, mais je fais un usage très régulier de ce genre de pivot et je n'ai rien trouvé de concluant en FME pur et comme je maitrise plutôt bien R, qui lui sait faire ça sans problème, je passe systematiquement par un Rcaller ce qui oblige à installer R. Si tu connais et utilise dèjà R, je pourrais te fournir du code pour faire çà.

Serge

Dernière modification par SRapenne (Sat 25 September 2021 19:39)

Hors ligne

 

#3 Sun 26 September 2021 11:05

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 427

Re: [FME] Transformation d'un xls "Unpivot" avec FME

Bonjour,

Je suppose que les champs date1, date2, date3 ne sont pas connus en avance ?
Par exemple tu as un fichier comme suis avec les 7 derniers jours :

Code:

Heure|18/09/2021|19/09/2021|20/24/09/2021|21/09/2021|22/09/2021|23/09/2021|24/09/2021
00:15|v1|v2|v3|…
00:30|v4|v5|v6|…

C'est bien ça ?

Si c'est le cas en effet pas évident dans FME car les noms des champs seront pris dans le schema du fichier d'entrée.

Et donc à part passer par un pythoncaller ou un rcaller comme proposé par Serge, je ne vois pas trop.
Mais il y a peut-être d'autres solutions.

Si tu connais d'avance les noms des champs, tu peux utiliser un inlinequerier par exemple et via du SQL faire une union de chaque colonne :

Code:

select "date1" as date, heure, date1 as valeur from input
union all select "date2" as date, heure, date2 as valeur from input
union all select "date3" as date, heure, date3 as valeur from input
union all select "date4" as date, heure, date4 as valeur from input
union all select "date5" as date, heure, date5 as valeur from input
union all select "date6" as date, heure, date6 as valeur from input
union all select "date7" as date, heure, date7 as valeur from input

Hors ligne

 

#4 Sun 26 September 2021 12:24

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 427

Re: [FME] Transformation d'un xls "Unpivot" avec FME

Finalement, en creusant un peu j'ai une solution via le paramètre "Scan schema in dynamic workflow" dans les paramètres avancés du reader Excel.
Ça permet de récupérer les colonnes dans les entités même quand leur nom change. Elles ne sont pas exposées mais on les récupère dans le AttributeExploder.
Donc ensuite dans le AttributeExploder il faut bien cocher "Keep attributes" comme ça on conserve l'attribut Heure. Et on peut nommer Attribute Name Label "Date" et Attribute Value Label "Valeur".
Puis on garde seulement les entités avec Date correspondant à l'expression rationnelle (8 chiffres à la suite AAAAMMJJ)

Code:

^\d{8}$

A adapter selon le nom de la colonne dans le fichier Excel. Si au format JJ/MM/AAAA l'expression sera

Code:

^\d{2}\/\d{2}\/\d{4}$

Puis un AttributeKeeper pour conserver seulement Date, Heure et Valeur et un Sorter pour trier si besoin.

Ci-joint un workspace sous FME 2021.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

Pied de page des forums

Powered by FluxBB