You can string together a lot of Or operators and pairs of parenthesis to get what you want or you can use the Case function: Either way, the catch here is that the number of possible filter combinations to be allowed for with 4 fields is quite large and tedious to set up:
Case ( IsEmpty ( PortalTable::Field1 & PortalTable::Field2 & PortalTable::Field3 ) and PortalTable::Field4 = Globals::Globalfield4 ; True ;
IsEmpty ( PortalTable::Field2 & PortalTable::Field3 & PortalTable::Field4 ) and PortalTable::Field1 = Globals::Globalfield1 ; True ;
// continue this pattern so that you can leave three fields empty and specify only filter data in the 4th global field.
IsEmpty ( PortalTable::Field1 & PortalTable::Field2 ) and
PortalTable::Field3 = Globals::GlobalField3 and PortalTable::Field4 = Globals::Globalfield4 ; True ;
//See the pattern here?
There's a lot more clauses to the Case function to go before you have something for every possible combination of empty fields and fields with specified values in your 4 global fields.
That's what I was thinking, I may just skip it. I don't think it would be that useful to see the full list anyway.