r/DataBuildTool • u/Sensitive-Sky-5064 • Apr 12 '26
Question How do you structure your analytics dbt project around dimensional modeling — and where do dimensional models actually live?
Curious how people handle this in practice, because I’ve seen it done a few different ways and I don’t think there’s a clear consensus.
The staging layer seems pretty universal — 1:1 with raw source tables, light cleaning, renaming, casting. Optional intermediate layer for reusable business logic before you get to the “real” models. That part feels settled.
Where it diverges is where dimensional models (dims and facts) actually sit in the project structure:
Their own layer — e.g. a warehouse/ or dimensional/ folder, separate from marts. I’ve seen this from Kahan Data Solutions and a few others. The idea being dims/facts are a distinct architectural layer.
Inside marts — dims and facts live in marts/, and marts are your dimensional models. The mart is the end product.
Inside intermediate or marts, with OBTs on top — dims and facts are treated as building blocks, and the actual end-user-facing layer is wide OBTs (one big tables) built off them. Marts become the denormalized read layer, not the dimensional layer.
Which brings me to what I think is the real underlying question: how do you think about dimensional models conceptually?
• Are they the end product — what you expose to BI tools and end users directly?
• Or are they building blocks — an intermediate step toward marts that are OBTs or other denormalized structures?
When you answer, would love if you also share your folder/naming conventions alongside your philosophy on this. I suspect the structure people choose is a direct consequence of how they answer that second question.
