In those cases I minimize the chart while I'm doing my selections, only re-opening it when I've finished. The chart will only be recalculated when you open it again.
Maybe also you could use alternate states: making selections in one and copying them to the one the chart is based on, see this thread QlikView 11 Alternate States: copy a state to a... | QlikCommunity
Another possibility, if your chart could rely on an aggregate table made during the load with much less than 9.3 million lines, it could solve the issue.
Hope this helps.
my suggestion is a button and a variable.
- define a variable (for ex. "vCalc") and use the button as a toggle switch
-- action of the button is "Set Variable" and Value "=not vCalc"
-edit the "Calculation Condition" at the General Tab of all the charts to be calculated after clicking the button
-- calc condition of these is "vCalc" (no if() or so necessary)
-the initial Value of your Variable should be -1 (=true())
The previous selections are totally valid, but the way I tend to approach this is to add a counter field to the main fact table (I do this as a matter of course to almost every table):
1 as FactCount,
[... rest of table ...]
You can then use a calculation condition (on the General tab of the properties) of:
=sum(FactCount) <= 100000
This way the chart may render if you have one item picked with no date selection, or a single date selected across all items, or neither of those fields selected but still enough selections to take things to a reasonable number of rows.
If you use Calculation Conditions you should also explain to the user what you have done. Do this by clicking on the Error Messages button and then Calculation Condition Unfulfilled. This gives a box where you can type an explanation, such as Please Select Fewer Rows Of Data To View This Chart.
Also, you mention that all links are on a single key. If you can remove links from your data model - by merging data at load time - you may find performance improves. As it sounds like historical data can not change in this data set you should ensure you have an incremental load of that merged data.
Hope that helps,