Ying,
I think there are a couple of different use cases for joins in BI. There's dimension-to-fact-table style joins, where you want to store, say, product IDs in your fact table and product names and other details in a dimension table. Then there's joins of different kinds of facts, where you you want to do something like store ad impressions and ad clicks separately and join them to determine e.g. the clickthrough rate.
Currently we recommend doing both kinds of joins at data integration / ETL time. In the future, the first kind of join should be doable with good performance at Druid query time (see this proposal:
https://groups.google.com/forum/#!topic/druid-development/udiivvgoMO8). Even when that feature is available, the second kind of join should still be done pre-Druid.
Does that answer your question?