Instead making 3 client dimension tables , create one Client table with concatenate other client types like below.
'Clients' as %Client_Type // this field differentiate type of client
From Clients.qvd (qvd) ;
'Agents' as %Client_Type // this field differentiate type of client
From Agents.qvd (qvd) ;
'Contacts' as %Client_Type // this field differentiate type of client
From Contacts.qvd (qvd) ;
You did a nice job of creating a star schema out of a compact database representation (all contacts of whatever type in a single table) And if it works, then it's correct.
A subsequent question you can ask yourself: is this an optimal solution? Is performance hampered by the extra hops and should you merge the fields you really need into the workorder table and throw away the others (throwing away what you don't really need is always a good thing)? Is there a massive amount of data present in the document, or is size rather limited and are we optimizing for fun while getting no real improvements...
A good read by HIC: A Myth about the Number of Hops
Another one by Miguel: The Importance Of Being Distinct
And another more philosophical post by HIC about what to do when: Data Modelling: Clarity vs. Speed