Give this a try:
1) Create a calculated field that checks whether actual > budget. Something like:
WINDOW_MAX(IF ATTR([ACTUAL]) > ATTR([BUDGET]) THEN 1 ELSE 0 END)
2) Add this calculated field to your crosstab and edit your table calculation (right click measure > edit table calculation) so that you partition by contcentre and costtype_group. This will make all rows for each costcentre/costtype_group 1 if any of the rows within their partition meet the criteria of your calculated field.
3) Add this field as a filter and remove all rows (costcentre/costtype_group combinations) where your calculated field = 0.
Thanks a lot, Dylan!
I would never have come up with such a way and it took me a while to understand. I've got it now, it's working perfectly fine and it's incredibly easy!