こんにちは、
グラフビルダーオブジェクトの作成時に、次のように変数を定義できます: Variables(X(:x), Y(:y), Color(:color))
リストから特定の列を選択して、色の列を動的に変更したいのですが、どうすれば実現できますか?
よろしくお願いします。
興味深いですね。あなたのスクリプトから断片的な部分は理解できたと思いますが、来週はこれに取り組む時間が必要です。
ここにスクリプトの非常に短いバージョンがあります
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"));
より良いものを作成するには時間がかかりますが、週末には作成するのに十分な時間があるかもしれません(これは、グラフ ビルダーで複数の Y 軸と X 軸の列を簡単に変更できる Column Quick Swapperにかなり似ています)。
Role Switcher という新しいスイッチャーを追加するためのウィッシュ リスト項目を作成しました。現在、これにはスクリプト ソリューションが必要だと思いますが、グラフ ビルダーとカラー ロールに限定されている場合は、作成が少し簡単になります (時間があるときに、このためのアドインを作成する可能性が高いです)。
「列スイッチャーの唯一の「問題」は、複数のロールで同時に同じ列を持つことができないことです。」: 残念ながら、これはまさに私が必要としているものです。
それはまさに列スイッチャーが行うことではありませんか? 列スイッチャーの唯一の「問題」は、複数のロールで同時に同じ列を持つことができないことです。
こんにちは、Jarmo さん。これは本当ですが、明らかにもっと正確にする必要があります。列スイッチャーは、x 列や y 列ではなく、色の列にのみ影響を与える必要があります。