The TREATAS function can be used to detect filters from your visual (filter context) and then apply these filters to a disconnected table in your data model.
It takes a source table (first parameter) and applies the values from that table to columns in a target table (second and subsequent parameters).
You can use a function like VALUES as the first parameter to detect the initial filter context in a visual and hence TREATAS can propagate filter context to the target table.
You do not need to have a physical relationship between the source table and the target table. It therefore means that TREATAS can be used as a virtual many to many relationship.
You can pass multiple filters (columns) from the source table to the target table. TREATAS can therefore can be used to apply multiple relationships (ie on more than one column) between tables.
Read on for a good example of how this works.