Vorlage: Eltern-Kind-Hierarchie aus CSV (Produktkatalog)

Ein PIM- oder Stücklisten-Export nennt je Zeile das Elternteil, zeigt also nach oben. Die Spalte Linie zu nennt die Kinder und zeigt nach unten. Diese Umkehrung gezeichnet: fünf Tiefenebenen, fünf Entscheidungen, sieben Blätter.

Diese Vorlage verwenden

Die CSV-Datei hinter diesem Diagramm

Eine Zeile je Schritt. Die Zahlen in Linie zu sind Zeilennummern — sie zeichnen die Verbindungen, und genau diese Spalte fehlt den meisten Dateien.

#FormBoxtextLinie zuLinientextHorizontale BahnVertikale Bahn
1StartKatalog Außenbereich2, 3Wurzel (Elternfeld leer)Kategoriesatz
2ProcessSitzmöbel4Ebene 1Kategoriesatz
3ProcessSonnen- und Wetterschutz7Ebene 1Kategoriesatz
4DecisionVerzweigt sich die Kategorie weiter?5, 6Unterkategorie, Verkäufliches ProduktEbene 1Kategoriesatz
5ProcessBänke10Ebene 2Kategoriesatz
6ProcessAuflagenset für Bänke8Ebene 2Produktsatz
7ProcessAmpelschirm 3 m9Ebene 2Produktsatz
8DecisionHat das Produkt Varianten?11, 12Ja, eine Zeile je Variante, Nein, die Produktzeile ist die ArtikelnummerEbene 2Produktsatz
9DecisionWird das Ersatzteil einzeln verkauft?13, 14Einzeln verkauft, Nur für den ServiceEbene 2Produktsatz
10ProcessGartenbank 3-sitzig15Ebene 3Produktsatz
11SuccessAuflagenset, NaturEbene 3Variantensatz
12SuccessAuflagenset für Bänke, eine ArtikelnummerEbene 3Produktsatz
13SuccessErsatzbespannung 3 mEbene 3Variantensatz
14EndStreben-Baugruppe für SchirmeEbene 3Komponentensatz
15DecisionLagerartikel oder Auftragsfertigung?17, 16Lagerartikel, AuftragsfertigungEbene 3Produktsatz
16DecisionZugekauft oder selbst gefertigt?18, 19Zugekauft, Selbst gefertigtEbene 3Komponentensatz
17SuccessGartenbank 3-sitzig, EicheEbene 4Variantensatz
18EndLattensatz HartholzEbene 4Komponentensatz
19EndBankgestell GusseisenEbene 4Komponentensatz
#,Form,Boxtext,Linie zu,Linientext,Horizontale Bahn,Vertikale Bahn
1,Start,Katalog Außenbereich,"2, 3",,Wurzel (Elternfeld leer),Kategoriesatz
2,Process,Sitzmöbel,4,,Ebene 1,Kategoriesatz
3,Process,Sonnen- und Wetterschutz,7,,Ebene 1,Kategoriesatz
4,Decision,Verzweigt sich die Kategorie weiter?,"5, 6","Unterkategorie, Verkäufliches Produkt",Ebene 1,Kategoriesatz
5,Process,Bänke,10,,Ebene 2,Kategoriesatz
6,Process,Auflagenset für Bänke,8,,Ebene 2,Produktsatz
7,Process,Ampelschirm 3 m,9,,Ebene 2,Produktsatz
8,Decision,Hat das Produkt Varianten?,"11, 12","Ja, eine Zeile je Variante, Nein, die Produktzeile ist die Artikelnummer",Ebene 2,Produktsatz
9,Decision,Wird das Ersatzteil einzeln verkauft?,"13, 14","Einzeln verkauft, Nur für den Service",Ebene 2,Produktsatz
10,Process,Gartenbank 3-sitzig,15,,Ebene 3,Produktsatz
11,Success,"Auflagenset, Natur",,,Ebene 3,Variantensatz
12,Success,"Auflagenset für Bänke, eine Artikelnummer",,,Ebene 3,Produktsatz
13,Success,Ersatzbespannung 3 m,,,Ebene 3,Variantensatz
14,End,Streben-Baugruppe für Schirme,,,Ebene 3,Komponentensatz
15,Decision,Lagerartikel oder Auftragsfertigung?,"17, 16","Lagerartikel, Auftragsfertigung",Ebene 3,Produktsatz
16,Decision,Zugekauft oder selbst gefertigt?,"18, 19","Zugekauft, Selbst gefertigt",Ebene 3,Komponentensatz
17,Success,"Gartenbank 3-sitzig, Eiche",,,Ebene 4,Variantensatz
18,End,Lattensatz Hartholz,,,Ebene 4,Komponentensatz
19,End,Bankgestell Gusseisen,,,Ebene 4,Komponentensatz

