Modèle de hiérarchie CSV parent-enfant (répartition du catalogue de produits)

Une exportation PIM ou BOM nomme le parent de chaque ligne, de sorte que ses flèches pointent vers le haut. La colonne Ligne vers nomme les enfants, donc ils pointent vers le bas. Ce modèle est cette inversion dessinée : cinq niveaux de…

Utiliser ce modèle

Qu'est-ce que le processus modèle de hiérarchie csv parent-enfant (répartition du catalogue de produits) ?

Un export de catalogue de produits et une nomenclature arrivent sous la même forme. Une ligne par élément, une colonne d'identifiant, une colonne de nom et une colonne nommant le parent de cette ligne : parent_id, parent_sku, appartient_to, quel que soit l'appel du système qui a écrit le fichier. La hiérarchie est là. Il est simplement stocké dans le mauvais sens pour un diagramme : chaque ligne nomme la ligne au-dessus d'elle, et aucune ligne ne nomme les lignes en dessous. C'est la bonne conception pour une base de données, où une cellule contient une valeur et jamais une liste, et la mauvaise pour un graphique, où une flèche quitte un parent et arrive à un enfant. Ce n'est pas non plus un fichier que vous avez créé. Un CSV est ce qui sort d'un système, déjà aplati : plus de formules pour recalculer la recherche pour vous, pas de deuxième feuille contenant la table des variantes, pas de code couleur pour dire quelles lignes étaient les produits finis.

La feuille QueryChart stocke la relation opposée. Line to contient les lignes vers lesquelles pointe cette ligne (ses enfants) sous la forme d'une liste de numéros de ligne séparés par des virgules, et Line text contient les étiquettes de connecteur dans l'ordre correspondant. La traduction est donc une inversion, effectuée une seule fois. Regroupez l'exportation par sa colonne parent et chaque groupe devient la valeur Ligne vers de la ligne qu'il nomme. Un parent de quatre enfants se retrouve avec quatre nombres dans une seule cellule ; chaque enfant se retrouve sans rien dans sa propre ligne et sa position est comptée dans celle de son parent. Les lignes dont la cellule parent est vide sont les racines, et vous voulez exactement l'une d'entre elles : trois parents vides correspondent à trois arbres et trois arbres correspondent à trois graphiques.

Deux choses surprennent les gens. Ligne pour contenir les positions, pas les identifiants : la valeur est le numéro de la ligne dans la feuille, donc un parent du SKU-1042 doit être résolu par le numéro de la ligne portant ce code, et l'insertion d'une ligne renumérote tout ce qui se trouve en dessous. Un nombre ne nommant aucune ligne est supprimé lorsque le graphique est dessiné, et rien ne vous le dit. La seconde est que la profondeur n'est pas une colonne : vous l'obtenez en parcourant la chaîne parent vers le haut jusqu'à ce que vous atteigniez un espace vide, c'est pourquoi le même type d'enregistrement peut se trouver à différentes profondeurs dans différentes branches du même fichier. Le tableau ci-dessous est un petit catalogue de mobilier d'extérieur dessiné exactement de cette façon : dix-neuf lignes réparties sur cinq colonnes de profondeur et quatre voies d'enregistrement, une racine, sept feuilles et cinq décisions aux points où un catalogue bifurque réellement : si une catégorie s'imbrique à nouveau, si un produit comporte des lignes de variantes, si un article est stocké ou fabriqué sur commande, et si un composant est acheté ou fabriqué.

Ce que couvre cet organigramme

Dans ce modèle

  • Cinq colonnes de profondeur : "Racine (blanc parent)" et Profondeur 1 à Profondeur 4, croisées avec quatre bandes d'enregistrement : "Enregistrement de catégorie", "Enregistrement de produit", "Enregistrement de variante" et "Enregistrement de composant", de sorte que la colonne de type d'exportation devient une position sur la page tandis que la chaîne parent devient la colonne.
  • Une seule racine, "Catalogue de vie en plein air", qui dans le fichier est la seule ligne dont la cellule parent est vide, s'étendant vers les deux catégories de profondeur 1 "Sièges" et "Ombre et abri".
  • La raison pour laquelle la profondeur et le type d'enregistrement ne correspondent jamais vraiment : « La catégorie s'emboîte-t-elle davantage ? divise une sous-catégorie imbriquée de « Ensemble de coussins de banc », un produit vendable situé à la même profondeur qu'une catégorie, de sorte que « Banc de jardin 3 places » se retrouve à un niveau inférieur à « Parasol déporté 3 m » bien que les deux soient des produits.
  • « Le produit a-t-il des variantes ? a répondu de la même manière que le fichier y répond : oui produit "Ensemble de coussins, naturel", une ligne de variante portant le code commandable, et non produit "Ensemble de coussins de banc, SKU unique", où la ligne de produits est la ligne vendable et n'a aucun enfant du tout.
  • La branche nomenclature, accessible uniquement par "En stock ou fabriqué sur commande ?" : un article en stock se termine par "Banc de jardin 3 places, chêne", tandis qu'un article sur commande se poursuit par "Acheté ou fabriqué maison ?" et jusqu'à « Jeu de lattes en bois dur » et « Cadre de banc en fonte ».
  • Sept rangées de feuilles, chacune étant une rangée avec une ligne vide à la cellule, séparées par la forme plutôt que par la profondeur : des feuilles vendables telles que "Auvent de remplacement 3m" contre des feuilles internes telles que "Assemblage de nervures de parasol", c'est-à-dire "La pièce de rechange est-elle vendue séparément ?" décide.

Quand utiliser ce modèle

  • Quelqu'un vous a envoyé un export de catalogue (un CSV issu d'un PIM, d'un ERP ou d'un back office e-commerce) et vous a demandé ce que contenait réellement la gamme.
  • Une nomenclature s'étend sur plusieurs centaines de lignes et personne ne peut voir à quels articles finis atteint un composant sans filtrer le fichier à la main.
  • Deux systèmes ne sont pas d'accord sur la structure du catalogue et vous souhaitez que les deux exportations soient dessinées sous forme de deux arbres plutôt que comparées ligne par ligne dans une comparaison.
  • L'exportation contient des orphelins, des lignes dont l'identifiant parent n'apparaît nulle part dans le fichier, et vous devez les trouver avant que la hiérarchie ne soit chargée dans autre chose.
  • Vous remettez la gamme à un fournisseur, un auditeur ou un nouveau venu, et une colonne d'identifiants à côté d'une colonne d'identifiants parents n'est pas quelque chose que quiconque peut lire.

Le CSV qui produit ce diagramme

Une ligne par étape. Les nombres de Ligne vers sont des numéros de ligne : ils dessinent les connecteurs et c'est la colonne qui manque le plus souvent aux fichiers.

N°FormeTexte de la boîteLigne versTexte de la ligneCouloir horizontalCouloir vertical
1StartCatalogue de vie en plein air2, 3Racine (parent vide)Enregistrement de catégorie
2ProcessSièges4Profondeur 1Enregistrement de catégorie
3ProcessOmbre et abri7Profondeur 1Enregistrement de catégorie
4DecisionLa catégorie s'imbrique-t-elle davantage ?5, 6Sous-catégorie, Produit vendableProfondeur 1Enregistrement de catégorie
5ProcessBancs10Profondeur 2Enregistrement de catégorie
6ProcessEnsemble de coussins de banc8Profondeur 2Fiche produit
7ProcessParasol déporté 3m9Profondeur 2Fiche produit
8DecisionLe produit a-t-il des *variantes* ?11, 12Oui, une ligne par variante, Non, la ligne du produit est le SKUProfondeur 2Fiche produit
9DecisionLa pièce de rechange est-elle vendue séparément ?13, 14Vendu séparément, Service uniquementProfondeur 2Fiche produit
10ProcessBanc de jardin 3 places15Profondeur 3Fiche produit
11SuccessEnsemble de coussins, naturelProfondeur 3Enregistrement de variante
12SuccessEnsemble de coussins de banc, simple *SKU*Profondeur 3Fiche produit
13SuccessAuvent de remplacement 3mProfondeur 3Enregistrement de variante
14EndAssemblage de baleines de parasolProfondeur 3Enregistrement de composant
15DecisionEn stock ou fabriqué sur commande ?17, 16Stocké, Fabriqué sur commandeProfondeur 3Fiche produit
16DecisionAcheté ou fabriqué maison ?18, 19Acheté en, Fabriqué en maisonProfondeur 3Enregistrement de composant
17SuccessBanc de jardin 3 places, chêneProfondeur 4Enregistrement de variante
18EndEnsemble de lattes en bois durProfondeur 4Enregistrement de composant
19EndStructure de banc en fonteProfondeur 4Enregistrement de composant
N°,Forme,Texte de la boîte,Ligne vers,Texte de la ligne,Couloir horizontal,Couloir vertical
1,Start,Catalogue de vie en plein air,"2, 3",,Racine (parent vide),Enregistrement de catégorie
2,Process,Sièges,4,,Profondeur 1,Enregistrement de catégorie
3,Process,Ombre et abri,7,,Profondeur 1,Enregistrement de catégorie
4,Decision,La catégorie s'imbrique-t-elle davantage ?,"5, 6","Sous-catégorie, Produit vendable",Profondeur 1,Enregistrement de catégorie
5,Process,Bancs,10,,Profondeur 2,Enregistrement de catégorie
6,Process,Ensemble de coussins de banc,8,,Profondeur 2,Fiche produit
7,Process,Parasol déporté 3m,9,,Profondeur 2,Fiche produit
8,Decision,Le produit a-t-il des *variantes* ?,"11, 12","Oui, une ligne par variante, Non, la ligne du produit est le SKU",Profondeur 2,Fiche produit
9,Decision,La pièce de rechange est-elle vendue séparément ?,"13, 14","Vendu séparément, Service uniquement",Profondeur 2,Fiche produit
10,Process,Banc de jardin 3 places,15,,Profondeur 3,Fiche produit
11,Success,"Ensemble de coussins, naturel",,,Profondeur 3,Enregistrement de variante
12,Success,"Ensemble de coussins de banc, simple *SKU*",,,Profondeur 3,Fiche produit
13,Success,Auvent de remplacement 3m,,,Profondeur 3,Enregistrement de variante
14,End,Assemblage de baleines de parasol,,,Profondeur 3,Enregistrement de composant
15,Decision,En stock ou fabriqué sur commande ?,"17, 16","Stocké, Fabriqué sur commande",Profondeur 3,Fiche produit
16,Decision,Acheté ou fabriqué maison ?,"18, 19","Acheté en, Fabriqué en maison",Profondeur 3,Enregistrement de composant
17,Success,"Banc de jardin 3 places, chêne",,,Profondeur 4,Enregistrement de variante
18,End,Ensemble de lattes en bois dur,,,Profondeur 4,Enregistrement de composant
19,End,Structure de banc en fonte,,,Profondeur 4,Enregistrement de composant

Comment cela fonctionne

  1. Trouvez les deux colonnes qui portent la hiérarchie

    Tout le reste lors de l'exportation est une décoration prévue à cet effet. Vous avez besoin de la colonne contenant le propre identifiant de chaque ligne et de la colonne nommant son parent. Ils sont rarement appelés id et parent_id : recherchez parent_sku, Appartient_to, Category_path ou Assembly. Si le parent est un chemin plutôt qu'un code, tel que Accueil > Sièges > Bancs, le dernier segment est le parent et le reste est la profondeur. Si l'exportation n'a aucune colonne parent mais possède un numéro de niveau, consultez la note sur les nomenclatures en retrait ci-dessous.

  2. Inversez la colonne parent en Ligne pour

    C'est tout le travail. Triez ou regroupez l'exportation par sa colonne parent afin que les enfants de chaque parent soient assis ensemble, puis écrivez les numéros de ligne de ces enfants dans la cellule Ligne à cellule du parent, séparés par des virgules. Le sens s'inverse ici : l'exportation indique que l'enfant nomme le parent, la feuille indique que le parent nomme les enfants. Une conséquence mérite d'être soulignée à haute voix : la colonne parent a une valeur par ligne et la ligne vers a autant de valeurs que cette ligne a d'enfants, de sorte que les informations se déplacent de plusieurs lignes vers moins.

  3. Numérotez les lignes en dernier, et seulement une fois la commande définitive

    La ligne to contient la position de la ligne dans la feuille, pas son identifiant, donc SKU-1042 doit devenir le numéro de la ligne qui la porte. Insérez ensuite une ligne et chaque numéro situé en dessous du point d'insertion en est désormais un. Mettez d'abord les lignes dans leur ordre final, puis résolvez les identifiants en nombres en une seule passe. Une ligne vers la valeur nommant une ligne qui n'existe pas est supprimée silencieusement lorsque le graphique est dessiné, ce qui ressemble à une boîte qui a simplement oublié de se connecter à quoi que ce soit.

  4. Citez la ligne dans la cellule et confirmez le délimiteur

    Ligne vers et Texte de ligne contiennent des listes séparées par des virgules, donc dans un fichier délimité par des virgules, ces cellules doivent être entourées de guillemets doubles ("4,5" et "Oui, Non") ou la ligne gagne un champ et chaque colonne après en décale une vers la gauche. Les exportations européennes sont souvent délimitées par des points-virgules, ce qui rend les virgules à l'intérieur des cellules inoffensives mais signifie que l'ensemble du fichier doit être lu comme délimité par des points-virgules. Les noms de produits posent leurs propres problèmes de citation : une virgule dans Bench, 3 sièges ou une marque en pouces dans un poteau de 3 pouces doit être échappée de la même manière. Si une colonne semble ignorée lors de l'importation, vérifiez le premier nom d'en-tête, car un fichier écrit en UTF-8 avec une marque d'ordre d'octet comporte trois octets invisibles devant lui.

  5. Définissez la forme à partir de la ligne et les voies horizontale et verticale à partir de l'endroit où elle se trouve.

    Une ligne obtient Start : celle avec le parent vide. Les lignes avec une ligne vide sont des feuilles, et une feuille a besoin d'une forme de terminaison (Fin, Succès ou Rejet), car une ligne non terminale sans connecteur sortant est une impasse. Utilisez la répartition utilisée par ce modèle si cela peut vous aider : Succès pour les lignes qu'un client peut commander, Fin pour les lignes qui n'existent qu'à l'intérieur d'un assemblage. Remplissez ensuite la voie horizontale avec la profondeur que vous avez parcourue et la voie verticale avec la colonne de type propre à l'exportation. Un nom de forme non reconnu se normalise en Processus sans plainte, alors vérifiez l'orthographe de Décision en particulier.

  6. Effacez les orphelins, les racines supplémentaires et les boucles avant d'importer

    Trois contrôles, chacun avec un symptôme distinct. Chaque valeur de la colonne parent doit apparaître dans la colonne id ; ceux qui ne le sont pas sont orphelins, généralement parce que l'exportation a été filtrée dans une catégorie alors que les parents vivent au-dessus. Exactement une ligne doit avoir un parent vide, et s'il y en a plusieurs, vous regardez plusieurs arbres. Et aucune ligne ne peut s'atteindre via ses parents, ce qui se produit après une mauvaise fusion et, une fois inversé, dessine un connecteur qui se reboucle sur lui-même.

Questions fréquentes

Comment transformer une colonne parent et enfant en un organigramme ?

En inversant la relation puis en la numérotant. L'exportation vous donne les noms des enfants parent ; la feuille veut que les parents nomment les enfants. Regroupez les lignes par colonne parent et, pour chaque parent, écrivez les numéros de ligne de ses enfants dans la cellule Ligne vers ce parent, séparés par des virgules. Chaque ligne dont la cellule parent est vide est une racine et prend la forme Début ; chaque ligne qui apparaît dans la colonne parent de personne n'est une feuille, obtient une ligne vide et prend une forme de terminaison. Remplissez le texte de la zone à partir de la colonne de nom, la voie horizontale à partir de la profondeur que vous obtenez en parcourant la chaîne parent et la voie verticale à partir de la colonne de type que l'exportation possède déjà. Déposez ensuite le fichier .csv dans la zone de feuille de calcul de l'éditeur ou collez le texte CSV directement dedans. L'importation correspond aux noms d'en-tête, donc l'ordre des colonnes dans votre fichier n'a pas d'importance et toutes les colonnes qu'il ne reconnaît pas sont conservées et ignorées.

Quelle est la différence entre une colonne parent et une colonne Ligne vers ?

Direction, cardinalité et à quoi la valeur fait référence. Une colonne parent pointe vers le haut : chaque ligne nomme la ligne au-dessus d'elle, il y a donc exactement une valeur par ligne et les feuilles sont les lignes que personne ne nomme. Une ligne vers la colonne pointe vers le bas : chaque ligne nomme les lignes en dessous, donc un parent avec quatre enfants contient quatre valeurs dans une cellule et laisse les lignes dont la cellule est vide. Et les valeurs sont de nature différente. Une colonne parent contient un identifiant, quelque chose comme SKU-1042, qui reste avec la ligne partout où elle se déplace. La ligne à contient une position, le numéro de base 1 de la ligne dans la feuille, qui change au moment où une ligne est insérée au-dessus. C'est pourquoi les identifiants doivent être résolus en nombres après le règlement de l'ordre des lignes plutôt qu'avant.

Mes colonnes se sont déplacées à mi-chemin du fichier. Ce qui s'est passé?

Presque toujours une virgule non citée. Une ligne CSV est divisée sur le délimiteur avant que quoi que ce soit d'autre ne la regarde, donc une ligne vers une cellule contenant 4,5 dans un fichier délimité par des virgules est lue comme deux champs, la ligne se termine par un champ plus long que l'en-tête, et chaque colonne après la ligne vers atterrit sous l'en-tête de son voisin. Enveloppez ces cellules entre guillemets doubles et l’analyseur les rassemble. La même chose s'applique au texte de ligne, qui est également une liste séparée par des virgules, et à tout nom de produit contenant une virgule. Si le décalage commence à la toute première colonne, la cause est généralement le problème inverse : le fichier est délimité par des points-virgules, comme le sont la plupart des exportations de systèmes européens, et est lu comme délimité par des virgules, ou une incompatibilité d'encodage a attaché une marque d'ordre des octets au premier nom d'en-tête afin qu'il ne corresponde plus.

Qu'arrive-t-il à une ligne dont le parent est absent de l'export ?

Il devient orphelin et constitue le défaut le plus courant dans une exportation filtrée. Vous avez demandé au système une catégorie ou des éléments actifs uniquement, et il vous a donné exactement ces lignes, y compris leurs identifiants parents, qui pointent vers les lignes exclues par le filtre. Rien dans le fichier n'est marqué comme erroné. Lorsque la hiérarchie est inversée, cette ligne n'est tout simplement jamais répertoriée dans la ligne vers qui que ce soit, elle se dessine donc comme une boîte sans que rien n'y arrive, se trouvant à l'extérieur de l'arborescence. Décidez par ligne de quoi il s'agit avant d'importer : une ligne dont le parent a été filtré doit être rattachée à l'ancêtre inclus le plus proche, et une ligne dont le parent n'existe plus dans le système source est une erreur de données à renvoyer plutôt que de dessiner.

Puis-je utiliser une nomenclature comportant une colonne de niveau au lieu d’une colonne parent ?

Oui, et cela se convertit en la même chose, mais la conversion dépend de l'ordre des lignes plutôt que de n'importe quelle valeur de la ligne. Une nomenclature en retrait répète les niveaux 1, 2, 2, 3, 1 dans le fichier, et la règle est que le parent d'une ligne est la ligne la plus proche au-dessus d'elle dont le niveau est exactement un inférieur. Cela signifie que l'ordre d'origine de l'exportation est porteur : triez d'abord le fichier par numéro de pièce et la hiérarchie disparaît, sans erreur et sans plus rien pour le récupérer. Parcourez le fichier de haut en bas en gardant la dernière ligne vue à chaque niveau, attribuez les parents au fur et à mesure, puis inversez-les ensuite dans Line to. Les quantités, unités et codes fournisseurs peuvent rester là où ils se trouvent dans leurs propres colonnes, qui sont reportées lors de l'importation et ignorées, ou être déplacées dans la colonne Notes si vous souhaitez qu'elles soient visibles.

Fonctionnalités QueryChart pour ce processus

Utiliser ce modèle

Browse all Modèles de diagrammes à partir de fichiers CSV