#1 Tue 11 June 2024 09:39
- Mercier Laurent
- Participant actif
- Date d'inscription: 28 Feb 2006
- Messages: 86
Traitement Transpose Like
Bonjour la communauté
Je cherche désespérément un traitement qui me permette un genre de transpose …
Je dois réaliser une carte des dégradations par portions des canalisations d’Eaux Pluviales mais les données du tableau (xls) qui m'a été transmis est ordonnancé d'une telle manière qu'il m'est difficile de réaliser cette thématique
Ce fichier xls récence les canalisations d’EP découpés en portion P0, P1, Pn+1, …. où le degré de dégradation (1 à 9) est renseigné pour chaque portion :
TR | P0 | P1 | P2 | Pn |…
42500 | 5 | 3 | 1 | x | …
25804 | 3 | 8 | 6 | y | …
12590 | 9 | 1 | 5 | z | …
……
……
Ce que j’aimerai faire c’est ce genre de tableau ordonné de cette façon :
- création d’un attribut Portion qui reprend les différents attributs P0,P1,P2,Pn+1, …
- et un second Dégradation qui reprend les valeurs de dégradation de chaque portion
TR | Portion | Dégradation |….
42500 | 0 | 5 | ….
42500 | 1 | 3 | ….
42500 | 2 | 1 | ….
42500 | n | x | …..
25804 | 0 | 3 | ….
25804 | 1 | 8 | ….
25804 | 2 | 6 | ….
25804 | n | y | ……
12590 | 0 | 9 | …..
12590 | 1 | 1 | …..
12590 | 2 | 5 | …..
12590 | n | z | …..
……
…….
j'espère que ma demande est assez claire
Comment voyez vous les traitements pour réaliser cette transposition qui n’en est pas vraiment une !
Merci par avance pour vos conseils et pistes d’investigation FMEsque
Cordialement
Laurent
Hors ligne
#2 Tue 11 June 2024 13:13
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 427
Re: Traitement Transpose Like
Bonjour,
Pour créer la colonne Dégradation, j'utiliserais un ListPopulator https://docs.safe.com/fme/2016.1/html/F … ulator.htm en précisant le début commun des attributs P0,P1... (dans votre exemple "P").
Ainsi je me retrouverais avec pour chaque TR une liste contenant toutes les valeurs de P.
Puis j'utiliserais un ListExploder pour exploser cette liste sur autant de lignes qu'il y a de valeurs de P.
Il faut cependant que les noms des attributs P1, P2 etc aient bien une racine commune "P" et un indice qui se suit, 1 2 3 4... sans trou.
A voir aussi ce qu'il se passe si une valeur est manquante pour un des P pour certains TR.
Pour la colonne Portion, si un simple compteur suffit alors voir du côté de counter https://docs.safe.com/fme/2019.0/html/F … ounter.htm en utilisant comme nom de compteur l'attribut TR, ainsi le compteur sera mis à 0 à chaque changement de valeur de TR.
Si en revanche il faut récupérer la valeur du P ça sera un peu plus technique je pense mais à mon avis faisable avec un AttributeManager.
Je n'ai pas FME sous la main donc je ne peux pas tester pour le moment.
Hors ligne
#3 Tue 11 June 2024 15:25
- Mercier Laurent
- Participant actif
- Date d'inscription: 28 Feb 2006
- Messages: 86
Re: Traitement Transpose Like
Merci P.jeremie pour ces pistes je vais tester !!
Hors ligne
#4 Wed 12 June 2024 09:52
- Mercier Laurent
- Participant actif
- Date d'inscription: 28 Feb 2006
- Messages: 86
Re: Traitement Transpose Like
Bonjour,
......
Il faut cependant que les noms des attributs P1, P2 etc aient bien une racine commune "P" et un indice qui se suit, 1 2 3 4... sans trou.
A voir aussi ce qu'il se passe si une valeur est manquante pour un des P pour certains TR.
En effet ca va de P0 à P50, donc tous les TR n'ont pas tous le même nbre de portions (certains TR ont que 3 portions et d'autre 50) donc ListExploder me renvoie énormément d'enregistrements 60 840 en fait il me créé autant d'enregistrement qu'il y a de Pn par TR alors qu'il y a 1014 portions concernés!
Pour la colonne Portion, si un simple compteur suffit alors voir du côté de counter https://docs.safe.com/fme/2019.0/html/F … ounter.htm en utilisant comme nom de compteur l'attribut TR, ainsi le compteur sera mis à 0 à chaque changement de valeur de TR. ...
Si en revanche il faut récupérer la valeur du P ça sera un peu plus technique je pense mais à mon avis faisable avec un AttributeManager.
En effet c'est ce cas reprendre la valeur du P si il y a une note de dégradation, quel serait la procédure avec AttributeManager ?
merci par avance
Hors ligne
#5 Wed 12 June 2024 12:23
- Mercier Laurent
- Participant actif
- Date d'inscription: 28 Feb 2006
- Messages: 86
Re: Traitement Transpose Like
Alors j'ai pu récupérer les portions de chaque TR maintenant il me faut récupérer la valeur de dégradation assigné à la portion ...(voir la capture)
càd >> si NUMERO_POR =x alors DEGRADATION PORTION = la valeur contenue dans Px ...
par ex NUMERO_POR = 1 il faudrait que la valeur contenue dans l'attribut P1 (ici 4) soit reprise dans l'attribut DEGRADATION PORTION et ainsi de suite
mais je bloque sur retranscription avec les transformers ?
Merci par avance
Hors ligne
#6 Wed 12 June 2024 13:20
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 427
Re: Traitement Transpose Like
Est-ce que vous pouvez indiquez comment vous avez fait pour créer l'attribut NUMERO_POR ? Et l'attribut DEGRADATION_PORTION (si c'est à partir de ListExploder il ne devrait pas être vide normalement) ?
Hors ligne
#7 Wed 12 June 2024 17:19
- Mercier Laurent
- Participant actif
- Date d'inscription: 28 Feb 2006
- Messages: 86
Re: Traitement Transpose Like
Alors j'ai fait une jointure avec ma table PORTION Oracle Spatiale, comme TR est composé de x Portion je récupère donc chaque portion (et du coup le NUMERO_POR) qui compose un TRONCON.
Pour DEGRADATION_PORTION si j'utilise listExploder ça me renvoie un nbre d'enregistrement trop élevé 60840 au lieu des 1014 portions qui composent la totalité de mes TR.
en PJ mon fichier xls pour mieux comprendre ma problématique
merci
Dernière modification par Mercier Laurent (Wed 12 June 2024 17:21)
Hors ligne
#8 Wed 12 June 2024 22:40
- Benoit D
- Participant assidu
- Date d'inscription: 17 Jul 2018
- Messages: 151
Re: Traitement Transpose Like
Bonjour, comme l'a dit @p.jeremie ListPopulator avec "P" comme préfixe.
Puis BulkAttributeRemover pour faire le ménage avec comme paramètre "^P\d+".
ListExploder sur l'attribut "_list"
AttributeRenamer pour passer _list en "Dégradation" et _element_index en "Portion"
Un AttributFilter sur Dégradation pour retirer toutes les entités "fantômes" qui n'ont pas de dégradation.
Vous aurez le tableau voulu avec 992 entités d'après votre Excel.
Trois points d'attention :
- la portion 0 n'est que peu utilisée (5 fois) et c'est perturbant sans en connaître les raisons. Une ligne en plus contient ici un commentaire Tronçon 55320.
- la dégradation de la portion 7 de ce même tronçon contient "-" et non une valeur numérique. 5 autres tronçons contiennent des "-" à la place des Dégradation, il faudrait les traiter dans le script.
- la dernière ligne indiquant "LEGENDE des qualifications : voir onglet "Grille de Qualification"" n'est retirée qu'avec le dernier AttributeFilter
Dernière modification par Benoit D (Wed 12 June 2024 22:44)
Hors ligne