Well, in the Nielsen and Molich's 10 User Interface Design Guidelines you have a specific bullet that states:
Error prevention. Whenever possible, design systems so that potential errors are kept to a minimum. Users do not like being called
upon to detect and remedy problems, which may on occasion be beyond
their level of expertise. Eliminating or flagging actions that may
result in errors are two possible means of achieving error prevention.
This, however, is not always possible to avoid. To give some context, for a good part of my professional life I've been a Researcher and Scientific Software Developer. So I'm sensible to your problem in data mining and visualization.
Almost every person that calls itself an UX specialist advocates easiness of use and meaningful operations(see also). This implies that if an option is not valid than it shouldn't really be an option. Let me quote from an article of usability.gov:
Make sure that the system communicates what’s happening. Always
inform your users of location, actions, changes in state, or errors.
The use of various UI elements to communicate status and, if
necessary, next steps can reduce frustration for your user.
As so good possibilities to prevent an event from occurring could be disabling the widgets that enable the user to proceed (when selection is invalid); not allowing the selection at all; or letting the user proceed but give a result that makes is obvious why that selection was not good at all. And here I quote:
Great design is invisible A curious property of great design is that it usually goes unnoticed by the people who use it. One reason
for this is that if the design is successful the user can focus on
their own goals and not the interface…when they complete their goal
they are satisfied and do not need to reflect on the situation. As a
designer this can be tough…as we receive less adulation when our
designs are good. But great designers are content with a well-used
design…and know that happy users are often silent.
So if it is a possibility not to even consider the "null" data for a selection that might be the best approach. One common problem here is that, when dealing with large amounts of data, using this preventive approach to design might be too computation expensive. As so you are only able to tell the operation is invalid after you actually tried to run it. If this is the case little options are left beyond telling the user why the its not possible to proceed or just proceed and give a result that makes it obvious the selection is not good (empty chart with a grey message at the center saying something like "selection is empty").
I think undoing the operation without providing a sensible explanation to something that might not be obvious to the user is the worst case scenario.
You have mentioned another point:
If preventing, would you make the drilldown options cascade? Which
means if user updates a prior filter it resets all that follows which
could potentially undo the users prior selections. OR Would you try to
label anything where that will occur?
Which implies that some changes might have repercussions into other user inputs (if I understood it correctly). Its not always easy to maintain a dynamic workflow where no user action is wasted. But if you are whiling to do it this is certainly the best option. If some change needs to occur at some point in the "past" of the workflow, its "future" should be updated on the strictly necessary fields. So if have a workflow where you are stating an address starting by country and followed by region, city, block, street, door, changing the country field (after filling the whole questionnaire) should only reset the remaining fields if they prove incompatible.
Its difficult to perceive if any of this points are valid for your particular case. Consider providing a more visual approach (perhaps with a sketch of your GUI) to your problem. In any case my conclusion, and opinion, is that your design should be preventive and invisible (if possible).