So funktioniert es

  1. Finden Sie die beiden Spalten, die die Hierarchie tragen

    Alles andere im Export ist für diesen Zweck Beiwerk. Sie brauchen die Spalte mit der eigenen Kennung jeder Zeile und die Spalte, die ihr Elternteil nennt. Sie heißen selten id und parent_id: Suchen Sie nach parent_sku, belongs_to, category_path oder assembly. Ist das Elternteil ein Pfad statt eines Codes, etwa Start > Sitzmöbel > Bänke, ist das letzte Segment das Elternteil und der Rest die Tiefe. Hat der Export gar keine Elternspalte, dafür aber eine Ebenennummer, sehen Sie sich den Hinweis zu eingerückten Stücklisten weiter unten an.

  2. Kehren Sie die Elternspalte in Linie zu um

    Das ist die ganze Arbeit. Sortieren oder gruppieren Sie den Export nach seiner Elternspalte, sodass die Kinder jedes Elternteils beieinanderstehen, und schreiben Sie dann deren Zeilennummern kommagetrennt in die Zelle Linie zu des Elternteils. Die Richtung dreht sich hier: Der Export sagte Kind nennt Elternteil, die Tabelle sagt Elternteil nennt Kinder. Eine Folge lohnt es sich auszusprechen: die Elternspalte hat einen Wert je Zeile und Linie zu so viele Werte, wie diese Zeile Kinder hat, die Information wandert also von vielen Zeilen auf wenige.

  3. Nummerieren Sie die Zeilen zuletzt und erst, wenn die Reihenfolge endgültig ist

    Linie zu enthält die Position der Zeile im Blatt und nicht ihre Kennung, aus SKU-1042 muss also die Nummer der Zeile werden, die sie trägt. Fügen Sie danach eine Zeile ein, ist jede Nummer unterhalb der Einfügestelle um eins daneben. Bringen Sie die Zeilen erst in ihre endgültige Reihenfolge und lösen Sie die Kennungen dann in einem Durchgang zu Nummern auf. Ein Wert in Linie zu, der eine nicht vorhandene Zeile nennt, wird beim Zeichnen stillschweigend verworfen, was aussieht wie ein Kasten, der schlicht vergessen hat, sich mit irgendetwas zu verbinden.

  4. Setzen Sie die Zelle Linie zu in Anführungszeichen und prüfen Sie das Trennzeichen

    Linie zu und Linientext enthalten kommagetrennte Listen, in einer kommagetrennten Datei müssen diese Zellen also in doppelte Anführungszeichen gesetzt werden (4,5 und Ja,Nein), sonst gewinnt die Zeile ein Feld und jede Spalte danach rutscht um eins. Europäische Exporte sind häufig semikolongetrennt, was Kommas in Zellen harmlos macht, aber verlangt, dass die ganze Datei als semikolongetrennt gelesen wird. Produktbezeichnungen bringen eigene Probleme mit: Ein Komma in Bank, 3-sitzig oder ein Zollzeichen in einer 3" Stange muss genauso maskiert werden. Sieht eine Spalte beim Import ignoriert aus, prüfen Sie den ersten Überschriftennamen, denn eine als UTF-8 mit Bytereihenfolge-Markierung geschriebene Datei trägt drei unsichtbare Bytes davor.

  5. Form aus dem, was die Zeile ist, und die Bahnen aus dem, wo sie liegt

    Eine Zeile bekommt Start: die mit dem leeren Elternfeld. Zeilen mit leerem Linie zu sind Blätter, und ein Blatt braucht eine Terminatorform (Ende, Erfolg oder Abgelehnt), denn eine nicht abschließende Zeile ohne ausgehende Verbindung ist eine Sackgasse. Nutzen Sie die Teilung dieser Vorlage, wenn sie hilft: Erfolg für Zeilen, die ein Kunde bestellen kann, Ende für Zeilen, die nur innerhalb einer Baugruppe existieren. Füllen Sie dann Horizontale Bahn mit der Tiefe, die Sie erlaufen haben, und Vertikale Bahn mit der Typspalte des Exports. Ein unbekannter Formname wird kommentarlos zu Prozess normalisiert, prüfen Sie also besonders die Schreibweise von Entscheidung.

  6. Räumen Sie Waisen, zusätzliche Wurzeln und Zyklen vor dem Import weg

    Drei Prüfungen mit je einem eigenen Symptom. Jeder Wert in der Elternspalte muss in der Kennungsspalte vorkommen; die übrigen sind Waisen, meist weil der Export auf eine Kategorie gefiltert wurde, während die Eltern darüber liegen. Genau eine Zeile sollte ein leeres Elternfeld haben; sind es mehrere, sehen Sie mehrere Bäume. Und keine Zeile darf sich über ihre Eltern selbst erreichen, was nach einer schlechten Zusammenführung vorkommt und, einmal umgekehrt, eine Verbindung zeichnet, die auf sich selbst zurückläuft.

