I have managed to solve the first indicator. As is often the case it seems pretty obvious in retrospect.
I created a program indicator for the DSA event program that determines if the event itself has failed.
if ( #{number of people tested positive} / #{number of people tested} > 0.0.2, 1, 0 )
with a filter of
#{number of people tested} != 0
I then created a normal indicator that simply aggregates this program indicator using the Max aggregation. So now if I look at an OU that has 3 successful events and 1 failed event, the indicator will show 1, indicating the whole OU has failed.
What would be nice is if there is a way for it to only aggregate this at the lowest OU level, so that if you looked at a State or a country it would actually count the total number of OUs that have failed.
For now this works for my needs though.
Just got to solve the other indicator now.