有人可以建议一种使用分层数据创建动态嵌套树框的方法。 今晚我试了几个小时,这让我很困惑:(
我在下面有一些虚拟数据来描述三层深度的关系。 显然我不想对此进行硬编码,因为我不会预先知道我需要制作多少级别的“嵌套”。 实际上它将是10个或更多级别。
干杯,特洛伊
这就是我要开始的(附表)

这就是我想要生成的

这是我使用您的示例表汇总的内容,可能会帮助您到达想要的位置

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) ) )
)
)你可能会从这里得到一些想法目录树:探索文件夹使用的空间或者可能来自我一直在研究的文件索引器jthi-jmp-tools/文件索引器 (github.com) (请参阅 bin/bin/DirectoryTreeHandler.jsl,它还没有我希望的那样通用,但希望它会到达那里),我的代码目前一团糟,因为我没有时间完成它并开始重构。
在我的代码中,(当前)输入是这样的数据表:

和当前的最终结果是这样的:

我修改了输入目录列表以包含一个更深的目录,它似乎没有问题。 我认为这里的魔术词可能是递归

希望函数 get_directory_roots 可以给你一些想法。
编辑:
JSL 函数列表addin 也可以提供一些思路,我觉得不超过一两层
据我了解,我认为这符合您的需求:
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>
鱼骨图有一个右键菜单来重新排列它们。 它们都使用相同的显示框树。 可以将其他控件添加到树中,类似于标签。 该平台隐藏在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>
嵌套
鱼骨
等级制度
编辑:看起来图表平台可能无法重新打开 JMP 15/16 中的关闭节点(通过弹出菜单)。 在 JMP 14 中可以。 我已经报告了这个问题。
是的我同意。 非常优雅的解决方案。 我正走在跟踪父母/孩子关系的道路上,事情开始变得一团糟。
感谢大家的回复,许多优秀的代码片段。
- 特洛伊