列から仕様限界を抽出しようとしています<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
カスタム レポートで使用できるように列仕様の制限を抽出しようとしていますが、奇妙な動作が発生します。 以下は私がやっていることの抜粋です。
Globals() をクリアします。
dt = データテーブル( "何とか" );
Cols1 = dt << 列名を取得( 数値, 連続 );
For( jj = 1, jj <= N Items(cols1), jj++,
spec_x = cols1[jj] << Get Property( "仕様制限" );
印刷(
Char( jj ) || ": 列は " || Char(cols1[jj] << get name ) ||
"、LSL は " || Char( spec_x["lsl"] ) ||
"、USL は " || Char( spec_x["usl"] )
);
);
print ステートメントは実際の最終用途ではありませんが、有用な方法で制限を抽出したかどうかを示すのに役立ちます。
さて、このコードは 2 列の小さなテスト テーブルでは正常に動作します。
「1: Col は X、LSL は 1、USL は 2」
「2: Col は Y、LSL は 3、USL は 7」
これは私のテーブルにあるものと一致します。 しかし、73 (数値、連続) 列からなる大きなテーブルの場合、何らかの理由で spec_x に何も入力できず、次の結果が得られます。
「1: Col は Rc_N+PO (N/.09/280)、LSL は .、USL は .」
「2: Col は Rc_V1 (N/.1/1260)、LSL は .、USL は .」
「3: Col は Rc_V2 (N/.1/1188)、LSL は .、USL は .」
「4: Col は Rc_V3 (N/.1/1188)、LSL は .、USL は .」
「5: Col は Rc_V4 (N/.1/1188)、LSL は .、USL は .」
...など
テーブルには間違いなく制限データがあります。再確認しました。 それでは、機能しない理由はあるのでしょうか? テーブルは開いており、スクリプトは明らかに列名を正常に取得していますが、制限を取得させることができません。
スクリプトを実行して spec_x =cols1[jj] << Get Property( "Speclimits" ); に到達するとログには次のように表示されます。
スペック制限( LSL( 10 )、USL( 50 )、ターゲット( 30 ) )
しかし、print ステートメントを実行すると、次のように表示されます。
「1: Col は Rc_N+PO (N/.09/280)、LSL は .、USL は .」
助けていただければ幸いです。
ありがとう、
マシュー。
Re: 列からスペック制限を抽出しようとしていますこれでうまくいきました。ご協力ありがとうございます:)
Re: 列からスペック制限を抽出しようとしています仕様制限の作成方法に応じて、<
dt =新しいテーブル( "例" ) ;
dt <<新しい列( 「ノースペックリミット」 、数値、継続的) ;
dt <<新しい列( 「Rc_N+PO(N/.09/280)」 、
数値、
継続的、
プロパティの設定( 「スペックの限界」 、スペック制限( LSL ( 10 ) 、 USL ( 50 ) 、目標( 30 ) ) ) 、
設定値( [ 18.306 、 18.937 、 17.979 】 )
) ;
dt <<新しい列( "テスト" 、
数値、
継続的、
プロパティの設定( 「スペックの限界」 、 { LSL ( 1 ) 、 USL ( 5 ) 、目標( 3 ) 、制限を表示( 0 )} ) 、
設定値( [ 2 、 3 、 4 】 )
) ;
列1 = dt <<列名の取得(数値、継続的な) ;
のために(じー= 1 、じー<= N 個のアイテム(列1 ) 、じー++、
Q =列1 [じー】 <<プロパティの取得( 「スペックの限界」 ) ;
スペック_x =評価リスト( {引数( Q 、 1 ) 、引数( Q 、 2 ) 、引数( Q 、 3 )} ) ;
もし( N列(ロック(スペック_x 、空の() ) ) 、
印刷する(
シャア(じー) || ":コル" ||シャア(列1 [じー】 <<名前を取得する) ||
"、スペック制限はありません"
) 、
印刷する(
シャア(じー) || ":コルは" ||シャア(列1 [じー】 <<名前を取得する) || "、LSL は "
||シャア(スペック_x [ 「LSL」 】 ) || "、USL は " ||シャア(スペック_x [ 「USL」 】 )
)
) ;
) ;
Re: 列からスペック制限を抽出しようとしていますお二人ともご返信ありがとうございますが、まだ運が良くありません。 ところで、私は Win7 で JMP 11.2 64 ビットを使用しています。
MS: 新しいテスト テーブルを作成するときはあなたのコードは正常に動作しましたが、私のテーブルを使用するときにはうまく動作しませんでした。
dkeshock: あなたの編集は役に立ちませんでしたが、列名を簡単に抽出する方法を教えてくれました、ありがとう 
根本的な原因はあるかもしれないと思いますが、それを解決する方法はまだわかりません。 列の 1 つを新しいテーブルにコピーし、手動で制限を入力した新しいテスト列を作成しました。 このスクリプトは新しいテスト列に対して機能します。
「1: Col は Rc_N+PO (N/.09/280)、LSL は .、USL は .」
「2: Col はテスト、LSL は 1、USL は 5」
そこで、2 つの列 (意図的に数行に制限) のスクリプトを調べました。
新しい列( "Rc_N+PO (N/.09/280)",
数値、連続、Format( "Best", 10 )、
プロパティを設定( "仕様制限"、仕様制限( LSL( 10 )、USL( 50 )、ターゲット( 30 ) ) )、
設定値( [18.306, 18.937, 17.979] )
)
新しい列( "テスト",
数値、連続、Format( "Best", 12 )、
Set Property( "スペック制限", {LSL( 1 ), USL( 5 ), Target( 3 ), Show Limits( 0 )} ),
設定値( [2, 3, 4] )
)
仕様制限プロパティのコードが異なっているようです。 考えられる唯一の理由は、実際のデータでは機能プラットフォームを使用してデータ テーブルから仕様制限をインポートしたが、テスト列では手動で入力したということです。
これが私の問題の原因でしょうか? これを回避する方法はありますか、それとも仕様制限を手動で (または MS のようなスクリプトを使用して) 入力する必要がありますか?
ありがとう、
マシュー。
Re: 列からスペック制限を抽出しようとしています最初にテストしたとき、既存のテーブルにある 81 列のうち #58 がうまくいきました。同じ時点で列名が Cols1 変数の規則を切り替えていることがわかりました (最初の 58 個は「:ColumnName」で、残りは ':' なし)。そのため、文字列名の使用に切り替えたところ、うまくいきました。
上記の例では、2 つの「Cols1[jj]」を「Column(cols1[jj])」に変更するまで、私の側では実行されません。それには理由があるのでしょうか?
Re: 列からスペック制限を抽出しようとしていますこれは動作するはずで、コードに基づく以下の例では動作します (JMP 11)。 Wait(0) コマンドを挿入して、パフォーマンスの問題かどうかをテストしてみてください。
//サンプルテーブルを作成する
dt =新しいテーブル( "例" ) ;
のために(私= 1 、私<= 100 、私++、
コル= dt <<新しい列( "テスト" 、数値、継続的な) ;
評価( evaexpr (コル<<プロパティを設定する( 「スペックの限界」 、 { LSL (式(私) ) 、 USL (式(私+ 2 ) ) 、目標(式(私+ 1 ) ) 、制限を表示( 0 )})))
) ;
//仕様制限を出力します
列1 = dt <<列名の取得(数値、継続的な) ;
のために(じー= 1 、じー<= N 個のアイテム(列1 ) 、じー++、
スペック_x =列1 [じー】 <<プロパティの取得( 「スペックの限界」 ) ;
印刷する(
シャア(じー) || ":コルは" ||シャア(列1 [じー】 <<名前を取得する) || "、LSL は " ||シャア(スペック_x [ 「LSL」 】 ) || "、USL は "
||シャア(スペック_x [ 「USL」 ] )
) ;
) ;
Re: 列からスペック制限を抽出しようとしていますこれは機能しますか?
グローバルをクリアする() ;
dt =データ表(「まあ」) ;
列1 = dt <<列名の取得(数値、継続的な、 "弦" ) ;
アイテム= N 個のアイテム(列1 ) ;
のために(じー= 1 、じー<=アイテム、じー++、
スペック_x =カラム(列1 [じー]) <<プロパティの取得( 「スペックの限界」 ) ;
印刷する(
シャア(じー) || ":コルは" ||シャア(列1 [じー】 ) ||
"、LSL は " ||シャア(スペック_x [ 「LSL」 】 ) ||
"、USL は " ||シャア(スペック_x [ 「USL」 】 )
) ;
) ;
Re: 列からスペック制限を抽出しようとしていますこの議論に関連して、仕様のプルを処理するために私が書いた素敵な小さな関数を次に示します。 式処理と連想配列を使用して、後で使用できる優れた小さな辞書を作成します。
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
使用方法は次のようになります。
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);