you might try having a 'translation' in the record filtering section of the report, and filter the records. The distinct count is looking at the aggregates (the sigma) and selecting the distinct count and the grouping.
if you don't use a stored proc, and you don't have a table that lists the cities and regions, then you are going to have to bury the translation somewhere. It doesn't need to be a bunch of ORs, it could be just 1 string like "|los angeles|las vegas|...|" and you can concatenate different regions together and perhaps append individual cities to that you have 1 big string with some delimiter between each one. Then in the record selection filter you can check something like:
instr("|"+{table.field}+"|", delimitedString)>0
this by itself, would filter, you can add it to an IF statement if there is more or it is easier for you.
HTH