Häufig gestellte Fragen

Wie wird aus einer Eltern- und einer Kindspalte ein Flussdiagramm?

Indem Sie die Beziehung umkehren und sie dann nummerieren. Der Export gibt Ihnen Kind nennt Elternteil; die Tabelle will Elternteil nennt Kinder. Gruppieren Sie die Zeilen nach der Elternspalte und schreiben Sie für jedes Elternteil die Zeilennummern seiner Kinder kommagetrennt in dessen Zelle Linie zu. Jede Zeile mit leerer Elternzelle ist eine Wurzel und bekommt die Form Start; jede Zeile, die in niemandes Elternspalte vorkommt, ist ein Blatt, bekommt ein leeres Linie zu und eine Terminatorform. Füllen Sie Boxtext aus der Bezeichnungsspalte, Horizontale Bahn aus der Tiefe, die Sie durch das Entlanglaufen der Elternkette erhalten, und Vertikale Bahn aus der Typspalte, die der Export ohnehin hat. Ziehen Sie dann die .csv auf den Tabellenbereich des Editors oder fügen Sie den CSV-Text direkt hinein. Der Import gleicht Überschriftennamen ab, die Spaltenreihenfolge in Ihrer Datei spielt also keine Rolle, und alle Spalten, die er nicht kennt, werden mitgeführt und ignoriert.

Worin unterscheidet sich eine Elternspalte von einer Spalte Linie zu?

In der Richtung, in der Anzahl und darin, worauf der Wert verweist. Eine Elternspalte zeigt nach oben: Jede Zeile nennt die eine Zeile über sich, es gibt also genau einen Wert je Zeile, und Blätter sind die Zeilen, die niemand nennt. Eine Spalte Linie zu zeigt nach unten: Jede Zeile nennt die Zeilen unter sich, ein Elternteil mit vier Kindern hält also vier Werte in einer Zelle, und Blätter sind die Zeilen mit leerer Zelle. Und die Werte sind verschiedener Art. Eine Elternspalte enthält eine Kennung, etwa SKU-1042, die bei der Zeile bleibt, wohin sie auch wandert. Linie zu enthält eine Position, die ab 1 gezählte Nummer der Zeile im Blatt, die sich in dem Moment ändert, in dem darüber eine Zeile eingefügt wird. Deshalb müssen die Kennungen erst zu Nummern aufgelöst werden, nachdem die Zeilenreihenfolge feststeht, und nicht vorher.

