データ+動的列名の使用をフィルタリングする適切で効率的な方法は何ですか?私は現在、Get Rows Whereを使用してデータテーブルをフィルターするスクリプトに取り組んでいます。
次に、行を使用してリストの値を取得します。
以下は私のスクリプトの一部です:
rows = main_dt << Get Rows Where(
As Column(G_TEMP_COL_STR) == M_TEMP &
As Column(G_WAFER_COL_STR) == M_WAFER
);<BR /><BR />values_list = As Column(main_dt,G_TEMP_COL_STR)[rows];知りたい:
- これを行うより良い方法はありますか?
- As Column()が:を直接使用するのに比べて遅いのはなぜですか?
- GUIで特定の列を割り当てることができるように作成したため、As Columnを使用しています
再:データをフィルタリングする適切な/効率的な方法は何ですか+動的列名の使用?あなたは私にもっと良い方法があるかどうかを伝えるのに十分な情報を提供していません。 「Get Rows Where」は、頻繁に使用しない限り非常に効率的です。 結果を取得するためにデータを完全に通過させます。 これを頻繁に実行している場合は、フルデータスキャンの数を減らす別の方法を使用することをお勧めします。
As Column()を使用すると、列名への直接参照を使用するよりも時間がかかると述べました。 それがあなたが決定したものである場合は、コードを次のように変更できます。 Get Rows Where()のハードコードされたバージョンをJSLに渡します。
G_TEMP_COL_STR="Height";
M_TEMP =72;
G_WAFER_COL_STR = "WAFER_NUM";
M_WAFER =12;
G_VALUE_COL_STR = "Values";
Eval(Parse("rows = main_dt << Get Rows Where( :" ||
G_TEMP_COL_STR || " == \!"" || Char(M_TEMP) || "\!" & :" ||
G_WAFER_COL_STR || " == " || Char(M_WAFER) || " );
values_list = main_dt:" || G_VALUE_COL_STR || "[rows];" ));
再:データをフィルタリングする適切な/効率的な方法は何ですか+動的列名の使用?ありがとう @txnelson !はい、それは50回以上のように呼び出されており、それはウェーハ、温度、およびVcc(追加)の組み合わせの数に依存します。上記のコードを使用して同じパフォーマンスを得ました。実際私もやってみました
main_dt:Eval(G_TEMP_COL_STR) == M_TEMP
しかし、それはそれを行うことに比べてまだ著しく遅いです
:temperature = M_TEMP
私はそれを遅くしている評価文字列である必要があると思います。
私は「怠惰/お粗末な」回避策を行いました、私は保ちました
Get Rows Where( :temperature == M_TEMP ...)
そして、GUIで選択した列の名前をそれに合わせて温度に変更しました。
As Column(dlg_ret[2]) << Set Name( "temperature" );
期待どおりに高速に動作しますが、列名を変更します。
再:データをフィルタリングする適切な/効率的な方法は何ですか+動的列名の使用?によって与えられる例 @txnelson を使用することによっても簡略化できます(IMO) EvalInsert 関数:これは、キャレット(^)記号に基づく変数置換を可能にします。 さらに表記 \ [...] \ エスケープシーケンスを使用せずに引用符を使用できるように使用できます。 したがって、最終的には次のように書くことが可能です。
Eval(Parse(EvalInsert("\[
rows = main_dt << Get Rows Where(
:^G_TEMP_COL_STR^ == "^M_TEMP^" &
:^G_WAFER_COL_STR^ == "^M_WAFER^"
);
]\")));
このスタイルのコードは、列の参照の代わりに使用することもできます
values_list = main_dt:Eval(G_VALUE_COL_STR)[rows]
しかし、なぜあなたが書くことができないのか分かりません:
values_list = column(main_dt,G_VALUE_COL_STR)[rows];