Re: Column() と As Column() と datable:column と dt:As name("column") の比較column() と as column() の違いについての素晴らしいビデオ チュートリアル:
日本語でよくある間違いとその回避方法 (2020-US-30MP-571)
(5:18分から)
例を挙げると
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
に関して
これらすべての方法を使用して、列名の変更に対して堅牢な JSL スクリプトを作成するにはどうすればよいでしょうか?
列名の変更後に列が見つからないイベントをキャッチし、コードを自動修正するオプションを備えたエラー処理機能はどうでしょうか。
アイデア:
列が欠落している場合、エラー メッセージを表示する代わりに、JMP は正しい列を選択するための列リストを含むウィンドウを開くことができます。
その後、コードの実行は継続され、ソースコードは自動的に修正される可能性があります。
編集:ビデオへの直接リンク
https://community.jmp.com/t5/Abstracts/Most-Common-JSL-Mistakes-and-How-to-Avoid-Them-2020-US-30MP-571/ev-p/758506/redirect_from_archived_page/true#U281519
[上部のリンクはすべてのブラウザで表示されるわけではありません]
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")最良の参照 (私自身の経験と試行錯誤の範囲外) は、スクリプト インデックスからのものです。


ヘルプページは別の場所Column(- , "名前", "フォーマット済み")と
列 (名前) として. こちらにも情報がありますスクリプトガイド > JSLビルディングブロック > 名前解決の規則 > 名前解決に関するよくある質問とスクリプト ガイド > データ テーブル > 列 > データ列オブジェクトへのメッセージの送信またテーブル内の行を反復する、つまり基本的にはドキュメント (特にスクリプト ガイド) です。
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")このビットを説明するリファレンスを回答に含めていただけますか?
"As Column() は列に「アクセス」します (これが何を意味するかは場合によって異なります... )」
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")+1 投稿はあまり好きではありませんが、 @jthiこれは、私がプロダクション スクリプトに対して行っているのとまったく同じ方法です。私は通常、次のように考えます
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")これは少し長い投稿で、あちこちジャンプします。申し訳ありません..
Column()、Column()、:colname、... は JSL では単純ではなく、どちらを使用するかはケースによって異なります。 私の好ましい方法は、いつもを使用します(できない場合、またはスクリプトを少しきれいにしたい場合を除く)Column(datatable_reference、「列の名前の文字列」)。 :colname には、スクリプターの利益のために時々使用できる利点があります (いくつかはここで言及されていますスクリプトガイド > JSLビルディングブロック > 名前解決の規則 > 名前解決の規則例外セクションで)。
また、あちこちで発生する可能性のある問題を回避するために、:colname 構文の代わりに列名の文字列を使用することも好みます。 たとえば、 << Get Column Names("String") の代わりに << Get Column Names() を使用し、必要に応じて Column(string) で参照を取得します。
Column(- , "名前", "フォーマット済み")と
列 (名前) として同じではありません。 Column() は列への参照を返し、As Column は列に「アクセス」します (これが何を意味するかはケースによって異なります...)。 このスクリプトを初めて実行すると、Row() が JMP のインデックス作成用に適切に定義されていない (0 として初期化されている) ため、dt:timestamp は欠損値を返します。
もっと見る...
@ih列の名前の変更を管理する方法について、いくつかの良い提案があります。 また、たとえばグラフビルダーに列を挿入するときに、次を使用できますEval Insert、Eval Expr、Parse、および Substitute を使用して、ある式を別の式に挿入します。時には Eval()。 << Get Name は、時々、または Filter Col Selector / Col List Box を使用したユーザー インターフェイスの構築にも役立ちます ( @ポールディーン提案)。
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")どうやってあなたスクリプトが参照する必要がある列を知っていますか?列名の変更を本当に監視する必要がある場合は、テーブルの変更をサブスクライブし、それらの列名をどこかに記録することでそれを行うことができますが、それはかなり複雑になると思います.代わりに、列のプロパティを定義して検索できますか?
スクリプト ガイドのサブスクライブの例:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
列のプロパティを使用
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];Re: Column() vs As Column() vs dataable:column vs dt:As name("column")numer column(dt, 1) で列にインデックスを付けるか、ユーザーに列を選択するか、列名を入力するように求めます。 ヘルプ ファイルで New Window() を調べます。
Column() vs As Column() vs dataable:column vs dt:As name("column")JSL には列を参照する方法がいくつかあります。 まずデータテーブルを開いてみましょう。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
次に、次のようなテーブル スクリプトを作成します。
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
自動化されたスクリプト (グラフなど) では、ユーザーが列の名前を変更すると、スクリプトが新しい列名に適応されるようです。 これはカスタム JSL では失敗し、Index() のようなものが表示されました。
これらの方法をすべて使用して、JSL スクリプトを列名の変更に対して堅牢にするにはどうすればよいでしょうか?
よろしくお願いします。
自動化とスクリプト作成マスカスタマイゼーションRe: Column() vs As Column() vs dataable:column vs dt:As name("column")これが願いです:)
「列がありません」エラーをキャッチし、選択メニューを提供します
同様の機能が Jmp 17 の新しいワークフロー ビルダーで導入されたばかりなので、JSL エディターに簡単に実装できるはずです。
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
Re: Column() と As Column() と datable:column と dt:As name("column") の比較@brady_brady は、Better JSL Smoother Migration: How To Fix Your Own Code @10min でこのトピックについて詳しく説明しています。
編集:
残念ながら、ビデオはアーカイブされてしまいました。
https://community.jmp.com/t5/contentarchivals/contentarchivedpage/message-uid/537424#U537424
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")すごいですねダッシュボード列の名前を変更した後も機能します
- テーブルスクリプトとして保存されている場合
編集:
ああ、いいえ...ダッシュボード/アプリケーションがテーブル スクリプトとして保存されていない場合でも機能します。
面白い。
編集2 -制限:
アプリケーションの JSL 「スクリプト」は自動的に更新されず、アプリケーションのバックグラウンドにあるコードのみが更新されます。

Re: Column() vs As Column() vs dataable:column vs dt:As name("column")このようなことを意味しますか?
コードを実行すると、TABLE SCRIPT の最初の 2 つのエントリが自動的に新しい名前に変更されました *)
グラフなどでも同じ動作です。すべてが新しい列名に合わせて自動的に調整されます。
とてもクール!
しかし、As column() と Column() の場合は機能しませんでした。
テーブルスクリプトとして保存されていないスクリプト内の列名についても同様でした...
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")列名は数字であるため、純粋な英語の文字を使用すると、このようなことは起こりません。