使用交互式滑塊框創建交互式帕累托圖以更新列公式我有一套生產中的產品需要通過的規範。 我有一列包含一個公式,該公式指定每個規範所需的值(限制),並創建一個二進制通過/失敗。 此公式用於創建通過數和百分比的帕累托圖。 我想創建一個帶有滑塊框的交互式帕累托圖來調整測試限制,並查看更改這些限制將如何改變通過/未通過測試的項目數量。
我的主要兩個問題如下:
1) 將測試多種產品類型。 我不會為每個產品提供一致數量的規格,因此我計劃將這些規格插入列表中(在附加的代碼中,即“規格”)並使用外部數據表來填寫所需產品的規格。 這不是我需要幫助的事情,而是需要考慮的事情,因為我必須在 for 循環中輸入滑塊框、數字框等,而不直接引用變量。
2)我需要一個變量數組(規格限制),以便我可以更新公式以進行測試。 同樣,這將需要在 for 循環中。 正如腳本現在所顯示的那樣,規格限制的值似乎沒有更新通過/失敗列的公式中的值。 當滑塊框收到 << inval 命令並且圖形刷新時,沒有任何事情發生,因為實際的通過/失敗列沒有更新。 我目前正在使用關聯數組來存儲規格限制。 這可能不是正確的方法。
我附上了我正在使用的示例數據表以及當前腳本。 謝謝!
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));分析數據表圖形腳本視窗回复:使用交互式滑塊框創建交互式帕累托圖以更新列公式代碼經過大量修改,我不能 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);
);
在您的代碼中,您似乎可能在測試中缺少 ^ 以更新限制關聯數組中的值。