有人可以建議一種使用分層數據創建動態嵌套樹框的方法。 今晚我試了幾個小時,這讓我很困惑:(
我在下面有一些虛擬數據來描述三層深度的關係。 顯然我不想對此進行硬編碼,因為我不會預先知道我需要製作多少級別的“嵌套”。 實際上它將是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 中可以。 我已經報告了這個問題。
是的我同意。 非常優雅的解決方案。 我正走在跟踪父母/孩子關係的道路上,事情開始變得一團糟。
感謝大家的回复,許多優秀的代碼片段。
- 特洛伊