ループのデータフィルターこんにちは、
私はスクリプト作成に関してはかなり初心者です。 for ループは理解しましたが、ここで少し助けが必要です。
スクリプト ガイドでデータ フィルターの for ループの例が見つかりません。 誰かが構文について助けてくれれば、それは素晴らしいことです。
私がやろうとしているのは、ツリーマップがあり、データ フィルター テーブルを使用して 'for' ループを構築し、グラフ出力を .png ファイルとして自動的に保存する必要があるということです。
図を添付しました。 たとえば、条件 1: ウェハ 11、25C および式 NO のすべての Vpp トリムセットを選択 (1 つのグラフ)
条件 2: ウェハ 12、85C (0,11111) および式 NO のすべての Vpp トリムセットを選択 (1 つのグラフ)
条件 3: ウェーハ 11 (9 つのグラフ) とウェーハ 12 のすべての各トリムセット値を YES (2 つのグラフ) でプロット
コード内で 1 つずつ実行する場合は実行できますが、まとめて実行することはできません。
ありがとう
Re: ループ用データフィルターありがとう@David_Burnham 、 @Craige_Halesクレイジと@txnelson
あなたたち最高!
Re: ループ用データフィルターニース!Re: ループ用データフィルター以下に示す例には、行がない組み合わせをスキップするコードが含まれています。
http://www.pega-analytics.co.uk/blog/scripting-data-filters/
Re: ループ用データフィルター何が起こっているのか理解しています。 クレイジさん、本当に分かりやすい説明をありがとうございました。
条件に関連付けられた行が見つからない場合、条件は中断されて停止すると思います。
「データ テーブル 'Final table' の Where 句には行がありませんでした: Wafer == "12" & Formula == Empty()"
代わりに、ループでプロットを続けることができるように続行できますか?
Re: ループ用データフィルターコード例では、gb はプラットホーム物体。 の報告() 関数は、プラットフォームの表示レポートを保持する DisplayBox をプラットフォーム オブジェクトに要求します。 プラットフォームは、周囲にさらに DisplayBox があることを認識しません。 where 句を保持する DisplayBox に移動するには、<Re: ループ用データフィルター
右。または gb が設定されていないか、gb がすでに閉じられています。
使用できます
show(type(gb));
showproperties(gb);
スクリプト内でオブジェクトに関する情報を取得します。 ログに次のような内容が表示されるはずです。
Type(gb) = "Scriptable";
Show Control Panel [Boolean] [Default On] (Displays or hides the control panel.)
Show Legend [Boolean] [Default On] (Displays or hides the legend to the right of the graph.)
Legend Position [Enum] {Right, Bottom, Inside Left, Inside Right}
Legend Settings [Action](Opens a dialog to modify the properties of the legend.)
Continuous Color Theme [Action](Se .... < a lot more follows>
JMP では、「スクリプト可能」オブジェクトは次のようなオブジェクトです。ディスプレイボックスまたはプラットホーム(または他の多くの可能性) にはメソッドがあります。 DisplayBox には、という名前のメソッドがあります。親これは、DisplayBox の親ボックスを取得するために << 演算子とともに使用されます。 ShowProperties 関数は、DisplayBox が認識しているすべてのメソッドをリストします。 これらは、スクリプト インデックス (ヘルプ メニューの下) で読みやすい形式で確認できます。
スクリプトに「スクリプト可能オブジェクトを期待しています...」と表示されている場合、それは gb 変数がスクリプト可能オブジェクトを保持していないことを意味します。
Re: ループ用データフィルターコメントからすると、クレイグが投稿したスクリプトについて誤解があると思われます。彼のコードでは、一度に複数のグラフ ビルダーのインスタンスが開かれることはありません。グラフ ビルダーへのポインター「gb」は、グラフ ビルダーの現在の実行を指します。グラフ ビルダー出力の画像オブジェクトを作成し、ファイルに保存します。次に、グラフ ビルダー オブジェクト (gb<
コードが複数のグラフ ビルダーを生成しており、それぞれがグラフ ビルダー インスタンスを指すハンドルとして「gb」を使用している場合、「gb」は最後のグラフ ビルダー インスタンスのみを指します。
Re: ループ用データフィルターこんにちは、クレイジさん
実際に実装して、for ループの拡張を開始しました。
「Send Expects Scriptable Object{630} in access or ratings of 'Send' , Report( gb ) << /*###*/parent/*###*/...」というエラーが発生しました。 開いているウィンドウが多すぎて、JSL がどの GB を指しているのか認識できないためでしょうか?Re: ループ用データフィルターありがとうクレイジRe: ループ用データフィルターdt = Open( "$sample_data/big class.jmp" );
ages = Data Table( "big class" ) << Summary( Group( :age ), Freq( "None" ), Weight( "None" ) );
sexes = Data Table( "big class" ) << Summary( Group( :sex ), Freq( "None" ), Weight( "None" ) );
Delete Directory( "$temp/myPics" );
Create Directory( "$temp/myPics" );
For( iage = 1, iage <= N Rows( ages ), iage++,
thisAge = ages:age[iage];
For( isex = 1, isex <= N Rows( sexes ), isex++,
thisSex = sexes:sex[isex];
Eval(
Eval Expr(
gb = dt << Graph Builder(
Size( 508, 438 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
where( age == Expr( thisAge ) & sex == Expr( thisSex ) )
)
)
);
parentBox = (Report( gb ) << parent)< picture = parentBox << getpicture;
picture << saveImage( "$temp/myPics/age" || Char( thisAge ) || "sex" || Char( thisSex ) || ".png", "png" );
// optional: Open( "$temp/myPics/age" || Char( thisAge ) || "sex" || Char( thisSex ) || ".png" );
gb << closewindow;
);
);
Close( ages, "nosave" );
Close( sexes, "nosave" );
Show( Files In Directory( "$temp/myPics" ) );
グラフビルダーの「祖父母」表示ボックスを取得する必要があるようです。 parent)<
screen capture of large icons of graphs saved by scriptscreen capture of large icons of graphs saved by scriptスクリプトによって保存されたグラフの大きなアイコンのスクリーン キャプチャ
Re: ループ用データフィルターそれはそうですが、グラフビルダーは where 句も受け入れます。
最高、
M
Re: ループ用データフィルターこの例は、y x x 分布の近似のものだったと思います。 グラフビルダーのツリーマップに対してそれを実行しようとしています。 試してみます。 ありがとう、M_アンダーソン
Re: ループ用データフィルター試してみてもいいかもしれません@Craige_Halesこの質問での回答 -リンク。 ローカル データ フィルターを操作するよりも、プラットフォーム呼び出しに where 句を追加する方が、おそらく目的の処理を実行するより洗練された方法です。