안녕,
Graph Builder 개체를 생성할 때 다음과 같이 변수를 정의할 수 있습니다: Variables(X(:x), Y(:y), Color(:color))
내가 하고 싶은 것은 목록에서 특정 열을 선택하여 색상 열을 동적으로 변경하는 것입니다. 이것이 어떻게 달성될 수 있습니까?
미리 감사드립니다.
안녕하세요 Jarmo, 이것은 사실입니다. 그러나 분명히 좀 더 정확해야 합니다. 열 전환기는 색상 열에만 영향을 주어야 하며 x 또는 y 열에는 영향을 미치지 않아야 합니다.
'열 전환기의 유일한 "문제"는 동시에 여러 역할에서 동일한 열을 가질 수 없다는 것입니다.': 불행히도 이것이 바로 제가 필요한 것입니다.
Role Switcher 라는 새 전환기 추가 에 대한 위시리스트 항목을 만들었습니다. 현재로서는 스크립팅 솔루션이 필요하다고 생각합니다. 그래프 작성기와 색상 역할로만 제한 된다면 생성하기가 좀 더 쉽습니다(시간이 있을 때 이를 위한 추가 기능을 만들 가능성이 높습니다).
다음은 매우 빠른 스크립트 버전입니다.
Names Default To Here(1);
If(Is Empty(Current Report()),
Throw("No open reports found");
);
cur_report = Current Report() << XPath("//OutlineBox[@helpKey='Graph Builder']");
If(N Items(cur_report) < 1,
Throw("No graph builder open");
,
cur_report = cur_report[1] << Get Scriptable Object;
dt = cur_report << Get Data Table;
);
// Find current Color role
find_role_column = Function({gb, role = "Color"}, {Default Local},
vars = gb << Get Variables();
col = "";
role_idx = 0;
For Each({var, idx}, vars,
role = var["Role"];
If(role == "Color",
col = var[1] << get name;
role_idx = idx;
break();
);
);
return(Eval List({col, role_idx}));
);
replace_role_column = function({gb, new_col, role = "Color"}, {Default Local},
{colname, role_idx} = find_role_column(gb);
gb << inval;
If(role_idx > 0,
gb << Remove Variable(role_idx);
);
Eval(EvalExpr(
gb << Add Variable({Expr(NameExpr(AsColumn(new_col))), Role(Expr(role))});
));
wait(0);
gb << update window;
return(1);
);
nw = new window("demo",
clb = Col List Box(Datatable(dt), width(250), maxSelected(1),
<< Set Function(function({this},
replace_role_column(cur_report, this << get selected, "Color");
));
)
);
clb << Set Items(dt << Get Column Names("String"));
더 나은 것을 만드는 데는 시간이 좀 걸리며 주말 동안 하나를 만들 수 있는 충분한 시간이 있을 수 있습니다. (이것은 내 Column Quick Swapper와 매우 유사합니다. Graph Builder에서 여러 Y 및 X축 열을 쉽게 변경할 수 있습니다 .)
흥미로운. 귀하의 대본에서 내용을 일부 얻은 것 같지만 다음 주에 작업하려면 시간이 좀 필요할 것 같습니다.