Création dynamique d'une arborescence JSL à partir de données hiérarchiquesQuelqu'un peut-il suggérer une méthode de création d'une arborescence imbriquée dynamique à l'aide de données hiérarchiques. J'ai essayé pendant quelques heures ce soir et ça me déconcerte 
J'ai quelques données factices ci-dessous pour décrire les relations qui sont profondes sur trois niveaux. Évidemment, je ne veux pas coder cela en dur car je ne saurai pas à l'avance combien de niveaux d'imbrication je devrai faire. En réalité, ce sera 10 niveaux ou plus.
Bravo, Troie
C'est ce par quoi je commence (tableau ci-joint)

C'est ce que je veux générer

AnalytiqueScriptObjet : Création dynamique d'une arborescence JSL à partir de données hiérarchiquesVoici quelque chose que j'ai assemblé à l'aide de votre exemple de tableau, qui pourrait vous aider à arriver là où vous voulez

Names Default To Here( 1 );
dt = Current Data Table();
maxLevels = Col Max( :EMPLEVEL );
dt << select where( :EMPLEVEL == 1 );
dtJoined = dt << subset( columns( :EMP_ID, :FULL_NAME ), selected rows( 1 ) );
For( m = 1, m <= N Cols( dtJoined ), m++,
Column( dtJoined, m ) << set name( Column( dtJoined, m ) << get name || "1" )
);
For( i = 2, i <= maxLevels, i++,
dt << select where( :EMPLEVEL == i );
dtTemp = dt << subset( columns( :EMP_ID, :FULL_NAME, :MGR_ID ), selected rows( 1 ) );
For( m = 1, m <= N Cols( dtTemp ), m++,
Column( dtTemp, m ) << set name( Column( dtTemp, m ) << get name || Char( i ) )
);
Eval(
Substitute(
Expr(
dtTemp2 = dtJoined << Join(
With( dtTemp ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( __emp__ = __mgr__ ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 )
)
),
Expr( __emp__ ), parse(":EMP_ID" || Char( i - 1 )),
Expr( __mgr__ ), Parse(":MGR_ID" || Char( i ))
)
);
Close( dtTemp, nosave );
Close( dtJoined, nosave );
dtJoined = dtTemp2;
);
theNameList={};
for(i=1,i<=maxLevels,i++,
insert into(theNameList, parse(":FULL_NAME" || char(i)))
);
Tabulate(
Show Control Panel( 0 ),
Add Table(
Row Table( Grouping Columns( eval(theNameList) ) )
)
)Objet : Création dynamique d'une arborescence JSL à partir de données hiérarchiquesVous pourriez avoir des idées d'ici Arborescence des répertoires : Explorer l'espace utilisé par les dossiers ou éventuellement à partir de l'indexeur de fichiers sur lequel j'ai travaillé jthi-jmp-tools/file-indexer (github.com) (voir bin/bin/DirectoryTreeHandler.jsl, il n'est pas encore aussi générique que je le voudrais, mais j'espère qu'il y arrivera), mon code est actuellement en pagaille, car je n'ai pas eu le temps de le finir et commencer la refactorisation.
Dans mon code, l'entrée (actuelle) est datatable comme ceci :

et le résultat final actuel ressemble à ceci :

J'ai modifié la liste des répertoires d'entrée pour inclure un répertoire beaucoup plus profond et il semblait n'y avoir aucun problème. Je pense que le mot magique ici pourrait être la récursivité

Espérons que la fonction get_directory_roots puisse vous donner des idées.
Éditer:
Liste des fonctions JSL addin peut également fournir des idées, je pense qu'il n'y avait pas plus d'un ou deux niveaux
Objet : Création dynamique d'une arborescence JSL à partir de données hiérarchiquesJe pense que cela correspond à vos besoins tels que je les comprends:
Names Default to Here( 1 );
dt = Data Table( "DummyTable" );
relations = [=>];
For Each Row( dt,
relations[:FULL_NAME] = Tree Node( :FULL_NAME );
relations[:FULL_NAME] <<SET data="https://community.jmp.com/"></SET>
Objet : Création dynamique d'une arborescence JSL à partir de données hiérarchiques@ErraticAttach
Excellente solution !
Objet : Création dynamique d'une arborescence JSL à partir de données hiérarchiquesLes diagrammes en arête de poisson ont un menu contextuel pour les réorganiser. Ils utilisent tous le même arbre displaybox. Il est possible d'ajouter d'autres contrôles à l'arborescence, similaires à l'étiquette. La plateforme se cache sous Analyze->QualityAndProcess->Diagram.
dt = Open("/Z:/DummyTable.csv");
diagram = dt << diagram(parent(MGR_ID),child(EMP_ID),label(FULL_NAME));
// fishbone is the default, change it like this:
(report(diagram)[hierbox(1)])<<CHANGETYPE></CHANGETYPE>
Imbriqué
Arête de poisson
Hiérarchie
edit : il semble que la plate-forme de diagramme ne puisse pas rouvrir un nœud fermé dans JMP 15/16 (via le menu contextuel). Dans JMP 14, c'est possible. J'ai signalé le problème.
Objet : Création dynamique d'une arborescence JSL à partir de données hiérarchiquesOui je suis d'accord. Solution très élégante. J'étais sur la voie du suivi des relations parents/enfants et les choses commençaient à se compliquer.
Merci à tous pour les réponses, beaucoup d'excellents extraits de code.
- Troie