Put anything reused, tested, or definition-critical — metrics, joins, business logic — in the warehouse via dbt so it is version-controlled and consistent; leave presentation, ad-hoc filtering, and last-mile formatting to the BI tool. The rule of thumb: if two dashboards would compute it, it belongs upstream.
How to answer it
Anything two people could compute differently belongs upstream, where it is defined once and tested. Anything about how it looks belongs in the tool.
Upstream, in dbt or the equivalent:
Metric definitions: what counts as an active user, which orders are revenue, which are refunds.
Joins and grain: the fact and dimension tables at the grain the dashboards need.
Business logic that must agree everywhere: fiscal calendar, currency conversion, customer segmentation rules.
Anything reused by more than one dashboard or by anything other than the BI tool.
Last-mile arithmetic that is display-only, like showing a value as a share of the visible total.
Genuinely ad-hoc exploration, until it becomes a recurring question, at which point it moves upstream.
The test to apply: if the BI tool were replaced tomorrow, what would be lost? Whatever the answer is should not have been in the tool. And the reverse: if a definition lives in a dashboard, the second dashboard will define it slightly differently, and the two-numbers-for-one-metric conversation follows.
Worked line: "Revenue net of refunds was computed in three dashboards with two different refund windows. Moved it into one tested model with the 30-day rule; all three dashboards now read the same column."
What they are checking: the reuse and testability argument, and a concrete rule rather than a preference.
Common mistake: "whatever is faster to build". It is always faster to build in the tool, once.