階層データからの動的JSLツリーボックスの作成階層データを使用して動的にネストされたツリーボックスを作成する方法を誰かが提案できますか? 私は今夜数時間試しましたが、それは私を混乱させています:(
以下に、3レベルの深さの関係を表すダミーデータをいくつか示します。 明らかに、これをハードコーディングしたくありません。何レベルの「ネスト」を作成する必要があるかを前もって知らないからです。 実際には10レベル以上になります。
乾杯、トロイ
これが私が始めていることです(表を添付)

これが私が生成したいものです

分析スクリプティングRe:階層データからの動的JSLツリーボックスの作成これが私があなたのサンプルテーブルを使ってまとめたもので、あなたが望む場所にたどり着くのに役立つかもしれません

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) ) )
)
)Re:階層データからの動的JSLツリーボックスの作成あなたはここからいくつかのアイデアを得るかもしれませんディレクトリツリー:フォルダが使用するスペースを探索するまたはおそらく私が取り組んできたファイルインデクサーからjthi-jmp-tools / file-indexer(github.com) (bin / bin / DirectoryTreeHandler.jslを参照してください。まだ一般的ではありませんが、うまくいけばそこに到達するでしょう)、コードを完成させる時間がなかったため、現在コードは混乱しています。リファクタリングを開始します。
私のコードでは、(現在の)入力は次のようにデータテーブルです:

現在の最終結果は次のようになります。

入力ディレクトリリストを変更して、さらに深いディレクトリを1つ含めましたが、問題はないようです。 ここでの魔法の言葉は再帰かもしれないと思います

うまくいけば、関数get_directory_rootsがあなたにいくつかのアイデアを与えることができます。
編集:
JSL機能リストアドインもいくつかのアイデアを提供することができます、私はそれが1つまたは2つ以上のレベルを持っていなかったと思います
Re:階層データからの動的JSLツリーボックスの作成私が理解しているように、これはあなたのニーズに合っていると思います。
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>
Re:階層データからの動的JSLツリーボックスの作成@ErraticAttach
素晴らしい解決策!
Re:階層データからの動的JSLツリーボックスの作成フィッシュボーン図には、右クリックメニューで再配置できます。 それらはすべて同じディスプレイボックスツリーを使用します。 ラベルと同様に、ツリーに他のコントロールを追加することができます。 プラットフォームは、[分析]->[品質とプロセス]->[図]の下に隠れています。
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で(ポップアップメニューを介して)閉じたノードを再度開くことができない場合があるようです。 JMP14では可能です。 問題を報告しました。
Re:階層データからの動的JSLツリーボックスの作成はい私は同意する。 非常にエレガントなソリューション。 私は親子関係を追跡する道を進んでいました、そして物事は乱雑になり始めていました。
返信、多くの優れたコードスニペットに感謝します。
- トロイ