Another approach would be to determine the rating for each client in your load script. With this approach if you made a selection that did not include the max rating for the client, you can still display the max rating.
1) load the table as you do now (I'll call it table1 in this example)
2) load a new table that contains client and their max rating
max(rating) as max_rating
group by client;
3) join the max rating just created back to your original table
If you do not want to make changes to your script, you could use the text itself for the rating. Fortunately in your case, the first letter in the ratings are in sequential order. You could use something like
I have attached a small sample demonstrating this.
Let me know if this is what you were looking for.
textrating.qvw 131.8 K
Untested, but use dual() to give rating a numeric value in the script:
dual(rating,match(rating,'small','med','big')) as rating
Then to get the max rating back as text for your current selections and dimension values:
pick(max(rating),'small','med','big') as rating
Though Nimish is right that for now, you could use the fact that your ratings have a text sequence, but it's even simpler than the expression he gave: