スピーカー | 成績証明書 |
| ウェンディマーフリー | こんにちは。本日はプレゼンテーションにご参加いただきありがとうございます。 さまざまな経験レベルのスクリプト作成者が遭遇する一般的なシナリオについてお話しできることを楽しみにしています。 |
| 私たちの目的は、これらの間違いを避けるためのツールと知識を得るために、何が起こっているのかを説明することです。 それでは始めましょう。 |
| おそらくデフォルトでは開かれていないため、ログのメッセージを確認するのを忘れがちです。 ただし、ログには、最近のスクリプト実行に関する有用な情報が含まれています。 それでは、JMP でこの例を詳しく見てみましょう。 |
| ここでは、スクリプトが単にデータ テーブルを開き、行の選択を試みていることがわかります。 このスクリプトを実行すると、 |
| 致命的なエラー、つまりエラーが原因でスクリプトが停止した状況については、対話型のエラー メッセージが表示されます。 ポップアップ ウィンドウは JMP 15 の新しい動作であり、これは環境設定でオフにできます。 |
| そのメッセージを閉じると、ログを確認するとウィンドウから同じメッセージが表示されますが、行番号も表示されます。 |
| 問題領域へのガイドとして役立つスクリプト ファイルの名前を見つけます。 他の重要なメッセージもログに表示されるため、これらのポップアップ ウィンドウだけに依存しないでください。 |
| また、必ずしもポップアップ ウィンドウが表示されるわけではありません。 それでは、別の例を見てみましょう。 |
| このスクリプトでは、作成者はテーブルを開いて分析を作成し、メッセージをログに出力しようとしています。 |
| このスクリプトを実行すると、分析が生成されていないことがすぐにわかります。 |
| もう一度ログを確認してみましょう |
| データ テーブルに見つからない列があったことがわかりますが、スクリプトは続行し、メッセージをログに出力しました。 |
| したがって、ここで重要なことは、特に何が起こったのかが期待を満たさない場合には、常にログを確認することです。 列名のスペルが間違っているという単純なものかもしれません。 |
| 現在のデータ テーブルの概念は、多くの場合、アクティブ テーブルとして説明されます。 しかし、テーブルがアクティブなデータ テーブルまたは現在のデータ テーブルになるのはなぜですか?また、それがスクリプトにとってなぜ重要なのでしょうか? |
| テーブルを開いたり、作成したり、その他の操作を行うと、そのテーブルが現在のデータ テーブルになります。 ただし、スクリプト作成者が予期していなかった、実行時にテーブルが最新になる他の方法もあります。 |
| JMP がバックグラウンドで処理するタスク。 たとえば、JMP は式を評価したり、ウィンドウを更新したりする必要がある場合があります。 |
| これらのバックグラウンド プロセスにより、実行時に意図したテーブルとは異なるテーブルがアクティブになる可能性があります。 これにより、スクリプトが失敗したり、さらに悪いことに、JMP が間違ったテーブルを使用したことにさえ気づかなかったりする可能性があります。 |
| そこで、ここでいくつかを提供しました |
| データ テーブル固有の参照を使用してスクリプトを作成するためのベスト プラクティス。 これにより、実行時にどのテーブルがアクティブであるかに関係なく、正しいテーブルが使用されるようになります。 |
| この例では、特定のデータ テーブルに二変量呼び出しを送信して、そのテーブル内のデータが分析に確実に使用されるようにする方法を示します。 |
| 新しい列を特定のデータ テーブルへのメッセージとして使用することもできます。これにより、新しい列が目的のテーブルに作成され、現在の列には反映されません。 |
| オプションのデータ テーブル参照を使用することもできます。 ここでは、列の参照にそれを使用する方法を示しているだけであり、列の参照については後ほど詳しく説明します。 |
| 関数内でオプションのデータ テーブル参照を使用することもできます。これが利用可能な場合は、各行と集計の 2 つです。 |
| また、実稼働スクリプトで現在のデータ テーブル関数を使用してデータ テーブル参照を割り当てることは、データ テーブルの使用を避けることをお勧めします。 この例では、2 つのデータ テーブルを結合しており、そのテーブルへの参照を割り当てたいと考えています。 |
| それは結合から作成されます。 現在、結合は新しく作成されたテーブルへの参照を返します。 したがって、現在のデータテーブルに割り当てる代わりに、結合の作成時に参照を割り当てたいと考えています。 |
| したがって、ここでは、結合を呼び出すとき、およびこれを実行するときに、単に割り当てを行うだけです。 |
| 確かに、新しい DT 変数が目的のテーブルを参照しており、現在のテーブルの影響を受けないことがわかります。 |
| JSL 変数を使用して列を識別できるようにすることは一般的なタスクであり、使用する方法は目的の用途によって異なります。 |
| 列関数は、列への参照を単位全体として返します。 列名が文字列または文字列変数であるなど、さまざまな引数を受け入れます。 |
| インデックスまたはインデックスを表す数値変数。 添字を付けると、特定の行の列の値を参照できます。 |
| 列関数を使用できる場所としては、プラットフォーム呼び出し、列へのメッセージの送信、または列への変数参照の割り当てなどがあります。 |
| as column 関数は、現在の行の値への参照を返します。 |
| 指定された列の。 これは、column 関数と同じ引数をすべて受け入れますが、JMP では、別の方法で管理しない限り、現在の行は常に 0 であることを理解することが重要です。 |
| したがって、as column 関数を使用するのに最適な場所は、数式内で各行に対して、どこで選択するかです。これは、設計により各行を評価する際に行を制御するためです。 それでは、私たちが何を意味するのか例を見てみましょう。 |
| ここではサンプル データ テーブルを開きます。 JSL 変数を列の名前に割り当て、select where で column 関数を使用しようとしています。 |
| このスクリプトを実行すると、行が選択されていないことがわかります。 何故ですか? select where は各行で評価されるため、 |
| 添え字なしで列関数を使用すると、行は選択されません。 また、column 関数は列への参照を単位全体として返すため、データの列全体が 14 に等しくなることはありません。 |
| したがって、解決策は、行添字を付けて column 関数を使用することです (そして、この行添字は、select where が評価されている間、現在の行を意味するだけです)。あるいは、as 列関数を使用して行を選択することもできます。 |
| 数式で JSL 変数を使用すると、いくつかの理由で問題が発生する可能性があります。 JSL 変数の有効期間は現在の JMP セッションに制限されており、変数の値が変化すると、式の結果も変化します。 |
| また、数式エディターで数式を見ない限り、問題があることに気づかない可能性があります。 |
| それでは、例を見てみましょう。 ここでは、データテーブルを開いて、合計したい列のリストを作成しているだけです。 |
| 新しい数式列を作成し、sum 関数で JSL 変数を使用しています。 それでは、これを実行してみましょう。 新しい列が作成され、データが入力されたことがわかります。 しかし、数式エディタを見てみましょう。 JSL 変数が sum 関数で使用されたとは決して言っていません。 |
| そして、これを無視して依存列の 1 つに変更を加えると、列の式が自動的に更新されていないことにも気づきました。 |
| それでは、JMP を保存して閉じ、このテーブルを保存して JMP を閉じましょう。 |
| そしてまた始めます。 |
| ここで、その JSL 変数の有効期間が前の JMP セッションに制限されていたことを思い出してください。 それでは、テーブルを開いて何が起こるかを見てみましょう。 |
| 変数...列の式がまだ再評価されていないことに気付きました。 これを見ると、まだ JSL 変数が表示されていますが、その下に赤い線が表示されています。 そして、その上にマウスを置くと、名前が未解決というエラーが表示されます。 |
| 数式を再評価しようとすると、エラー メッセージが表示されます。エラーを無視すると、すべてのデータが欠落したものに変更されます。 では、これをどうやって修正すればよいでしょうか? |
| 式で変数を使用する場合は、式を評価する前に変数をその値に置き換えるよう JMP に指示する必要があります。 これには replace を使用できますが、今日は式関数を説明します。 それでは、このテーブルを閉じましょう。 |
| テーブルの新しいコピーを開き、列のリストを再構築します。 |
| それでは、これを回避する方法を見てみましょう。 |
| したがって、eval 式関数は、EXPR 関数でラップされている引数内の変数を評価して置き換えるよう JMP に指示します。 |
| そして、未評価の式を返します。 したがって、このコードでは、JMP は式 SAT スコアを置き換えて、列のリストに置き換えます。 |
| それでは、このセクションだけを実行して、何が起こるか見てみましょう。 そして、sum 関数には、変数の代わりに合計したい列のリストが含まれていることがわかります。 |
| しかし、実際に列が作成されたわけではありません。 単にこの式が返されるだけです。 したがって、それを評価するために、eval 式関数の周囲に eval 関数を追加します。 |
| これにより、JMP は置換が行われた後に新しい列式全体を評価します。 つまり、電子メールには、「run... eval 式によって返されたものを実行してください」と書かれています。これがこれです。 |
| それでは実行してみましょう。列が作成され、期待どおりのデータが得られていることがわかります。 |
| そして、数式には変数がなくなり、列のリストが含まれます。 |
| また、依存列のデータを変更すると、数式が自動的に更新されるようになりました。 |
| それでは、これをジャスティンに渡して、避けるべきさらにいくつかの間違いについて話します。 |
| ジャスティン・チルトン | さて、人々が犯すもう 1 つの間違いは、列のプロパティを設定しようとしていて、その構文が少し難しい場合です。 詳細に入る前に、 |
| 列のプロパティの観点から列とは何かについて話しましょう。 したがって、本質的に列は単なる |
| このプロパティ情報のリポジトリ。 それを確認するための構文チェックは行われません。 |
| 指定したものが正しいので、必要なものをすべて保存できるようになります。 これは、プロパティの利用者が、JMP プラットフォーム、列プロパティの使用、さらには JSL アプリケーションなど、何かが特定の形式であることを期待しているためであることを意味します。 |
| それでは、簡単な例を見てみましょう。 |
| ここでは、テストのために列プロパティと呼ばれるテーブルを開きます。 NPN1 という名前の列が 1 つと、test という名前の列が 1 つあります。 この列には仕様制限とアクセス プロパティがありますが、 |
| テストする仕様制限プロパティを追加します。 ここに私たちの考えがあります |
| これは、仕様制限列のプロパティを設定するための正しい構文です。 これを実行するとエラーは発生しませんが、 |
| 列を見てください。その列には仕様制限があります。 |
| それは可能ですが、それが正しくないことはわかります。 仕様限界を使用した工程能力分析を依頼したところ、 |
| これを実行すると、NPN1 については取得されますが、テスト列については取得されません。 これは、テスト列の仕様制限プロパティに格納されている内容が正しくないためです。 |
| したがって、設定されたプロパティの仕様制限の使用方法をすでに知っている場合にこれを行う 1 つの方法は、 |
| プロパティ メッセージを列 NPN1 (正しいことがわかっている列) に送信するだけです。 したがって、その 1 行だけを実行すると、正しい構文が得られます。 |
| これは実際、これが個別の引数ではなくリスト形式であるべきであることを示しています。 したがって、別の方法として、get プロパティに慣れていない場合は、正しいことがわかっている列に移動して、列のプロパティをコピーすることができます。 |
| それをスクリプトに貼り付けると、列プロパティといくつかの設定プロパティが追加されたことがわかります。 したがって、列プロパティの追加は、複数の設定プロパティをまとめて処理する方法にすぎません。 それを削除でき、余分なアクセスも削除できます |
| 財産。したがって、削除が完了したら、この set プロパティを使用して、send 演算子でテスト列に送信できます。 それで、これを実行すると、 |
| 私たち...それは...仕様制限を上書きしましたが、仕様制限を使用して同じディストリビューションを実行することでそれを確認できます。 |
| ここで、両方のカラムの工程能力分析が行われていることがわかります。 これは仕様制限を取得する方法の一例にすぎませんが、JSL で構文を取得して適用する必要がある列プロパティにも同じことが当てはまります。 |
| したがって、次に説明する間違いは、ディスパッチ コマンドの操作です。 では、ディスパッチコマンドとは何でしょうか? |
| これは、赤い三角ボタン メニューの [スクリプト ウィンドウに保存] または [クリップボードに保存] を実行したときに、保存されたスクリプトに表示されるものです。 |
| また、基準線などを追加したり、アウトライン ボックスを閉じるなど、何かを変更したりすると表示されます。 このコマンドは、JMP がグラフを再作成できるようにするための内部方法として開発されました。 |
| あなたが行ったカスタマイズで。 そして、ユーザーがそうすることは計画されていませんでした |
| これを動的変数でカスタマイズします。 これは、ディスパッチ コマンドの引数の一部が JSL 変数を受け入れないことを意味します。 それでは、それが起こる可能性のある例を見てみましょう。 これがスクリプトです。 私たちには、 |
| table と、少し後で使用する文字列変数。 そして、これは基本的に、スクリプトに保存ウィンドウによって返されるものです。 したがって、これを実行すると、 |
| 測定軸の最小最大値と増分を設定するディスパッチコマンドがわかります。 |
| ここでは 0 から 1.4 まで設定されます。 これで、ディスパッチ コマンドが |
| ここではアウトライン ボックスのタイトルですが、そのアウトライン ボックスのタイトルは実際には y 入力に基づいています。 つまり、これをユーザーからの動的な入力とし、この変数だけを持っているとします。 Y には変数を使用できます。 |
| ただし、ここではその列の名前としてそれを使用する必要もあります。 これを実行すると、実際には正しい軸設定 0.4 から 1.2 が取得されていないことがわかります。これは、送信したものが処理されなかったことを意味します。 |
| したがって、これに対処する方法がいくつかあります。 1 つ目は、Wendy が数分前に話した eval 式ソリューションを使用することです。 したがって、ここには同じ eval 式があることがわかります。 実際には、前の例で試した連結をラップしたいと考えています。 |
| ここ。 |
| したがって、eval 式はこの全体を評価することになります。 したがって、 eval EXPR を実行すると、 |
| それ全体を連結された文字列に置き換えるだけです。その後、評価を行うときに覚えておいてください。 |
| その表現を実行します。 したがって、ここには 0 ~ 1.4 があります。 それは一つの方法です。 |
| しかし、それでも少し難しい場合もあります。 また、ディスパッチ コマンドを実際にどのように操作する必要があるかについても説明します。なぜなら、ディスパッチ コマンドをまだ使用しているため、それらのコマンドがどのように機能するかを知る必要があるからです。 したがって、これを行う最も一般的な方法は、このディスパッチ コマンドを完全に削除することです。 |
| そこで、いわゆるディスプレイボックスの添字を使用します。 ここでは、削除したディスパッチ コマンドを使用してこれを実行し、元の軸設定を取得します。 |
| そして、私たちがやろうとしているのは、これをどうやって書いたらいいのかわからない前に、ただ見ただけです。 このアイコン、このアウトラインボックスに移動し、右クリックします |
| ツリー構造を編集して表示します。 これは、このアウトライン ボックス内の表示ボックス ツリー構造を示しています。このアウトライン ボックス内で、この軸ボックスが変更したいものであることがわかります。 したがって、このアウトライン ボックス内には軸ボックス 1 があります。 |
| それでは、スクリプトを書いてみましょう。 このレポート関数を使用して、プラットフォーム OBJ1 のレポート層を取得します。 |
| 次に、列名に基づいて、アウトライン ボックスのタイトルを取得するために添字を付けます。 |
| そしてその中で、私たちはできる限り具体的にしたいと考えています。そうすれば、JMP の将来のバージョンで状況が変わったとしても、問題が発生する可能性が低くなります。 |
| その中で、軸ボックス 1 が必要です。これがその軸ボックスの取得方法です。次に、ディスパッチ コマンドから同じ情報を取得して、軸ボックスに送信するメッセージに変換するだけです。 |
| そして、ここで軸の設定が 0 から 1.4 になっていることがわかります。 |
| したがって、これを行う別のより強力な方法は、XPath を使用することです。 同じことを行いますが、少し複雑になる可能性がありますが、ボックスに関する基礎となるデータを使用できるため、将来のバージョンの JMP ではより柔軟な対応が可能になります。 |
| したがって、これから説明する最後の間違いは、グローバル名前空間のみを使用することです。 それで |
| ご存知ないかもしれませんが、どこに配置するかを指定せずにシンボルを作成すると、そのシンボルはグローバル名前空間に入ります。 したがって、これは、個人的に使用するために何かをモックアップする場合の簡単なスクリプトに最適です。 |
| ただし、同僚に送信するスクリプトや、コミュニティで公開するスクリプトやアドインを公開する場合には、これは良いアイデアではない可能性があります。 |
| JMP でのスコープ設定と名前検索がどのように機能するかについてもう少し詳しく説明します。 この図の一番下から始めます。 ローカル スコープには、関数とローカル ボックスを含む任意の数のスコープを指定できます。 |
| したがって、シンボルが見つからない場合、または書き込み中か読み取り中かに応じてローカルに移動するように指定しなかった場合は、 |
| 次に here スコープがあり、これは基本的にファイルごとに 1 つ存在します。 そして、グローバル スコープがあります。これは本質的に、JMP セッションの 1 つのスコープです。 そして右側には、名前空間スコープがあります。これは、実際に明示的に検索する必要があるものです。 |
| アクセス。例を見てみましょう。 これはすべてのシンボルを削除するだけであり、どこに配置するかを指定していないため、グローバルに配置されます。 したがって、x は 5 です。 しかし、もし他の誰かが、「私もそうだ」というようなスクリプトを公開したらどうなるでしょうか。 |
| 持っています |
| 使用したい変数x。 そして、どこに置くかは指定しません。 ということで10に設定してみます。 |
| しかし、スクリプトに戻ると、おそらくこれは設定した変数であり、ボタンにコールバックがあるとします...ボタン |
| その変数に依存するアクションがあった場合、それを使用しようとすると、変数が変更されてしまい、おそらく望ましくありません。 |
| では、これに対処するにはどのような方法があるのでしょうか? これを行う最も簡単な方法は、デフォルトの here(1) の名前を使用することです。 これは、グローバル スコープに移動するように明示的に指示しない限り、最終的には何もグローバル スコープには入らないことを意味します。 それでは見てみましょう |
| この時点で |
| 例。したがって、私たちが行ったことは、この名前のデフォルトを here(1) に追加することだけです。 通常はスクリプトの先頭に記述しますが、実際にはどこにでも記述できます。 |
| シンボルをクリーンアップして、この変数 x を 5 に設定します。 それで、ここに他の聖句があります。 |
| それは、私があなたの、あなたのxにアクセスしたいと言っています。 しかし、実際には、この x は、この here 名前空間内のこの x にアクセスすることはできません。 それで |
| スクリプトの一部をコピーして、X = 50 を実行してみましょう。 |
| したがって、右側のスクリプトの X は 50 ですが、左側のスクリプトの X には影響しません。 これは、シンボルを他のスクリプトやアプリケーションから簡単に分離するための優れた方法です。 |
| もう 1 つのオプションは、カスタム名前空間を使用することです。 これは少し高度ですが、非常に強力です。 それで、またここに来ました...私のことをはっきりさせてください |
| シンボルを使用してから新しい名前空間を作成し、名前空間内に変数 x を設定してそれを表示します。 したがって、値は 5 になります。 |
| そして、ここには別のスクリプトがあります。 おそらくこれはあなたのスクリプトの 1 つであり、あなたはそれを知っています |
| myNSは存在します。 したがって、これにアクセスしてみると、その名前がわかっているので、問題なくアクセスできます。 しかし、誰かがあなたの知らないうちにあなたのシンボルを変更しようとする可能性ははるかに低くなります。 それで |
| このシンボルを変更しても 10 のままですが、X を実行するだけでは、名前空間からの X の結果には何の影響もありません。 |
| ウェンディにそれを返すつもりです。ウェンディは見落とされているリソースについて教えてくれるでしょう。 |
| ウェンディマーフリー | ありがとう、ジャスティン。 JSL について詳しく学ぶために利用できるリソースが数多くあり、その多くは無料です。 ここでは、JSL について詳しく調べて学ぶための一般的な場所をいくつかリンクしました。 |
| また、連絡できる技術サポートも提供しています。また、このトピックに関する書籍もいくつかあります。 もちろん、当社のトレーニング リソースとそこに用意されているプランを参照することを常にお勧めします。 |
| JMP コミュニティーでこのプレゼンテーションに関連する文書を必ず参照してください。そこで取り上げた間違いがさらにいくつかありますが、今日は説明する時間がありませんでした。 ご清覧ありがとうございました。 |