使用交互式滑块框创建交互式帕累托图以更新列公式我有一套生产中的产品需要通过的规范。 我有一列包含一个公式,该公式指定每个规范所需的值(限制),并创建一个二进制通过/失败。 此公式用于创建通过数和百分比的帕累托图。 我想创建一个带有滑块框的交互式帕累托图来调整测试限制,并查看更改这些限制将如何改变通过/未通过测试的项目数量。
我的主要两个问题如下:
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);
);
在您的代码中,您似乎可能在测试中缺少 ^ 以更新限制关联数组中的值。