列の数式を更新するためのインタラクティブなスライダーボックスを使用したインタラクティブなパレート図の作成生産中の製品が合格する必要がある一連の仕様があります。 各仕様で必要な値(制限)を指定し、バイナリの合格/不合格を作成する数式を含む列があります。 この式は、合格数とパーセンテージのパレート図を作成するために使用されます。 テスト制限を調整するためのスライダーボックスを備えたインタラクティブなパレート図を作成し、これらの制限を変更すると、テストに合格/不合格になるアイテムの量がどのように変化するかを確認したいと思います。
私の主な2つの問題は次のとおりです。
1)テストされる製品タイプは複数あります。 製品ごとに一貫した数の仕様がないので、これらの仕様をリストに挿入し(添付のコードでは「spec」になります)、外部データテーブルを使用して目的の製品の仕様を入力する予定です。 これは私が助けを必要としているものではありませんが、変数を直接参照せずにforループにスライダーボックスや数値ボックスなどを入力する必要があるため、考慮する必要があります。
2)テスト目的で数式を更新できるように、変数の配列(仕様制限)が必要です。 繰り返しますが、これはforループ内にある必要があります。 スクリプトは現在のところ、仕様制限の値が合格/不合格列の式のを更新していないようです。 スライダーボックスが<
使用しているサンプルデータテーブルと現在のスクリプトを添付しました。 ありがとう!
Names default to here(1);
RangeMin = Associative array(["m1" => 0,
"m2" => 0,
"m3" => 0,
"thickness" => 0]);
RangeMax = Associative array(["m1" => 1,
"m2" =>1,
"m3" => 1,
"thickness" => 20]);
limit = Associative array(["m1" => 0.5,
"m2" => 0.5,
"m3" => 0,
"thickness" => 4]);
SliderVars = {0.5,0.5,0.5,10};
spec = {"m1","m2","m3","thickness"};
GraphingTable = current data table();
finalDisplay = New Window ("test", testlist = h list box());
:name("Pass/Fail") << Set Formula(
if((:thickness >= limit["thickness"] & :m3 >= limit["m3"] & m2 >= limit["m2"] & m1 >= limit["m1"]), "Pass", "Fail" )
);
PP= Graphing Table << Pareto Plot( Cause( :"Pass/Fail"n ) );
ValuesOutlineBox = Outline Box ( "Values", SliderList = v list box());
For(i=1, i<= n items(spec),i++,
SliderList << append(
h list box(
Text box(spec[i]),
testing = spec[i];
eval(
parse(
eval insert(
"Var^char(i)^ = ^SliderVars[i]^;
SB^char(i)^ = Slider Box(
^RangeMin << get value(spec[i])^,
^RangeMax << get value(spec[i])^,
Var^char(i)^,
NEB^char(i)^ << set( Var^char(i)^ );
limit[testing] = Var^char(i)^;
testlist[2] << Delete Box();
wait(0.1);
testlist << append(report(PP));
);"
);
);
),
testing = spec[i];
eval(
parse(
eval insert(
"NEB^char(i)^ = Number Edit Box( Var^char(i)^,
<< set function(
Function( {this},
Var^char(i)^ = this << get;
SB^char(i)^ << inval;
limit[testing] = Var^char(i)^;
testlist[2] << Delete Box();
wait(0.1);
testlist << append(report(PP));
)
)
);"
);
);
),
)
)
);
testlist << append(ValuesOutlineBox);
testlist << append(report(PP));分析データ表グラフィックススクリプティングウィンドウズRe:列式を更新するためのインタラクティブスライダーボックスを使用したインタラクティブパレート図の作成コードはかなり大幅に変更されており、これがどれほど信頼できるかは100%わかりませんが、set関数とchild / sib / parentを使用して、スライダーボックスに関連する正しい参照を取得します。 また、数式値が更新されると、パレートが更新されるようです。 これは、Eval(EvalExpr())を使用することでメリットが得られる可能性があります
Names Default To Here(1);
specs = Associative Array();
specs["m1"] = {0, 0.5, 1};
specs["m2"] = {0, 0.5, 1};
specs["m3"] = {0, 0, 1};
specs["thickness"] = {0, 4, 20};
GraphingTable = Current Data Table();
Column(GraphingTable, "Pass/Fail") << Set Formula(
If((:thickness >= specs["thickness"][2] & :m3 >= specs["m3"][2] & m2 >= specs["m2"][2] & m1 >= specs["m1"][2]),
"Pass",
"Fail"
)
);
nw = New Window("test", testlist = H List Box(
ValuesOutlineBox = Outline Box("Values", SliderList = V List Box()),
Graphing Table << Pareto Plot(Cause(:"Pass/Fail"n))
));
filler = {};
For Each({{spec_name, spec_list, idx}}, specs,
new_control = H List Box(
Text Box(spec_name),
Slider Box(spec_list[1], spec_list[3], 0, << Set Function(function({this},
(this << Sib) << Set(this << get, run Script(1));
))),
Number Edit Box(spec_list[2], << Set Minimum(spec_list[1]), << Set Maximum(spec_list[3]), << Set Function(function({this},
(this << Prev Sib) << Set(this << get);
specs[((this << parent) << child) << get text][2] = this << get;
Column(GraphingTable, "Pass/Fail") << Eval Formula;
)));
);
SliderList << Append(new_control);
);
あなたのコードでは、制限連想配列の値を更新するためのテストの周りに^が欠けているようです。