Meine Spalten sind ab der Mitte der Datei verrutscht. Was ist passiert?

Fast immer ein Komma ohne Anführungszeichen. Eine CSV-Zeile wird am Trennzeichen geteilt, bevor irgendetwas anderes sie ansieht; eine Zelle Linie zu mit 4,5 in einer kommagetrennten Datei wird also als zwei Felder gelesen, die Zeile ist ein Feld länger als die Kopfzeile, und jede Spalte nach Linie zu landet unter der Überschrift ihres Nachbarn. Setzen Sie diese Zellen in doppelte Anführungszeichen, und der Parser fügt sie wieder zusammen. Dasselbe gilt für Linientext, ebenfalls eine kommagetrennte Liste, und für jede Produktbezeichnung mit einem Komma darin. Beginnt die Verschiebung stattdessen schon in der allerersten Spalte, ist meist das umgekehrte Problem schuld: Die Datei ist semikolongetrennt, wie es die meisten europäischen Systemexporte sind, und wird als kommagetrennt gelesen, oder eine Abweichung in der Kodierung hat eine Bytereihenfolge-Markierung an den ersten Überschriftennamen gehängt, sodass er nicht mehr passt.

Was passiert mit einer Zeile, deren Elternteil im Export fehlt?

Sie wird zur Waise, und das ist der häufigste Mangel eines gefilterten Exports. Sie haben das System nach einer Kategorie oder nur nach aktiven Artikeln gefragt, und es hat Ihnen genau diese Zeilen gegeben, einschließlich ihrer Eltern-IDs, die auf Zeilen zeigen, die der Filter ausgeschlossen hat. Nichts in der Datei ist als falsch markiert. Bei der Umkehrung der Hierarchie wird diese Zeile schlicht in niemandes Linie zu aufgeführt, sie zeichnet sich also als Kasten, bei dem nichts ankommt, außerhalb des Baums. Entscheiden Sie vor dem Import je Zeile, worum es sich handelt: Eine Zeile, deren Elternteil weggefiltert wurde, sollte an den nächsten enthaltenen Vorfahren gehängt werden, und eine Zeile, deren Elternteil im Quellsystem nicht mehr existiert, ist ein Datenfehler, den man zurückgibt statt ihn zu zeichnen.

Kann ich eine Stückliste mit einer Ebenenspalte statt einer Elternspalte verwenden?

Ja, und sie lässt sich in dasselbe überführen, nur hängt die Umwandlung an der Zeilenreihenfolge und nicht an einem Wert in der Zeile. Eine eingerückte Stückliste wiederholt die Ebenen 1, 2, 2, 3, 1 die Datei hinunter, und die Regel lautet: Das Elternteil einer Zeile ist die nächste Zeile darüber, deren Ebene genau um eins niedriger ist. Damit ist die ursprüngliche Reihenfolge des Exports tragend. Sortieren Sie die Datei zuerst nach Teilenummer, und die Hierarchie ist weg, ohne Fehler und ohne irgendetwas, aus dem sie sich wiederherstellen ließe. Laufen Sie die Datei von oben nach unten durch, merken Sie sich die zuletzt gesehene Zeile je Ebene, vergeben Sie die Eltern unterwegs und kehren Sie erst dann in Linie zu um. Mengen, Einheiten und Lieferantennummern dürfen in ihren eigenen Spalten bleiben, die beim Import mitgeführt und ignoriert werden, oder in die Spalte Notizen wandern, wenn Sie sie sichtbar haben wollen.

Diese Vorlage verwenden

Mehr in CSV-Vorlagen für Flussdiagramme und Diagramme

Mehr in Vorlagen für Prozessdiagramme

Browse all CSV-Vorlagen für Flussdiagramme und Diagramme