Hello Forum!
I’m currently developing a flow for an interactive visualization of some data based on user selections.
The selections have a hierarchical structure (i.e., the first selection filters the options for the second, etc.) and I want the possible values for a downstream selection to be updated on change of an earlier. The selections are handled by Nominal Row Filter Widgets with Re-execution on change activated, and the plot is then rendered based on these selections.
The issue I am having is that I want the selections and the plot to be in the same component view, but I don’t want to generate the plot before all selections are set to their desired values (and the user hits something like a Refresh/Plot button).
A stripped down version of the component would look something like this:
I attach a toy example of the flow below (using KNIME 4.7.7).
OBS: In real life the data ETL for the plot is quite time consuming, and having to wait for it to re-execute every time some selection is changed is not a good user experience.
That’s right . It can also waits for a file to be created / modified or deleted. How about connecting your Empty Table Switch by a flow variable connection to the Refresh Widget and then to the Scatter Plot, see:
Yes, but it doesn’t solve the problem. It still executes the plot when the settings are changed (since the Nominal Row Filter Widgets re-executes everything after them at change).
This way you will have an updated plot every time you modify the second filter. If you modify the first one, you will also have to modify the second one if you want the graph to be displayed.
Hey, thanks a lot Jose!
Unfortunately, it still doesn’t do what I want. Let me explain.
In your update to my toy example, if the user (e.g.,) selects “A” in the First filter, nothing is plotted until the user selects something in the Second, “a” say.
I’m with you so far.
But as soon that there is something in the Includes box of the Second widget, the plot is going to be re-executed at any change in any of the widgets. So if you add “B” to the First one with “a” still in the Second, the plot is re-executed.
In the actual application there are hundreds of possible options in each of multiple widgets. And the users will likely only be interested in a few of them, and are bound to use double-click to move some value from Excludes to Includes at some widget or other, and will then unintentionally freeze the application until the plot is drawn again.
And will be frustrated.
That is why I want (something like) a Refresh button to execute the plot only when the user is satisfied with the selections. I realize that I could put the plot in a different component, but I really think that would break the flow of the flow…
I genuinely appreciate your effort to try to help me, both of you!
Thanks again / Erik
So adding “B” to the First widget draws the plot. Without pushing the Create/Refresh Plot button.
Actually, this is to be expected since the widgets re-execute downstream nodes on change.
What I would like is the Red and Blue part in the following screenshot to be executed independently, and that the Red part should be automatically re-executed on change within itself, and the Blue only when the button is pushed.
The problem with the Refresh button is that it only passes a dummy flow-variable when pressed, and you can’t really act on the event. It would be nice in the future to have a Button-like widget, that is 0 by default and changes to 1 when pressed, or something like that.